当前位置: 首页 > news >正文

PolyDataToImageDataStencil如何用多边形数据作为“模板”来裁剪或屏蔽图像数据

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①多边形数据裁剪(屏蔽)图像数据


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkIOImage import vtkPNGReader from vtkmodules.vtkFiltersSources import vtkSphereSource from vtkmodules.vtkFiltersCore import vtkTriangleFilter from vtkmodules.vtkImagingStencil import vtkPolyDataToImageStencil, vtkImageStencil from vtkmodules.vtkCommonDataModel import vtkPlane from vtkmodules.vtkFiltersCore import vtkCutter, vtkStripper, vtkImageAppend from vtkmodules.vtkInteractionImage import vtkImageViewer from vtkmodules.vtkRenderingCore import vtkRenderWindowInteractor def main(): fn = "Data/fullhead15.png" # 一:用球体集合裁剪图像 reader = vtkPNGReader() reader.SetFileName(fn) """ PNG图像明明是一个二维图像,为什么这里还能设置三个维度的间距? vtkPNGReader是一个二维图像读取器,单独读一个PNG,它会生成一个vtkImageData,Z维度的extent是常数 Extent: (0, width-1, 0, height-1, 0, 0),也就是说它的 Z 范围只有一层(z=0),是 二维的 2D 图像切片 那这里的1.5的含义是指,在单张图片的情况下,z_spacing只是被保留作元数据 """ reader.SetDataSpacing(0.8, 0.8, 1.5) reader.SetDataOrigin(0, 0, 0) # 设置图像原点在坐标系中的位置 sphere = vtkSphereSource() sphere.SetPhiResolution(12) sphere.SetPhiResolution(12) sphere.SetCenter(102, 102, 0) sphere.SetRadius(60) # 将球体sphere转换为三角形 stripper = vtkTriangleFilter() stripper.SetInputConnection(sphere.GetOutputPort()) """ 把球体的多边形网格 转换成一张图像掩膜(stencil mask),即: 球体内部的像素 = 1(保留或删除) 球体外部的像素 = 0(反向操作) """ # 将polydata转换为图像模板,为之后的图像处理做准备 dataToStencil = vtkPolyDataToImageStencil() dataToStencil.SetInputConnection(stripper.GetOutputPort()) dataToStencil.SetOutputOrigin(0, 0, 0) dataToStencil.SetOutputSpacing(0.8, 0.8, 1.4) # 运用球体遮罩裁剪图像 stencil = vtkImageStencil() stencil.SetInputConnection(reader.GetOutputPort()) stencil.SetStencilConnection(dataToStencil.GetOutputPort()) stencil.ReverseStencilOn() # 反向裁剪,表示保留球体外部,挖掉球体内部 stencil.SetBackgroundValue(500) # 被挖掉的区域填充值为500 # 二:用球体和平面切割出的轮廓裁剪图像 reader2 = vtkPNGReader() reader2.SetFileName(fn) reader2.SetDataSpacing(0.8, 0.8, 1.5) reader2.SetDataOrigin(0.0, 0.0, 0.0) plane = vtkPlane() plane.SetOrigin(0, 0, 0) plane.SetNormal(0, 0, 1) cutter = vtkCutter() cutter.SetCutFunction(plane) cutter.SetInputConnection(sphere.GetOutputPort()) stripper2 = vtkStripper() stripper2.SetInputConnection(cutter.GetOutputPort()) dataToStencil2 = vtkPolyDataToImageStencil() dataToStencil2.SetInputConnection(stripper2.GetOutputPort()) dataToStencil2.SetOutputSpacing(0.8, 0.8, 1.5) dataToStencil2.SetOutputOrigin(0.0, 0.0, 0.0) stencil2 = vtkImageStencil() stencil2.SetInputConnection(reader2.GetOutputPort()) stencil2.SetStencilConnection(dataToStencil2.GetOutputPort()) stencil2.SetBackgroundValue(500) imageAppend = vtkImageAppend() imageAppend.SetInputConnection(stencil.GetOutputPort()) imageAppend.AddInputConnection(stencil2.GetOutputPort()) interactor = vtkRenderWindowInteractor() viewer = vtkImageViewer() viewer.SetInputConnection(imageAppend.GetOutputPort()) viewer.SetupInteractor(interactor) viewer.SetZSlice(0) # 控制显示Z轴的第几层 """ 参数 视觉效果 增大 ColorWindow 提高对比范围,整体更“平” 减小 ColorWindow 缩小对比范围,图像更“锐” 增大 ColorLevel 图像整体变亮 减小 ColorLevel 图像整体变暗 """ viewer.SetColorWindow(2000) # 控制对比度范围 viewer.SetColorLevel(1000) viewer.GetRenderWindow().SetWindowName('PolyDataToImageDataStencil') viewer.Render() interactor.Start() if __name__ == '__main__': main()
http://www.cnnetsun.cn/news/168172.html

相关文章:

  • Linly-Talker支持模型性能 profiling,精准定位瓶颈
  • Linly-Talker如何处理中英文混读?语音识别适配策略
  • LLM 的思考方式
  • 【虚拟同步机控制建模】三相虚拟同步发电机双环控制(Simulink仿真实现)
  • 万字长文!关于AI绘图,一篇超详细的总结发布
  • 数字人会议主持:Linly-Talker在远程会议中的创新应用
  • 【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)
  • 用Linly-Talker做企业宣传片?品牌传播的AI新路径
  • Electerm(桌面终端模拟软件)
  • Thinkphp和Laravel基于Vue的黄山旅游景区门票预订网站的设计与实现_3h38caai
  • Thinkphp和Laravel基于大数据架构的大学生求职招聘就业岗位推荐系统的设计与实现_67911t4j
  • AI工具实战测评技术
  • 创意AI应用开发大赛技术
  • 全球股市估值与海洋微生物能源技术的关系
  • 基于python的同城宠物照看数据可视化分析系统的设计与实现_34cl0po8--论文
  • 【路径规划】基于RRT快速探索随机树的图像地图路径规划实现3附matlab代码
  • Quartz 工作模式,是“堵塞排队”还是“并发狂奔”?
  • 【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)
  • 【C2000系列DSP的反向灌电流】为什么热插拔的时候I2C总线电平会被拉低?
  • Gemini Inc靶场练习(包含suid提权,文件包含漏洞,ssh免密登录)
  • 软件解耦与扩展:插件式开发方式(基于 C++ 与 C# 的实现)
  • 免费降AI率的工具红黑榜:认准这2个免费降AI率工具,亲测有效!
  • 霍华德·马克斯的市场周期定位技巧
  • 1500字免费降AIGC率的额度,2026年毕业论文查重必备!
  • 1500字免费降AIGC率的额度,2026年毕业论文查重必备!(附每天5次aigc查重)
  • 别再焦虑了!6款实测有效的降ai工具推荐,学姐手把手教你降低ai率!
  • 国外软件,安装即时专业版!
  • 防控近视你需要知道的这些科普常识!
  • 抽奖机随机号码生成:3 种算法实现 + 测试全解析(附完整代码)
  • LLM入门指南:预训练、SFT和强化学习三步构建ChatGPT式大模型