首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用VTK和Python做体绘制

如本文标题所言,本文确实很中二。

翻译迟迟没有下篇的原因很简单,因为是原作者的源代码现在跑始终有问题,毕竟4,5年前的源代码,vtk和python都升级了很多版本了,别说接口了,就连语法都变了不少。这一直是一块心病。

同时深感vtk资料之匮乏,google也上不了,百度搜索的结果都是翻来覆去那几句车轱辘话,对解决问题近乎毫无帮助。路线错了,研究越多越反动,所以走了不少弯路,差点跳到itk里面去了。

所以再次验证了那句话,程序员可以数学不好,但是不可以英语不好。

故参考国外资料,修改原文的源代码,并且保留了我的修改痕迹。

做得不好的地方,欢迎大家指出,非常感谢!

环境:centos7+pytho3.4+vtk8.0.0,此段代码需配合原文中下载的mha和colour两个文件使用。

效果如下图:

这显然不是一个漂亮的体绘制图,但是,如原文作者所言,重点不在于此。

#######################################

import os

import numpy

import vtk

#######################################

# Path to the .mha file

filenameSegmentation = "./brain_segmentation.mha"

# Path to colorfile.txt

filenameColorfile = "./colorfile.txt"

# Opacity of the different volumes (between 0.0 and 1.0)

volOpacityDef = 0.25

#######################################

vtk_reader = vtk.vtkMetaImageReader()

vtk_reader.SetFileName(filenameSegmentation)

castFilter = vtk.vtkImageCast()

castFilter.SetInputConnection(vtk_reader.GetOutputPort())

castFilter.SetOutputScalarTypeToUnsignedShort()

castFilter.Update()

imdataBrainSeg = castFilter.GetOutput()

#######################################

import csv

fid = open(filenameColorfile, "r")

csv_reader = csv.reader(fid)

dictRGB = {}

for line in csv_reader:

dictRGB[int(line[0])] = [float(line[2])/255.0,

float(line[3])/255.0,

float(line[4])/255.0]

fid.close()

#######################################

funcColor = vtk.vtkColorTransferFunction()

for idx in dictRGB.keys():

funcColor.AddRGBPoint(idx,

dictRGB[idx][0],

dictRGB[idx][1],

dictRGB[idx][2])

#######################################

funcOpacityScalar = vtk.vtkPiecewiseFunction()

for idx in dictRGB.keys():

##funcOpacityScalar.AddPoint(idx, volOpacityDef if idx0 else 0.0)

funcOpacityScalar.AddPoint(idx, volOpacityDef if idx!=0 else 0.0)

#######################################

funcOpacityGradient = vtk.vtkPiecewiseFunction()

funcOpacityGradient.AddPoint(1, 0.0)

funcOpacityGradient.AddPoint(5, 0.1)

funcOpacityGradient.AddPoint(100, 1.0)

#######################################

propVolume = vtk.vtkVolumeProperty()

propVolume.ShadeOff()

propVolume.SetColor(funcColor)

propVolume.SetScalarOpacity(funcOpacityScalar)

propVolume.SetGradientOpacity(funcOpacityGradient)

propVolume.SetInterpolationTypeToLinear()

#######################################

##funcRayCast = vtk.vtkVolumeRayCastCompositeFunction()

##funcRayCast.SetCompositeMethodToClassifyFirst()

mapperVolume = vtk.vtkFixedPointVolumeRayCastMapper()

mapperVolume.SetInputConnection(vtk_reader.GetOutputPort())

##mapperVolume.SetVolumeRayCastFunction(funcRayCast)

actorVolume = vtk.vtkVolume()

actorVolume.SetMapper(mapperVolume)

actorVolume.SetProperty(propVolume)

##renderer = vtk.vtkRenderer()

##renderer.AddActor(actorVolume)

##vtk_show(renderer, 600, 600)

#######################################

ren = vtk.vtkRenderer()

ren.AddViewProp(actorVolume)

renWin = vtk.vtkRenderWindow()

renWin.AddRenderer(ren)

iren = vtk.vtkRenderWindowInteractor()

iren.SetRenderWindow(renWin)

renWin.SetSize(600, 600)

iren.Start()

#######################################

#######################################

#######################################

#######################################

#######################################

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117G028D400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券