VTK笔记-数字图像相关总览

文章目录

  • 前言
  • 一、图像
  • 二、VTK中图像相关类
    • 1. 创建
      • 1.1 图像源Source
      • 1.2 直接创建图像
      • 1.3 图像文件操作
    • 2. 展示
    • 3. 基本操作
      • 3.1 图像信息的访问与修改
      • 3.2 图像像素值的访问与修改
      • 3.3 图像类型转换
      • 3.4 图像颜色映射
      • 3.5 区域提取
      • 3.6 直方图统计
      • 3.7 图像重采样
      • 3.8 图像运算
      • 3.9 图像二值化
    • 4. 边缘检测
    • 5.平滑
    • 6.频域处理
  • 三、总结

前言

之前文章中有提过VTK是进行3D计算机图形,图像处理,可视化的工具;数字图像作为一种重要的多媒体数据,应用范围极广,具有重要的应用价值;图像是VTK中非常重要的一种数据结构;本文是读《VTK图形图像开发进阶》第五章内容的一个笔记和整理;

一、图像

我们日常中看到的图像都是可视化的图像,让人们说图像是什么,往往会得到具体的照片或者图片的描述;计算机看到的图像是数字化的图像,数字图像文件中会记录图像的通道数据和特征描述信息,可以成为是图像头信息和数据;
图像头信息定义了图像的基本信息,主要包括了起点位置(Origin)像素间隔(Space)维数(Dimension)。一般情况,起点位置表示采集这张图像时,图像的左上角第一个像素所在世界坐标系中的世界坐标,像素间隔表示像素单元之间的距离,维数就比较容易理解了,大家都知道一维、二维、三维…我们接触的基本上就是二维和三维;所以维数就是网格数据在每个方向上的像素或者体素的个数,二维的最小单元就是像素,三维的最小单元就是体素;处了上面说的信息,不同的数据会记录图像的长度,宽度,通道个数,像素范围;如果是DICOM文件,还会记录图像的层厚,图像的行向量和列向量,窗宽和窗位等等;大家以后碰到了可以留意观察;
医学图像中的数据基本上是一个二维数组,数组中每个数值对应了二维矩阵中的像素值;这个像素值是一个标量,不同类型的数据还会表示不同意义;通常情况下,图像中的数据的每个记录类型可以是标量,也可以是矢量,还可以是张量;医学图像基本上是灰度图像,但由于灰度图像是一个unsigned char类型,范围是0~255,不足以表达医学图像中对图像的要求,所以常见的医学图像数据是unsigned short类型,范围是0-65535;个别数据有float类型或者double类型,不过不常见;
VTK中图像数据结构由vtkImageData类表示;

二、VTK中图像相关类

vtk中对数字图像处理主要包括了创建、读写(访问图像数据)以及处理转换和展示;
下面将根据不同功能分别列举出各个类以及每个类的简单说明;

1. 创建

1.1 图像源Source

	vtkImageCanvasSource2D:创建一个画布;
	vtkImageEllipsoidSource:创建一个椭球体的二进制图像;
	vtkImageGaussianSource:创建具有高斯像素值的图像;
	vtkImageGridSource:创建一个网格的图像;
	vtkImageMandelbrotSource:创建一个Mandelbrot图像;
	vtkImageNoiseSource:创建一个充满随机像素值的噪点的图像;
	vtkImageSinusoidSource:创建一个具有正弦像素值的图像;
	vtkImageStencilSource:创建一个图像模板;

1.2 直接创建图像

	vtkImageData:拓扑上和几何上有规则的数据数组;

1.3 图像文件操作

	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格式图像;

2. 展示

	vtkImageViewer2:显示二维图像;
	vtkImageActor:在已渲染的3D场景中绘制一个图像;
	vtkImageBlend:使用透明度或不透明度将图像混合在一起;

3. 基本操作

3.1 图像信息的访问与修改

	使用vtkImageData中的Get加上相应的信息名的形式进行命名;
			GetDimensions:获取图像的维数;
			GetOrigin	:获取图像的原点;
			GetSpacing:获取图像的像素间隔;
	使用类vtkChangeImageInfomation用于修改图像的基本信息; 
		可以修改图像的原点、像素间隔以及范围,另外可以实现图像平移缩放等操作;

3.2 图像像素值的访问与修改

	使用vtkImageData的函数GetScalarPointer函数;
			virtual void *GetScalarPointer(int coordinates[3]);根据坐标返回对应像素指针
			virtual void *GetScalarPointer(int x,int y,int z);根据坐标返回对应像素指针
			virtual void *GetScalarPointer();返回图像像素数据首指针;
	使用vtkImageIterator类实现迭代器方法访问图像像素;

3.3 图像类型转换

	vtkImageCast:图像数据类型转换;可以截断数据;
	vtkImageShiftScale:可以指定偏移和比例参数来对输入图像数据进行转换;

3.4 图像颜色映射

	vtkImageLuminance:将RGB图像转换为单组分的灰度图像;
	vtkImageExtractComponents:提取彩色图像的各个颜色组分;
	vtkImageMapToColors:图像彩色映射;
	vtkImageAppendComponents:合成彩色图像;

3.5 区域提取

	vtkExtractVOI:可以根据用户指定的区域范围提取子图像;
	vtkImageReslice:实现图像切面的提取;

3.6 直方图统计

	vtkImageAccumulate:实现直方图统计功能;

3.7 图像重采样

	vtkImageShrink3D:用于实现图像降采样;
	vtkImageMagnify:用于实现图像升采样;

3.8 图像运算

	vtkImageMathematics:提供基本一元和二元数学操作;
	vtkImageLogic:对一个图像或者两个图像的布尔逻辑运算;

3.9 图像二值化

	vtkImageThreshold:实现图像二值化;			

4. 边缘检测

	vtkImageGradient:计算图像梯度;
	vtkSobel2D:计算图像的Sobel算子;
	vtkImageLaplacian:拉普拉斯算子;
	vtk没有现成使用的Canny算子类;需要自己实现;

5.平滑

	vtkImageConvolve:卷积运算,可以实现均值滤波;
	vtkImageGaussianSmooth:高斯平滑,默认执行三维高斯滤波;
	vtkImageHybridMedian2D:二维图像的中值滤波;
	vtkImageAnisotropicDiffusion2D:对二维图像各向异性扩散滤波;
	vtkImageAnisotropicDiffusion3D:对三维图像各向异性扩散滤波;

6.频域处理

	vtkImageFFT:图像的傅里叶变换;
	vtkImageRFFT:图像的逆傅里叶变换;
	vtkImageIdealLowPass:理想低通滤波器;
	vtkImageButterworthLowPass:巴特沃斯低通滤波器;
	vtkImageIdealHighPass:理想高通滤波器;
	vtkImageButterworthHighPass:巴特沃斯高通滤波器;

三、总结

本文只是对照记录了《VTK图形图像开发进阶》一书中第五章关于VTK图像处理方面的知识点;有机会对照书本将详细的内容摘录下来;
本文中关于VTK对Image的处理涉及到的类肯定不够全面,后面碰到遗漏的地方会一一补录进来;

你可能感兴趣的:(VTK笔记-图像相关)