Preface

上一篇中已经说过,图像可以表示为一个二元函数f(x,y)f(x, y),若其坐标和函数的幅值均为有限而离散的,那么这幅图像就是数字图像。类比于数字信号的离散性,应该很好理解。

以可见光为例,一幅图像如何经过传感器(CCD/CMOS)转换为数字图像?

模拟图像

模拟图像信号的构成

一般而言,图像传感器用于成像的光源不外乎来自光源的光以及来自物体的反射光(或透射光)。因此一幅模拟图像可以表示为照度(illumination)和反射率(reflectance)的乘积,如下:

f(x,y)=i(x,y)r(x,y)(1)f(x, y) = i(x, y) \cdot r(x, y) \tag{1}

结合生活常识,显然可知,照度是一个非负的有限值,而反射率是一个介于[0,1][0, 1]之间的数字,因此:

{0i(x,y)<0r(x,y)1(2)\begin{cases} 0 \le i(x, y) \lt \infin \\ 0 \le r(x, y) \le 1 \end{cases} \tag{2}

当反射率为0的时候,代表光线被完全吸收,而反射率为1时,代表光线被完全反射;照度的大小则取决于光源的强度。对某些依赖透射成像的光源,例如X射线,上式依然适用,只需将反射率替换为透射率(transmissivity)即可。

对于单色图像而言,函数ff的幅值代表的信号强度称为灰度(grey level)。一般使用\ell表示灰度。由前面的讨论可知,灰度值是一个有限的区间,一般表示为:

0LminLmax(3)0 \le L_{\mathrm{min}} \le \ell \le L_{\mathrm{max}} \tag{3}

一般将[Lmin,Lmax][L_{\mathrm{min}}, L_{\mathrm{max}}]称作灰度区间。在实践中,常将该区间平移至区间[0,1][0, 1]或者[0,C][0, C]上:当=0\ell = 0时,我们认为该位置是黑色的;当=1\ell = 1(或者CC)时,此位置是白色的。

转换为数字图像信号

模拟信号转变为数字信号,首先必须经过奈奎斯特采样。此时信号已经是离散的数字信号了。但是对信号处理而言,此时的信号未免太过于杂乱。为此,引入信号的量化。

量化:将连续的信号幅值近似为有限多个离散值的方法。

通常的做法是将信号的幅值区间划分为连续而不互相重叠的子区间,并对每个子区间人为规定一个唯一的值,将落入这个子区间的信号都使用这个值表示。根据子区间划分的方式不同,量化方法分为均匀量化及非均匀量化。其实在移动通信中,语音信号就是使用非均匀量化进行编码的,以期获得一致的量化信噪比。

图像信号的量化一般是均匀量化,即量化的子区间的长度是相同的。

Sampling & Quantization

上图就是一个典型的灰度图像进行采样量化的例子。如图,线段AB的灰度值是一条连续的曲线,对该曲线进行采样后得到左下角c图;同时将灰度坐标轴均匀的划分为8个子区间,并把落入同一子区间的采样点使用相同的数值表示,就得到了右下角的d图。

原始图像 V.S 数字图像

量化方法的存在总是会导致某些采样点的信号和原始数字信号不一致,这种误差被称为量化误差。因此在实践中,图像的量化总是会使用更多的子区间,以尽量消除量化误差。

数字图像

假设一幅灰度图像具有MMNN列。

表示

我们一共可以用三种方式表示这幅数字图像。

由于数字图像f(x,y)f(x, y)是一个二元函数,因此令z=f(x,y)z = f(x, y),可以在三维坐标系中绘制出图像信号强度关于平面坐标的关系;或者将f(x,y)f(x, y)映射成对应的灰度(或者颜色)进行显示,这就是我们肉眼看到的图像;除此之外,还可以使用一个M×NM \times N的矩阵表示图像:

f(x,y)=[f(0,0)f(0,1)f(0,N1)f(1,0)f(1,1)f(1,N1)f(M1,0)f(M1,1)f(M1,N1)](4)f(x, y) = \begin{bmatrix} f(0, 0) & f(0, 1) & \dots & f(0, N - 1) \\ f(1, 0) & f(1, 1) & \dots & f(1, N - 1) \\ \vdots & \vdots & & \vdots \\ f(M - 1, 0) & f(M - 1, 1) & \dots & f(M - 1, N - 1) \end{bmatrix} \tag{4}

对数字图像的处理,主要是基于这个矩阵表示的。从这个矩阵中可以总结到一些规律:

  • 矩阵中的每个元素对应一个像素点,
  • 矩阵的左上角元素是f(0,0)f(0, 0),这意味着在进行图像处理时,我们总是以左上角为原点,
  • 图像的xx轴是垂直向下的,而yy轴是水平向右的,
  • 图像的中心像素坐标为(M2,N2)(\lfloor \frac M 2 \rfloor, \lfloor \frac N 2 \rfloor)[1]

对数字图像而言,通常使用LL表示信号强度,在一般的计算机处理中,数字图像的信号强度一般会满足:

L=2k,kN+(5)L = 2 ^ k, \forall k \in N^+ \tag{5}

图像系统的动态范围被定义为传感器所能测量的最大信号强度和最小信号强度之间的范围。动态范围的上界一般由饱和信号的强度确定,而下界则由噪声信号确定。

动态范围不仅决定了的图像系统可以处理的信号的范围,也确定了经其处理的图像的信号范围。与之相关的概念是对比度(image contrast ratio),它是动态范围上界与下界的比值。当一幅图像中有相当数量的像素具有高动态范围时,它的对比度就会很高;反之,低动态范围的图像通常看起来灰蒙蒙的。

存储一幅数字图像所需的比特数可以表示为:

b=M×N×k(6)b = M \times N \times k \tag{6}

如果数字图像具有2k2^k个可能的信号强度等级时,我们一般称它为“kk-bit图像”。

像素的遍历

在计算机内存中,内存地址是线性增长的,相应地,数字图像的存储也是一维的。此时按坐标遍历像素已经不够方便,需要使用“指针”[2]进行线性遍历。

设“指针”在内存中移动的距离为α\alpha,那么对于确定大小的图像而言,可以得到“指针”移动距离和平面坐标的基本关系,如下图(以列扫描为例,箭头为“指针”移动的方向):

{x=αmodMy=(αx)/M(7)\begin{cases} x = \alpha \bmod M \\ y = (\alpha - x) / M \end{cases} \tag{7}

列扫描

空间分辨率和幅度分辨率

(待完成)

图像插值

插值主要应用于图像的放大、缩小、旋转以及几何校正等图像处理任务中。

(待完成)

像素之间的基本关系

像素的邻域

设像素pp的坐标为(x,y)(x, y),它拥有两个水平方向的邻近像素,表示为(x,y±1)(x, y \pm 1),以及两个垂直方向的邻近像素,表示为(x±1,y)(x \pm 1, y);这四个像素的集合记作N4(p)N_4(p)。相应的,对角线上的邻近像素可以表示为(x±1,y±1)(x \pm 1, y \pm 1),记作ND(p)N_D(p)

N8(p)=N4(p)ND(p)N_8(p) = N_4(p) \cup N_D(p),这个集合称为像素pp的邻域;如果邻域中同时包含了像素pp自身,那么我们说这个邻域是闭合的,否则它是开放的。

邻接性、连接性、区域和边界

距离

图像处理的基本数学方法

点运算 V.S. 矩阵运算

线性运算 V.S. 非线性运算

算术运算

集合与逻辑运算


  1. 这是0-base下的中心坐标,对于Matlab这种矩阵索引定义为1-base的工具而言,若M,NM, N是奇数,则中心坐标在此基础上应加一。 ↩︎

  2. 这里的“指针”并非C/C++语言中的指针,它只是遍历位置的标记,方便描述我们在内存中移动的距离。 ↩︎