news 2026/4/15 14:51:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 14:51:08

Linly-Talker开源镜像部署指南(含GPU加速优化)

Linly-Talker开源镜像部署指南(含GPU加速优化) 在虚拟主播24小时不间断带货、AI客服秒回千条咨询的今天,数字人早已不再是科幻电影里的概念。但真正落地一个能“听懂、会说、表情自然”的实时对话系统,对大多数团队来说仍是不小的…

作者头像 李华
网站建设 2026/4/15 14:49:31

Linly-Talker支持异构计算,CPU+GPU协同推理

Linly-Talker支持异构计算,CPUGPU协同推理 在数字人技术快速落地的今天,用户早已不满足于“会动的头像”或“预录语音播报”。从虚拟主播到远程客服,人们对交互体验的要求正从“能用”迈向“好用”——低延迟、高自然度、个性化表达成为新标准…

作者头像 李华
网站建设 2026/4/15 13:11:27

Linly-Talker音频频谱可视化:调试语音合成质量的利器

Linly-Talker音频频谱可视化:调试语音合成质量的利器 在构建数字人系统时,你是否曾遇到这样的场景:语音输出听起来“怪怪的”——某个字突然消失、语调平得像念经、或是音色莫名失真?可当你想排查问题时,模型却像一个黑…

作者头像 李华
网站建设 2026/4/11 21:16:14

Linly-Talker语音中断恢复机制,确保对话连贯性

Linly-Talker语音中断恢复机制,确保对话连贯性 在虚拟主播流畅回应用户提问、数字客服耐心倾听复杂诉求的场景背后,一场关于“对话节奏”的技术博弈正悄然展开。人们早已不满足于AI只是“听完再说”,而是期待它像真人一样——能容忍停顿、理解…

作者头像 李华
网站建设 2026/4/15 14:45:38

Linly-Talker如何应对长文本输入?分段处理策略解析

Linly-Talker 如何应对长文本输入?分段处理策略解析 在数字人系统逐渐从实验室走向真实业务场景的今天,一个现实问题日益凸显:用户不再满足于“你好”“今天天气怎么样”这类简短交互,而是希望数字人能讲解一份万字白皮书、复述一…

作者头像 李华