禁止百度收录的网站,网站负责人 主体负责人,商务网站规划与建设的目的,建筑工程网官方网站一#xff1a;主要的知识点
1、说明
本文只是教程内容的一小段#xff0c;因博客字数限制#xff0c;故进行拆分。主教程链接#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①多边形数据裁剪(屏蔽)图像数据 二#x…一主要的知识点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它会生成一个vtkImageDataZ维度的extent是常数 Extent: (0, width-1, 0, height-1, 0, 0)也就是说它的 Z 范围只有一层z0是 二维的 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()