之前文章中有提过VTK是进行3D计算机图形,图像处理,可视化的工具;数字图像作为一种重要的多媒体数据,应用范围极广,具有重要的应用价值;图像是VTK中非常重要的一种数据结构;本文是读《VTK图形图像开发进阶》第五章内容的一个笔记和整理;
我们日常中看到的图像都是可视化的图像,让人们说图像是什么,往往会得到具体的照片或者图片的描述;计算机看到的图像是数字化的图像,数字图像文件中会记录图像的通道数据和特征描述信息,可以成为是图像头信息和数据;
图像头信息定义了图像的基本信息,主要包括了起点位置(Origin)、像素间隔(Space)和维数(Dimension)。一般情况,起点位置表示采集这张图像时,图像的左上角第一个像素所在世界坐标系中的世界坐标,像素间隔表示像素单元之间的距离,维数就比较容易理解了,大家都知道一维、二维、三维…我们接触的基本上就是二维和三维;所以维数就是网格数据在每个方向上的像素或者体素的个数,二维的最小单元就是像素,三维的最小单元就是体素;处了上面说的信息,不同的数据会记录图像的长度,宽度,通道个数,像素范围;如果是DICOM文件,还会记录图像的层厚,图像的行向量和列向量,窗宽和窗位等等;大家以后碰到了可以留意观察;
医学图像中的数据基本上是一个二维数组,数组中每个数值对应了二维矩阵中的像素值;这个像素值是一个标量,不同类型的数据还会表示不同意义;通常情况下,图像中的数据的每个记录类型可以是标量,也可以是矢量,还可以是张量;医学图像基本上是灰度图像,但由于灰度图像是一个unsigned char类型,范围是0~255,不足以表达医学图像中对图像的要求,所以常见的医学图像数据是unsigned short类型,范围是0-65535;个别数据有float类型或者double类型,不过不常见;
VTK中图像数据结构由vtkImageData类表示;
vtk中对数字图像处理主要包括了创建、读写(访问图像数据)以及处理转换和展示;
下面将根据不同功能分别列举出各个类以及每个类的简单说明;
vtkImageCanvasSource2D:创建一个画布;
vtkImageEllipsoidSource:创建一个椭球体的二进制图像;
vtkImageGaussianSource:创建具有高斯像素值的图像;
vtkImageGridSource:创建一个网格的图像;
vtkImageMandelbrotSource:创建一个Mandelbrot图像;
vtkImageNoiseSource:创建一个充满随机像素值的噪点的图像;
vtkImageSinusoidSource:创建一个具有正弦像素值的图像;
vtkImageStencilSource:创建一个图像模板;
vtkImageData:拓扑上和几何上有规则的数据数组;
vtkImageReader2:VTK图像读取类的父类;
vtkBMPReader:读BMP图像;
vtkBMPWriter:写BMP图像;
vtkJPEGReader:读JPEG图像;
vtkJPEGWriter:写JPEG图像;
vtkPNGReader:读PNG图像;
vtkPNGWriter:写PNG图像;
vtkTIFFReader:读TIFF图像;
vtkTIFFWriter:写TIFF图像;
vtkMetaImageReader:读MHA|MHD图像;
vtkMetaImageWriter:写MHA|MHD图像;
vtkDicomImageReader:读DICOM图像;
vtkXMLImageDataReader:读基于XML文件格式图像;
vtkXMLImageDataWriter:写基于XML文件格式图像;
vtkImageReader:读RAW格式图像;
vtkImageWriter:写RAW格式图像;
vtkImageViewer2:显示二维图像;
vtkImageActor:在已渲染的3D场景中绘制一个图像;
vtkImageBlend:使用透明度或不透明度将图像混合在一起;
使用vtkImageData中的Get加上相应的信息名的形式进行命名;
GetDimensions:获取图像的维数;
GetOrigin :获取图像的原点;
GetSpacing:获取图像的像素间隔;
使用类vtkChangeImageInfomation用于修改图像的基本信息;
可以修改图像的原点、像素间隔以及范围,另外可以实现图像平移缩放等操作;
使用vtkImageData的函数GetScalarPointer函数;
virtual void *GetScalarPointer(int coordinates[3]);根据坐标返回对应像素指针
virtual void *GetScalarPointer(int x,int y,int z);根据坐标返回对应像素指针
virtual void *GetScalarPointer();返回图像像素数据首指针;
使用vtkImageIterator类实现迭代器方法访问图像像素;
vtkImageCast:图像数据类型转换;可以截断数据;
vtkImageShiftScale:可以指定偏移和比例参数来对输入图像数据进行转换;
vtkImageLuminance:将RGB图像转换为单组分的灰度图像;
vtkImageExtractComponents:提取彩色图像的各个颜色组分;
vtkImageMapToColors:图像彩色映射;
vtkImageAppendComponents:合成彩色图像;
vtkExtractVOI:可以根据用户指定的区域范围提取子图像;
vtkImageReslice:实现图像切面的提取;
vtkImageAccumulate:实现直方图统计功能;
vtkImageShrink3D:用于实现图像降采样;
vtkImageMagnify:用于实现图像升采样;
vtkImageMathematics:提供基本一元和二元数学操作;
vtkImageLogic:对一个图像或者两个图像的布尔逻辑运算;
vtkImageThreshold:实现图像二值化;
vtkImageGradient:计算图像梯度;
vtkSobel2D:计算图像的Sobel算子;
vtkImageLaplacian:拉普拉斯算子;
vtk没有现成使用的Canny算子类;需要自己实现;
vtkImageConvolve:卷积运算,可以实现均值滤波;
vtkImageGaussianSmooth:高斯平滑,默认执行三维高斯滤波;
vtkImageHybridMedian2D:二维图像的中值滤波;
vtkImageAnisotropicDiffusion2D:对二维图像各向异性扩散滤波;
vtkImageAnisotropicDiffusion3D:对三维图像各向异性扩散滤波;
vtkImageFFT:图像的傅里叶变换;
vtkImageRFFT:图像的逆傅里叶变换;
vtkImageIdealLowPass:理想低通滤波器;
vtkImageButterworthLowPass:巴特沃斯低通滤波器;
vtkImageIdealHighPass:理想高通滤波器;
vtkImageButterworthHighPass:巴特沃斯高通滤波器;
本文只是对照记录了《VTK图形图像开发进阶》一书中第五章关于VTK图像处理方面的知识点;有机会对照书本将详细的内容摘录下来;
本文中关于VTK对Image的处理涉及到的类肯定不够全面,后面碰到遗漏的地方会一一补录进来;