阅读《数字图像处理(MATLAB版)》笔记

二 03 四月 2018

阅读《数字图像处理(MATLAB版)》,这里作个笔记,记录学过的东西,方便时时复习。

序言

这一章介绍了MATLAB的一些基础语法知识,像基础的运算、函数控制语句。其中我个人觉得匿名函数很有意思,以前只是看到有@符号,但没具体用过,这里作下记录。

@表示函数句柄,可以作为函数别名匿名函数,下面是简单的例子。

% 函数别名,f函数可以当成sin函数使用
f=@sin;
% 匿名函数,g(x)函数用来求x每个元素的平方
g=@(x) x.^2;

灰度变换与空间滤波

这一章主要是介绍灰度变换和空间滤波,其中,灰度变换有图像变换(imadjust,图像反转、简单灰度扩展)、图像拉伸(stretchlim,对数及对比度拉伸变换),直方图匹配(直方图相关算法、直方图均衡histeq),空间滤波有线性和非线性的区别。线性滤波具体的过程是由时域的卷积得来,主要使用imfilter函数,需要一个模板。模板可以使用fspecial函数产生,也可以自己写模板。非线性滤波器,书里面讲了统计排序滤波器ordfilt2,它们的响应基于对图像邻域中所包含像素的排序,然后使用排序结果确定的值替换邻域中的中心像素值。

频率域滤波

在频率域中滤波操作是将图片通过傅里叶变换转化为频率域之后,用相同大小的数组直接相乘。其中,进行傅里叶变换的图片需要转化成float格式(im2single函数),为什么不用double?因为傅里叶变换很耗内存。相乘后,使用傅里叶逆变换处理后,需要将得到的图片转化为原来的格式。频率是亮度,相位是位置。

其中,频率域是周期变化的,对周期函数进行卷积操作会使相邻周期的干扰,产生折叠误差,所以会填充零来避免,当然,还存在别的填充方式,比如循环等。

DFT的几个步骤:转化成float,获取填充参数,使用傅里叶变换,用滤波器乘以变换结果,逆变换,修剪成原来的大小,转换成原来的数据格式。

空间滤波器和频率滤波器的变换

几种低通滤波器的传递函数:

$$ \begin{aligned} \begin{array}{ccc} \text{标准低通滤波器ILPF}: & & \\ & H(u,v) = \left\{ \begin{array}{cc} 1, & D(u,v) \leq D_0 \\ 0, & D(u,v) > D_0 \end{array} \right. & \\ \text{巴特沃斯低通滤波器BLPF}: & & \\ & H(u,v) = \frac{1}{1+D(u,v) / D_0^{2 n}} & \\ \text{高斯低通滤波器GLPF} : & & \\ & H (u,v) = e^{- D^2 (u,v) / 2 \sigma^2} & \end{array} \end{aligned} $$

高通滤波器刚好相反,$ H_{HP}(u,v) = 1-H_{LP}(u,v) $,其中巴特沃斯高通滤波器为:

$$ H (u,v) = \frac{1}{[1 + D_{0} / D (u,v)]^{2 n}} $$

在实际应用中常混合使用这几种方法。

图像复原与重建

图像复原

都是以预先确定的目标来改善图像,图像增强主要是主观处理,让人看起来更舒服,图像重建大部分是客观处理,利用退化现象的某种先验知识来复原一张退化的图像。

退化: \(g(x,y) = Hf(x,y) + \eta (x,y)\)\(f(x,y)\)表示原图,\(g(x,y)\)表示退化图像。

图像退化模型是:

$$ f (x,y) \rightarrow H \rightarrow + \eta (x,y) \rightarrow g(x,y) \rightarrow \hat{f} (x,y) $$

退化函数H是频率域下的变化,如果H是一个线性的、空间不变的过程,那么空间域的退化图像可表示为: \(g(x,y) = h(x,y) \star f(x,y) + \eta(x,y)\)

\(f(x,y)\)在频率域为\(F (x,y)\),有时被称为光传递函数(OTF), \(h(x,y)\)称为点扩散函数(PSF)。OTF和PSF是一个傅里叶变换对,matlab里有otf2psfpsf2otf用于OTF和PSF间互相转换。

使用imnoise函数添加噪声,但生成的噪声有限,如果想生成规定分布的噪声的话,需要自己动手。

如果退化的只有噪声的话,可以采用空间滤波来复原原图,书上写了自适应中值滤波,代码值得一看。

使用频率域滤波降低周期噪声。周期噪声再频率域上表现为类似冲击的脉冲,滤除这些分量的主要方法是使用陷波带阻滤波器。具有Q个陷波对的陷波带阻滤波器的通式为:

$$ H{NR} (u,v) = \prod_{k = 1}^Q H_k (u,v) H_{- k} (u,v) $$

式中,\(H_k (u,v)\)\(H_{- k} (u,v)\)都是高通滤波器,中心点分别是\((u_k, v_k)\)\((- u_k, - v_k)\)

直接逆滤波,即忽略噪声项,形成如下估计:

$$ \hat{F} (u,v) = \frac{G (u,v)}{H (u,v)} $$

\(\hat{F} (u, v)\)的傅立叶反变换就能得到图像的相应估计。

维纳滤波,最早也是最为知名的线性图像复原方法,寻找统计误差函数\(e^2 = E \{ (f-\hat{f})^2 \}\)

即,均方误差的一个最小估计。在频率域上的解是:

$$ \hat{F} (u,v) = \frac{1}{H (u,v)} \frac{|H (u,v) |^2}{|H (u,v) |^2 - S_{\eta} (u,v) / S_f (u,v)} G (u,v) $$

其中,\(H (u, v)\)表示退化函数,\(S_{\eta} (u, v) = |N (u, v)|^2\)表示噪声功率谱,\(S_f (u, v) = |F (u, v)|^2\)表示未退化图像功率谱。

用常量数组来代替\(S_{\eta} (u, v) / S_f (u,v)\)就得到了所谓的参数维纳滤波器。即使是用一个常量数组的简单行为也可以对直接逆滤波产生重大的改进。实现维纳滤波的函数是deconvwnr函数。

图像重建

图像重建是用一系列一维投影来重建图像,在医学图像重建中的计算机断层(CT)的主要应用方法。

主要的技术是反投影,沿射线射入的方向把吸收剖面投影回去。由一个吸收剖面波形生成一幅二维图像,然后使用不同的角度,将生成的二维图像进行叠加,最后形成重建图片。

后面是数学上描述反投影和减少模糊的方法。

数学上描述投影的机制称为雷登变换。公式为:

$$ g (\rho, \theta) = \int_{- \infty}^{\infty} \int_{- \infty}^{\infty} f (x, y) \delta (\text{xcos} \theta + \text{ycos} \theta - \rho) \text{dxdy} $$

离散形式:

$$ g (\rho,\theta) = \sum_{x = 0}^{M - 1} \sum_{y = 0}^{N - 1} f (x, y) \delta (\text{xcos} \theta + \text{ysin} \theta - \rho) $$

\(\theta\)角度的反投影图像为:

$$ f_{\theta} (x,y) = g (\rho, \theta) = g (\text{xcos} \theta + \text{ycos} \theta,\theta) $$

对上半周进行积分,即\(\theta (0, \pi)\),有:

$$ f (x,y) = \int_0^{\pi} f_{\theta} (x,y) d{\theta} = \sum_{\theta = 0}^{\pi} f_{\theta} (x,y) $$

傅立叶切片定理:

$$ G (\omega,\theta) = \int_{- \infty}^{\infty} g (\rho,\theta) e^{- j 2 {\pi}{\omega}{\rho}} d{\rho} $$

一个投影的二维傅立叶变换是得到该投影区域的二维傅立叶变换的一个切片。

平行束投影通过如下步骤得到:

  1. 计算每个投影的一维傅里叶变换;

  2. 用滤波函数\(| \omega |\)乘以每个傅里叶变换;

  3. 得到第二步的每个傅里叶反变换;

  4. 对第三步的所有结果进行积分(求和),得到\(f (x, y)\)

因为使用了一个滤波器,所以上面的办法可以称为由滤波投影重建图像。

彩色图像

彩色图像涉及到彩色图像的图像空间变换,滤波操作,阈值处理,即边缘检测,图像分割。

空间滤波都可以转换成单层的灰度图像进行。而边缘检测不能够分层进行,在(x,y)点的角度为:

$$ \theta (x,y) = \frac{1}{2} \arctan \left[ \frac{2g{xy}}{g_{xx} - g_{xy}} \right] $$

其中,\(g_{xy} = u {\cdot}u = u^T u = \left| \frac{\partial R}{\partial x} \right|^2 + \left| \frac{\partial G}{\partial x} \right|^2 + \left| \frac{\partial B}{\partial x} \right|^2\)

blogroll