VTK ImageData 与ITK、SimpleITK

目录

VTK、ITK、SimpleITK

 ITK

VTK图像数据结构

图像头信息

图像数据

vtkImageData


VTK、ITK、SimpleITK

医学图像处理的话建议用ITK+VTK,ITK做底层图像处理算法,VTK做可视化显示,ITK和VTK中间用itkImageToVTKImageFilter

vtk_image = itk.vtk_image_from_image(image)

image = itk.image_from_vtk_image(vtk_image)

VTK在三维函数库OpenGL的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来

 ITK

In the Python dictionary interface to image metadata, keys for the spatial metadata, the ‘origin’‘spacing’, and ‘direction’, are reversed in order from image.GetOrigin(), image.GetSpacing(), image.GetDirection() to be consistent with the NumPy array index order resulting from pixel buffer array views on the image.

VTK图像数据结构

数字图像文件内容由两个部分组成:

图像头信息和数据。

图像头信息

图像头信息定义了图像的基本信息,

主要包括起点位置(Origin),像素间隔(space)和维数(dimension)。

通过这三个参数即可以决定图像空间位置和规模。

图像可以看做是空间中的一个规则网格,网格中的每个最小单元称之为一个像素(二维)或者体素(三维)

这样网格在每个方向上的像素或者体素个数即为图像在该方向的维数

像素索引表示每个像素在图像网格中的位置,是图像内部的网格坐标

而在医学图像中,每个图像除了内部坐标外,还存在一个世界坐标

  • 起点位置(Origin),即[0,0,0](第一个像素索引)在 3D 空间中的位置
  • 像素间隔(space),(每个方向 x、y、z 的体素的大小)
  • 图像维数(dimension),每个方向有多少个体素单位(如图小球)

这样通过起点位置,像素间隔和像素索引即可计算每个像素的世界坐标位置

世界坐标计算

RAS转换为像素坐标

以二维图像为例,第三维为1,点为0,像素间隔为1

GetOutput()->GetOrigin(origin)(CenterImage()会重写SetOutputOrigin()

根据图像的维数和像素间隔计算得到新的图像的宽度和高度为(512-1)*5 ,初始图像的原点位于(0, 0,0),现在将图像的中心平移至原点,平移量为(-(512-1)*5/2,(512-1)*5/2, 0) = (-1277.5, -1275.5,0)。

原点和间距,可以计算出每个(图像坐标)体素解剖坐标中的相应位置

extent(范围)和dimension(维度)区别

extent=[0,511,0,511,0,49]
dimensions=[512,512,50]

该图表示一个4x2x3的图像,即图像的维数,每一个小球表示一个像素;而

图像的原点为(5.1,10.0,6.5),

两两像素之间的间隔表示像素间隔,每个方向的像素间隔为1.5,1.5,和1.8。

图像数据

图像数据即为图像像素的像素值,一般采用一维数组来表示和存储。已知像素索引和图像维数下,即可计算每个像素对应的像素值。通常图像的像素值为一个标量,例如一般灰度图像。

医学图像处理中大部分的图像都是灰度图像。

这里需要注意灰度图像的灰度值的数据类型,在一般的灰度图像处理中不需要考虑,因为其范围默认为0-255,可以采用一个unsigned char类型类表示。

但是在医学图像处理中,256灰度级远远不能满足要求,因此灰度范围往往大于256级。

常见的医学图像的像素数据类型为unsigned short,灰度范围为0-65536。

另外,有时为了精度的考虑,也会使用int、float甚至double类型,因此需要格外注意。

vtkImageData

vtkImageData可以用于不同格式图像的读取Reader和保存Writer

vtk三维模型的数据主要包括:点point、线edge、面surface,点线面的属性scalar,颜色表lookuptable,

 xyz012,zxy201

POINTS 989 float//一共989个点,点的坐标用float类型存储。
-0.300020 -0.500000 0.000000//第0个点的三维x,y,z坐标

参考链接:

05-VTK在图像处理中的应用(1)-卡核

Quick start guide — ITKPythonPackage documentation

VTK:几何结构,拓扑结构,cell,cellarray,polydata之间的关系笔记 - QAQ_BIU - 博客园 (cnblogs.com)vtk文件格式解析_琼之南空之新的博客-CSDN博客_vtk文件

猜你喜欢

转载自blog.csdn.net/qq_28838891/article/details/127518394