【Python-VTK】【一】最基本的体数据可视化

【Python-VTK】【一】最基本的体数据可视化

by 今天不飞了

真是服了自己,半年不用就能忘得一干二净……每次都要重新百度,而网上的资料总是纷繁杂乱。这次“重新学习”,按自己的习惯分节记录下来,方便以后查看。也分享给其他从零开始的小伙伴。


三维矩阵体绘制-最简结构

网上很多可视化文章都是博主按照自己的工程需求写的,有些需求比较高,代码就相对复杂(我们可能用不着)。所以这里将代码简化,仅保留基本结构(不确定还能不能进一步删减)。

代码如下,里面的数字按需求随意改

	# arr3d 是你事先准备好的矩阵
	# [矩阵转vtk类]
    # (这个函数就是这么长...我也很无奈)
    image = vtk.util.vtkImageImportFromArray.vtkImageImportFromArray()        
    image.SetArray(arr3d)                           # 加载三维矩阵
    image.SetDataSpacing(spacing)                   # 设置PixelSpacing
    image.Update()

     # [创建渲染算法]
    volumeMapper = vtk.vtkGPUVolumeRayCastMapper()   
    volumeMapper.SetInputData(image.GetOutput())    # 加载渲染对象(原始提数据)
    
    # [创建物体颜色函数]
    colorFunc = vtk.vtkColorTransferFunction()      # 创建伪彩转换函数
    colorFunc.AddRGBPoint(0.0, 0.0, 0.0, 0.0)    
    colorFunc.AddRGBPoint(30.0, 196/255, 96/255, 0)
    colorFunc.AddRGBPoint(90.0, 254/255, 218/255, 182/255)
    colorFunc.AddRGBPoint(200.0, 239/255, 239/255, 239/255)
    
    # [创建物体不透明度函数]
    opacityFunc = vtk.vtkPiecewiseFunction()        # 创建分段函数
    opacityFunc.AddPoint(0, 0)
    opacityFunc.AddPoint(10.0, 0.01)
    opacityFunc.AddPoint(100.0, 0.5)
    opacityFunc.AddPoint(200, 1)

    # [创建物体属性]
    volumeProperty = vtk.vtkVolumeProperty()         
    volumeProperty.SetColor(colorFunc)              # 设置颜色转换
    volumeProperty.SetScalarOpacity(opacityFunc)    # 设置不透明度
    volumeProperty.SetInterpolationTypeToLinear()   # 设置插值方案
    volumeProperty.ShadeOn()                        # 阴影
   
    # [创建物体]
    vol = vtk.vtkVolume()    
    vol.SetMapper(volumeMapper)                     # 加载渲染算法
    vol.SetProperty(volumeProperty)                 # 加载物体属性    

    # [创建一个渲染器]
    ren = vtk.vtkRenderer()
    ren.AddVolume(vol)                              # 加载物体
    ren.SetBackground(0.0, 0.0, 0.0)                # 设置背景颜色
    
    # [创建一个渲染窗口]
    renWin= vtk.vtkRenderWindow()
    renWin.AddRenderer(ren)                         # 加载渲染器
    renWin.SetSize(600, 600)                        # 设置窗口尺寸
    
    # [创建交互器]
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)                    # 加载渲染窗口
    
    # [开始绘制]
    ren.ResetCamera()                               # 重置相机    
    renWin.Render()                                 # 渲染
    iren.Initialize()                               # 初始化交互器
    iren.Start()                                    # show

其他

  1. 后续一点点加入更多模块和功能,让它NB起来
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值