怎么使用Python VTK完成图像切割
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"怎么使用Python VTK完成图像切割"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用Python VTK完成图像切割"文章能帮助大
千家信息网最后更新 2025年11月07日怎么使用Python VTK完成图像切割
这篇文章主要介绍"怎么使用Python VTK完成图像切割"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用Python VTK完成图像切割"文章能帮助大家解决问题。
1、读取二维图片序列完成面绘制
详情见Python-VTK批量读取二维切片并显示三维模型
2、vtk.vtkOutlineFilter()介绍
这个空间就相当于生成渲染模型的轮廓线,比如三维图像大小为(256x256x200),那么这个控件就会生成一个长宽高分别为256x256x200的一个长方体框架
详细介绍:VTK官方文档
3、隐函数平面模块vtk.vtkImplicitPlaneWidget()
使用该模块可以灵活的调整需要选取的平面 vtkImplicitPlaneWidget官方文档
4、vtk.vtkClipPolyData()
vtkclippolydata的剪切结果,根据切平面法线分为上下两部分,接口中有相应的输出接口
vtkClipPolyData官方文档
切割效果展示
代码如下:
import vtkdef main(): arender = vtk.vtkRenderer() arender.SetViewport(0, 0.0, 0.5, 1.0) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(arender) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Reader = vtk.vtkMetaImageReader() # Reader.SetFileName("bbb.mhd") # Reader.Update()#读取图片、面绘制 Reader = vtk.vtkPNGReader() Reader.SetNumberOfScalarComponents(1) Reader.GetOutput().GetOrigin() Reader.SetDataByteOrderToLittleEndian() Reader.SetFileDimensionality(3) Reader.SetDataExtent(0, 512, 0, 512,0, 226) Reader.SetFilePrefix("E:/qct_data/in_out_data/in_data/inner/label/22/") #Reader.SetFilePrefix("C:/Users/deng5/Desktop/2/48/") Reader.SetFilePattern("%s%d.png") Reader.SetDataSpacing(1, 1, 1) # Volume Pixel Reader.Update() #面绘制代码,详情见使用python-vtk完成面绘制文章 skinExtractor = vtk.vtkContourFilter() skinExtractor.SetInputConnection(Reader.GetOutputPort()) skinExtractor.SetValue(0, 1) skinExtractor.ComputeGradientsOn(); skinExtractor.ComputeScalarsOn(); smooth = vtk.vtkSmoothPolyDataFilter() smooth.SetInputConnection(skinExtractor.GetOutputPort()) smooth.SetNumberOfIterations(100) skinNormals = vtk.vtkPolyDataNormals() skinNormals.SetInputConnection(smooth.GetOutputPort()) skinNormals.SetFeatureAngle(50) skinStripper = vtk.vtkStripper() skinStripper.SetInputConnection(skinNormals.GetOutputPort()) skinMapper = vtk.vtkPolyDataMapper() skinMapper.SetInputConnection(skinStripper.GetOutputPort()) skinMapper.ScalarVisibilityOff() skin = vtk.vtkActor() skin.SetMapper(skinMapper)#定义一个图像边界控件 outlineData = vtk.vtkOutlineFilter() outlineData.SetInputConnection(Reader.GetOutputPort()) mapOutline = vtk.vtkPolyDataMapper() mapOutline.SetInputConnection(outlineData.GetOutputPort()) outline = vtk.vtkActor() outline.SetMapper(mapOutline) outline.GetProperty().SetColor(0, 0, 0) aCamera = vtk.vtkCamera() aCamera.SetViewUp(0, 0, -1) aCamera.SetPosition(0, 1, 0) aCamera.ComputeViewPlaneNormal() aCamera.Azimuth(30.0) aCamera.Elevation(30.0) aCamera.Dolly(1.5) arender.AddActor(outline) arender.AddActor(skin) #splineActor.GetProperty().SetLineWidth(5) #arender.AddActor(splineActor) #arender.AddActor(pointActor) arender.SetActiveCamera(aCamera) arender.ResetCamera() arender.SetBackground(.2, .3, .4) arender.ResetCameraClippingRange() renWin.SetSize(1000, 1000) style = vtk.vtkInteractorStyleTrackballCamera() iren.SetInteractorStyle(style);#定义切割器 global cliper cliper = vtk.vtkClipPolyData() cliper.SetInputData(skinStripper.GetOutput())#定义平面隐函数 implicitPlaneWidget = vtk.vtkImplicitPlaneWidget() implicitPlaneWidget.SetInteractor(iren) implicitPlaneWidget.SetPlaceFactor(1.25) implicitPlaneWidget.SetInputData(skinStripper.GetOutput()) implicitPlaneWidget.PlaceWidget() global coneSkinActor coneSkinActor = vtk.vtkActor() coneSkinActor.SetMapper(skinMapper) rRenderer = vtk.vtkRenderer() rRenderer.SetBackground(0.2, 0.3, 0.5) rRenderer.SetViewport(0.5, 0.0, 1.0, 1.0) coneSkinActor.RotateZ(90) rRenderer.AddActor(coneSkinActor) renWin.AddRenderer(rRenderer) #关联CallBack函数 implicitPlaneWidget.AddObserver("EndInteractionEvent", my_call_back) implicitPlaneWidget.On() renWin.Render() iren.Initialize() iren.Start()#CallBack函数def my_call_back(pWidget,ev):#表示当pWidget控件改变时,触发函数 if (pWidget): print(pWidget.GetClassName(), "Event Id:", ev) planeNew = vtk.vtkPlane() #获得pWidget中的平面,将平面值赋值planeNew pWidget.GetPlane(planeNew) #cliper将裁剪器cliper的平面设置为planeNew cliper.SetClipFunction(planeNew) planeNew.GetNormal() cliper.Update(); #将裁减后的模型传递给另一个窗口 clipedData = vtk.vtkPolyData() clipedData.DeepCopy(cliper.GetOutput()) coneMapper = vtk.vtkPolyDataMapper() coneMapper.SetInputData(clipedData) coneMapper.ScalarVisibilityOff() coneSkinActor.SetMapper(coneMapper) print("Plane Normal = "+str(planeNew.GetNormal())) print("Plane Origin = "+str(planeNew.GetOrigin())) main()关于"怎么使用Python VTK完成图像切割"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
平面
图像
函数
官方
控件
文档
模型
知识
代码
图片
接口
文章
模块
行业
详情
三维
二维
生成
不同
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发测试进度管理软件
对网络安全负责人约谈
十大新兴网络技术有限公司
数据库中弱三范怎么理解
各大运营商手机数据库对比
物联网网络安全行业分析
校园网络安全事故征文
dns服务器浙江义乌云空间
多个微服务数据库连接数不够
软件开发开展情况汇报
电脑主辅和服务器的区别
网络安全法三周年讲座
数据库h2查询性能
手游寻仙服务器
数据库默认字符集怎么修改
网络视频服务器1路
云端恢复数据库
四川gps授时服务器
潍坊电商软件开发公司有哪些
广西学习软件开发中心
拒绝网络安全画2年级
宁波嵌入式软件开发亿连信
网络安全意识教育培训视频
上海高性能服务器
如何衡量it软件开发量
张湾区服务软件开发市场
django web服务器
九台区网络技术咨询口碑推荐
一粒籽软件开发有限公司
数据库中的对象指的是