最近在学习python的vtk库,发现相关资料还是比较少的,在这里总结一下本人最近学习的一些经验

使用了The Cancer Imaging Archived的医学图像数据集的标签文件

代码参考了下面的链接

https://kitware.github.io/vtk-examples/site/Python/CompositeData/MultiBlockDataSet/

https://kitware.github.io/vtk-examples/site/Python/Medical/GenerateModelsFromLabels/

首先读取nii文件

def read_nii(filename):
    读取nii文件,输入文件路径
    reader = vtk.vtkNIFTIImageReader()
    reader.SetFileName(filename)
    reader.Update()
    return reader

然后生成三维模型,注意这里要用 vtkDiscreteMarchingCubes,不能用vtkMarchingCubes,后者生成的模型不连续,是一层一层的

def get_mc_contour(file, setvalue): 计算轮廓的方法 file:读取的vtk类 setvalue:要得到的轮廓的值 contour = vtk.vtkDiscreteMarchingCubes() contour.SetInputConnection(file.GetOutputPort()) contour.ComputeNormalsOn() contour.SetValue(0, setvalue) return contour

然后对模型进行平滑

首先,通过 vtk NIFTIImageReader读取NIFTI图像数据,然后创建三个渲染窗口(冠状面、矢状面和轴视图),分别用于显示冠状面、矢状面和轴视图的图像。// 创建渲染窗口交互器并设置交互器样式。// 渲染初始图像并启动交互器。// 创建冠状面图像查看器。// 创建矢状面图像查看器。// 创建轴视图图像查看器。// 创建冠状面渲染窗口。// 创建矢状面渲染窗口。// 创建轴视图渲染窗口。 从上图中可以明显看出,我们有 3 个 vtk CompositeDataSet 的具体子类。 vtk MultiBlockDataSet 是一个由块组成的数据集。每个块可以是非复合 vtk DataObject 子类(或叶),也可以是 vtk MultiBlockDataSet 本身的实例。这使得构建完整的树成为可能。 vtk HierarchicalBoxDataSet用于AMR数据集,其中包括每个精简级别的精简级别和统一网格数据集。 vtk MultiPieceDataS import scipy img = np.random.rand(64, 64, 54)#three dimensional image k1 = np. arr ay([0.114,0.141,0.161,0.168,0.161,0.141,0.114])#the kernel along the 1st dimension k2 = k1#the kernel along the 2nd dimension k3 = k1#the kernel along the 3 #define vtk RenderingCore_AUTOINIT 2( vtk RenderingOpenGL2, vtk InteractionStyle) #include < vtk OBJReader.h> #include < vtk PolyDataMapper.h> #include < vtk Actor.h> 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。 六、过滤图像 在本章中,我们将介绍: 使用 低通过滤器过滤图像 使用 中值过滤器过滤图像 应用方向过滤器检测边缘 计算图像的拉普拉斯算子 // bits是input数组的类型长度:char,short,int,long,float,double等等,是sizeof(T) void Buffer2Mat_123(const unsigned char *input, int width, int height, int bits, cv::Mat & img ) if (input == NULL) return; int bytes = width * height * bits / 8; img ...