最近在学习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
...