前言:目前的工作与医学图像的采集和处理有关。由于之前较少接触这方面的内容,所以,在工作之余,以经典教材《Digital Image Processing》第三版和《Fundamentals of Digital Image Processing》为参考,学习了一些图像处理方面的知识。这里,我将自己的理解,借助于这个平台,分享给各位。个人理解难免有误,望各位读者不吝赐教。
生活中,图像(images)大概是我们接触到的最多的信息了。我们获得的信息中有相当一大部分都来源于眼睛,眼睛是我们观察、认识和理解外部世界的重要窗口。从生理学上来讲,外部物体反射的光线通过眼睛的瞳孔、晶状体等结构被捕获到后,在视网膜上形成外部物体的镜像或图像。但是,这样的图像要被我们感知(perception)到,还需要通过神经传递到大脑皮层的视觉系统进行进一步的处理。这一系列过程里面包含了图像的采集、处理和分析。最终,我们形成了对外部物体的形状、结构、质地等信息的认知。对于图像的采集和处理,我们现实生活中遇到的最多的就是相机系统(camera)。在如今的较高级的智能相机系统中,系统可以将图像中人脸的位置和轮廓、眼睛和其它器官的位置等信息提供给用户,而这就是图像分析的结果。图像分析往往需要计算机视觉(computer vision)甚至人工智能(artificial inteligence, AI)等技术的参与。
01
—
图像的采集
现代计算机系统的发展使图像(images)的采集、处理和分析进入了新的阶段。因此,通常我们所说的图像都指的是数字化图像(digital images)。与数字信号(digital signal)一样,数字图像采集中最重要的两个过程分别是采样(sampling)和量化(quantization)。不过,由于图像通常是二维的(two dimensions),所以,数字图像的采样和量化也都是在两个维度上分别进行的。对于信号而言,采样和量化分别在时间和信号幅度上进行了离散化;对于图像,则是在空间和像素的幅值上对图像进行了离散化。为了便于理解,下面的解释仍然以一维信号为例。
现实世界中的信号和图像都是连续的(continuous)。连续信号上任何两个点之间仍然存在无数个信号点。采样(sampling)这一过程则是将这样连续的信号或图像变为离散的(discrete),即时间上不连续的。这一过程是通过等间隔、周期性的采样(sample)信号或图像完成的,如下图所示。物理实现上,可以理解为是通过一个可以定时断开和闭合的开关(switch)控制的。在采样完成后,连续的信号S(t), t=0,... 被离散信号S(n), n= 0,1,2, ... 所表示。所以,采样频率越高(即周期T越短),离散信号S(n)就越接近原始的连续信号 S(t)。采样定理则给出了采样一个信号时,需要的采样频率下限。对于图像这样的二维信号,这一点仍然是适用的。不过,在图像处理中,似乎通常并不十分关心采样周期和采样频率。
图1. 信号的采样。图片来源于维基百科(https://en.wikipedia.org/wiki/Sampling_(signal_processing))
采样生成的信号虽然在时间上是离散的,但是信号的幅度仍然是一个连续的变量。而量化则是将信号的幅度进行离散化,可以理解为在幅度域的采样过程:原有的幅度值域被平均划分为若干个区间,每个区段以其中的一个值(如中心值、最小值或最大值等)代替。当采样后的信号的幅度落入某个区间时,就以该区间的上述值来代表。所以,划分的区间越多,即量化的精度越高,则量化的误差也越小。下图分别为采用4个区间和8个区间时的量化结果。
图2. 信号幅值的量化。图片来源于维基百科(https://en.wikipedia.org/wiki/Quantization_(signal_processing))
02
—
图像在计算机内的表示
当我们得到一幅图像并将其在计算机上打开时,我们可能会很自然地想知道,这幅图像在计算机内部是什么一个样子,或者说,在计算机的眼中,图像究竟是以什么样的形式存在的?
对于上面的《Digital Image Processing》一书的封面图像,当在操作系统中查看其属性时,可以看到下面的信息:它水平方向和垂直方向分别有469和648个像素。这里的"像素" (pixel) 即图像的基本元素(picture element)是图像的基本构成单位,它来源于我们在采集数字图像时的采样过程。即:在水平和垂直方向分别对原始的连续图像进行了469和648次采样。位深度则可以理解为与量化过程有关。该图像的位深度(bit depth)是24。由于彩色图像(color images)一般需要用到 R(红) / G(绿) / B(蓝)三个分量,所以,为了表示R/G/B分量,该图像分别用了8 bits 的空间,也就是说,该图像最多可以表示2^24=(2^8)*(2^8)*(2^8)种彩色。
通过以上的观察,我们可以推断操作系统读入图像时,实际读进来的是一个矩阵。对于这幅图像,该矩阵的大小则是469*648。可以通过下列简单的MATLAB代码读入和显示上述图像。
I = imread('digital_image_processing.jpg'); % read imageR = I(:,:,1); % Red componentG = I(:,:,2); % green componentB = I(:,:,3); % blue componentfigure;imshow(I) % display image
当将数字图像的某个部分进行放大时,数字图像的矩阵特征(下图中的每一个方格即为一个像素)会很容易表现出来。同时,我们会发现出现马赛克状的格子。这正是由于对原始图像的有限采样所造成的。
03
—
图像的分类
根据不同的分类标准,图像可以分为不同的种类。比如,按照图像中像素的色彩分布,可以分为彩色图像(color images)和灰度图像(grayscale images)。彩色图像是我们生活中最常见的图像,它以红(Red,R)、绿(Green,R)、蓝(Blue,B)为三原色,从而构成各种各样的色彩,比如,红色(R/G/B: 255/0/0)。我们之所以能够感受到多姿多彩的世界,也归功于眼睛内部存在的大量对不同颜色敏感的细胞。因此,彩色图像也是最接近自然的图像。灰度图像的色彩则是介于纯黑色与纯白色之间。对于很多医学应用,灰度表示已经足够展示所需的信息。因此,常见的医学影像设备所生成的图像多数为灰度图像,如X光、CT图像、MRI图像和超声图像等,而这些医学图像后处理过程中所生成的图像则往往会在此基础上采用彩色图像来表示某些信息,比如,超声的血流成像用不同的色彩表示血管内血流的方向和强度。
(a)
(b)
图3. 典型的超声图像。灰度信息表示组织的超声回波强度,彩色信息表示血流速度和方向。图片来源:https://www.gehealthcare.com/products/ultrasound/vivid/vivid-e95
通过对灰度图像做简单的处理,可以将其转换为二值图像(binary images)。二值图像只包括黑、白两种颜色,分别对应图像中不同的特征。下面的MATLAB代码可以将图3(a)中的图像转换为二值图像,其中的黑、白两种颜色,分别表示低于和高于图像中像素平均灰度值的组织。
I = imread('ultrasound images.png');Igray = rgb2gray(I);figure; subplot(1,2,1); imshow(Igray)Ibin = double(Igray) > mean(double(Igray),'all');subplot(1,2,2); imshow(Ibin)
图4. 二值图像
此外,根据图像的维度,还可以将图像分为二维图像(two dimensional images,2D images)、三维图像(three dimensional images,3D images)等。我们生活中最常见的图像都是二维图像(如上面的超声图像),它其实是物体在二维平面上的投影,所以,也可以称为平面图像。三维图像则可以提供更多的信息,比如物体的厚度、深度等信息,带给人更多的真实感。医学图像通常直接采集到的也是二维图像,在二维图像基础上采集更多的信息,并经过重建算法,就可以得到三维图像。例如,下图中的3D图像,可以通过连续采集超声探头在不同位置获得到的2D图像后,结合不同2D图像之间的相对位置关系,进行重建得到。
图5. 典型的三维超声图像。图片来源:https://www.gehealthcare.com/products/ultrasound/voluson/voluson-e10
在接下来的一段时间里,我会持续更新图像处理方面的文章,欢迎大家继续关注。