当前位置: 首页 > 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.jsqmd.com/news/116291/

相关文章:

  • 【无功优化】基于改进遗传算法的电力系统无功优化研究【IEEE30节点】(Matlab代码实现)
  • 上海交大《科学》发文,首次实现支持大模型的全光计算芯片
  • Linly-Talker支持模型灰度发布,逐步上线新功能
  • Linly-Talker开源镜像部署指南(含GPU加速优化)
  • 考虑实时市场联动的电力零售商鲁棒定价策略(Matlab代码实现)
  • 用Linly-Talker制作节日祝福视频?个性化礼品新创意
  • 可计算性:物理世界和意识
  • 【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​
  • Linly-Talker支持多线程推理,高并发场景从容应对
  • 用Linly-Talker生成股票行情分析视频?金融内容自动化
  • Linly-Talker如何处理中英文混读?语音识别适配策略
  • Linly-Talker支持模型热切换,A/B测试轻松实现
  • 【虚拟同步机控制建模】三相虚拟同步发电机双环控制(Simulink仿真实现)
  • 途知抖音多模态数据采集与AI融合解析
  • AI教师上岗记:Linly-Talker在K12教育中的实际效果测评
  • 人生的机会,从来不在计划之中?(说说我在百度的故事...)
  • 海南自由贸易港全岛封关首日,西门子能源在海南启动建设燃机总装基地及服务中心 | 美通社头条
  • Linly-Talker音频频谱可视化:调试语音合成质量的利器
  • 复星与比亚迪达成全球战略合作,引领“出行+度假“新生态
  • cesium126,230816,Ce for Ue 加载服务器上的地图(GeoServerWMS):
  • 用Linly-Talker生成旅游景点解说视频?文旅宣传新手段
  • Linly-Talker如何应对长文本输入?分段处理策略解析
  • Linly-Talker音频响度标准化,符合广电播出规范
  • 万字长文!关于AI绘图,一篇超详细的总结发布
  • 【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)
  • Linly-Talker支持模型加密传输,防止中间人攻击
  • Linly-Talker如何保证语音时序对齐?CTC损失函数应用解析
  • Linly-Talker支持CUDA核心监控,实时掌握GPU利用率
  • 用Linly-Talker生成天气预报视频?气象服务智能化尝试
  • TOSA ROSA