图像处理-Ch2-空间域的图像增强
Ch2 空间域的图像增强
[TOC]
The principal objective of enhancement is to proce\(s\) an image so that the result is more suitable than the original image for a specific application.
图像增强的目的:使图像更适于特定应用。
图像增强分为两大类:
- 空间域方法:对图像中像素直接操作。
- 频率域方法:对图像傅里叶变换进行修改。
Background
空间域处理数学表达: \[ g(x,y)=T[f(x,y)] \]
- \(f(x,y)\): 输入图像
- \(g(x,y)\): 输出图像
- \(T\): an operator on \(f\), defined over some neighborhood of \((x, y)\). 在\((x,y)\)一个邻域上定义的对\(f\)的算子。
Q: 算子?邻域?
A: 算子可应用于单幅图像的pixels or 一组图像的 pixels.
邻域一般是\((x,y)\)周边的8个格子(\(3\times 3, (x,y)\)处于中心)、可能还有矩形或是圆形。
最简单的\(T\)是邻域\(1\times 1\)的(也就是只有本身\((x,y)\)),称为灰度变换函数。 \[ s=T(r) \] \(s,r\)分别表示\(g,f\)在任意点\((x,y)\)处的灰度。
灰度变换函数(Gray-level Transformation)
对数变换(Logarithmic)
\[ s=c\log(1+r) \]
\(c\)是常数,\(r\ge 0\).
对数变换的作用:
- 动态范围压缩:当输入图像的灰度值范围非常宽(例如 0 到 10610^6106),直接显示会丢失暗部细节。通过对数变换,可以将宽动态范围压缩到更可管理的范围。
- 细节增强:低强度值区域的细节被拉伸并增强,因此在频谱图像、医学图像中常用。
对数变换的曲线特性:
- 对数变换的形状固定。此变换的形状类似于\(\gamma\)曲线,两个尺度上的低值均设置为 0,高值均设置为 1。
- 当 \(r\) 较小时,输出 \(s\)增长较快(细节增强)。
- 当 \(r\) 较大时,输出 \(s\) 增长减缓(压缩动态范围)。
- 和 Gamma 校正 不同,对数变换的曲线形状不可调。
幂律变换(Power-Law)
\[ s=cr^{\gamma} \]
其中,\(c,\gamma\)是正常数(positive constants)。
分段线性变换函数(Piecewise-Linear)
对比度拉伸(Contrast-Stretching)
对比度拉伸是一种用于增强图像对比度的强度变换方法。通过对灰度值的拉伸,使暗区域更暗、亮区域更亮,从而增强图像的视觉效果。
对比度拉伸的公式可以定义为: \[ s = T(r) = \frac{1}{1 + \left(\frac{m}{r}\right)^E} \]
- \(s\): 输出像素的灰度值。
- \(r\): 输入像素的灰度值。
- \(m\): 输入图像灰度值的中点(灰度范围的阈值)。
- \(E\): 函数的幂次,用于控制拉伸的坡度(陡峭程度)。
对比度拉伸的作用:
- 增强图像细节:使图像中灰度分布更加均匀,提升对比度。
- 突出某些特定灰度值区域:通过调整参数 \(m\) 和 \(E\),可以针对性地增强某些灰度值范围。
- 解决低对比度问题:例如,在过暗或过亮的图像中,灰度值集中在某一小范围内时,拉伸可以增加动态范围,提升视觉效果。
灰度级分层(Gray-level Slicing)
突出图像中的特定灰度区间:
method1:(二值图像) 将感兴趣范围内的所有灰度值显示为一个值、将其他所有灰度值显示为另外一个值。
method2:基于下图中的变换,使期望的灰度范围变亮(/变暗),但保持图像中其他的灰度级不变。
比特平面分层(Bit-plane slicing): 像素值是由比特组成的整数。8比特图像可以视为8个1比特平面组成,其中plane 1中包含图像中所有图像的最低有效比特、plane 8包含所有像素的最高有效比特。
直方图处理(Histogram Processing)
图像的直方图是一种统计工具,用来描述图像中像素强度(灰度值)的分布情况。
\(f\)的非归一化直方图定义为: \[ h(r_k)=n_k,k=0,1,\dots,L-1 \]
其中,\(r_k\)表示一副\(L\)级灰度数字图像\(f(x,y)\)的灰度,\(n_k\)表示\(f\)中灰度为\(r_k\)的像素的数量,并且细分的灰度级称为直方图容器。
\(f\)的归一化直方图定义为: \[ p(r_k)=\frac{h(r_k)}{MN}=\frac{n_k}{MN} \] 其中\(M,N\)分别是图像的行数和列数。(这是书上给出的公式)
或者也可以写成(PPT中给出的公式): \[ p(r_k)=\frac{h(r_k)}{N}=\frac{n_k}{N}\\ N=\sum^{L-1}_{k=0}n_k,\ k=0,1,\dots,L-1 \] 殊途同归。\(p(r_k)\)是对图像中出现的灰度级\(r_k\)的概率的估计。对k的所有值,\(p(r_k)\)的和总是1.
直方图均衡化(Histogram Equalization)
直方图均衡化是一种自动调整图像亮度分布的方法,通过重新分配像素灰度值,使输出图像的灰度直方图尽可能接近均匀分布,从而增强图像的整体对比度。
假设灰度值最初是连续的,令变量\(r\)表示待处理图像的灰度。\(r=[0,L-1]\), \(r=0\)黑色,\(r=L-1\)白色。对于这些满足条件的\(r\),我们关注如下的灰度映射: \[ s=T(r),\quad 0\le r\le L-1 \] 对于输入图像中的给定灰度值\(r\), 它将产生一个输出灰度值\(s\)。假设:
- \(T(r)\)在区间\([0,L-1]\)上是一个单调递增函数.
- 对\(0\le r\le L-1\), 有\(0\le T(r)\le L-1\).
假使我们想从\(s\)逆推回\(r\), 那么就是\(T\)的逆变换。如果想这个倒推成立,那么就需要是严格递增函数,不然自变量与因变量就不是一一对应的关系。
直方图均衡化基于概率密度函数(PDF:probability density function),产生一个随机变量。
连续变量\(r,s\)
\[ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)\vert\frac 1 {(L-1)p_r(r)}=\frac 1{L-1},\quad 0\le s\le L-1 \]
其中\(p_r(r), p_s(s)\)分别表示两幅不同图像中灰度值\(r,s\)的概率密度函数(PDF). \(p\)的下标表明\(p_r,p_s\)是不同的函数。可见\(p_s(s)\)是均匀(uniform)PDF, \(T(r)\)取决于\(p_r(r)\), 但\(p_s(s)\)永远是均匀的。
概率论基本结论:若已知\(p_r(r),T(r)\), 且\(T(r)\)是连续的且在感兴趣的值域上是可微的,则变换侯的变量\(s\)的PDF是: \[ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert \] 累计分布函数(CDF: cumulative distribution function):由于PDF总为正,且函数的积分是函数下方的面积,因此可以证明\(s=T(r)\)是单调递增函数。 \[ s=T(r)=\int^r_0 p_r(w)dw \] 计算微分: \[ \frac{ds}{dr}=\frac{dT(r)}{dr}=\frac{d\left[\int^r_0 p_r(w)dw\right]}{dr}=p_r(r)\\ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)*\frac{1}{p_r(r)}=1,\quad 0\le s\le 1 \] 假如说\(0\le s\le L-1\),则有: \[ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)*\frac{1}{(L-1)p_r(r)}=\frac 1 {L-1}, \quad 0\le s\le L-1 \]
离散变量\(r,s\)
在离散的条件下有, 下列数学表达。需要注意,第一个是书上给出、第二个是PPT中给出,二者没什么大的差别。灰度级\(r_k\)在一副图像中出现的概率是: \[ p_r(r_k)=\frac{h(r_k)}{MN}=\frac{n_k}{MN} \\ p_r(r_k)=\frac{n_k}{N},\quad k=0,1,\dots,L-1 \] 灰度映射函数是: \[ s=T(r_k)=\sum^k_{j-0}p_r(r_j)=\sum^k_{j-0}\frac{n_k}{MN}\\ s=T(r_k)=\sum^k_{j-0}p_r(r_j)=\sum^k_{j=0}\frac{n_j}{N} \] 使用这个函数可以将输入图像中灰度级为\(r_k\)的每个像素映射到输出图像中灰度级为\(s_k\)的对应像素,这称为直方图均衡化/直方图线性化变换。
直方图匹配(Histogram Matching)
直方图均衡化产生一个变换函数,试图生成一副具有均匀直方图的输出图像。但有时候不适用,有时候需要规定待处理图像的直方图形状。用于生成具有规定直方图图像的方法,称为直方图匹配或是直方图均衡化。
令\(r,z\)是PDF \(p_r(r),p_z(Z)\)的随机变量。\(r,z\)分别表示输入图像和输出图像的灰度级。\(p_z(z)\)是规定的PDF,是我们希望输出图像具有的。
计算直方图匹配三步走:
- 计算输入图像的直方图\(p_r(r)\), 得到\(s_k\)
- 计算\(G(z_q)=(L-1)\sum^q_{i=0}p_z(z_i)\),\(p_z(z)\)是规定直方图的所有值。
- 计算\(G(z_q)=s_k\), 求\(G^{-1}\), 找到对应的\(z_q\)的对应值,匹配,形成直方图规定化后的图像。
连续变量\(r,s,z\)
令\(s\)是一个具有如下性质的随机变量: \[ s=T(r)=(L-1)\int^r_0p_r(w)dw \] 定义关于变量\(z\)的一个函数\(G\), 它具有如下的性质: \[ G(z)=(L-1)\int^z_0p_z(v)dv=s \] 由这两个公式可知:\(G(z)=s=T(r)\), 因此\(z\)必定满足条件: \[ z=G^{-1}(s)=G^{-1}[T(r)] \] 使用输入图像算出\(p_r(r)\)后,就可以得到\(s\), 有了\(s\), 就能得到\(p_z(z)\)
离散变量\(r,s,z\)
\[ s_k=T(r_k)=(L-1)\sum^k_{j=0}p_r(r_j),\quad k=0,1,\dots,L-1\\ G(z_q)=(L-1)\sum^q_{i=0}p_z(z_i)=s_k\\ z_q=G^{-1}(s_k) \]
空间滤波(Spatial Filtering)
- 在空间滤波(相对于频域滤波)中,输出图像是通过对输入图像的像素进行简单计算直接计算得出的。
- 空间滤波可以是线性的,也可以是非线性的。
- 对于每个输出像素,计算中都会用到输入像素的某个邻域。(空间滤波通过把每个pixel的值替换为该pixel及其邻域的函数值来修改图像)
线性空间滤波(Linear Spatial Filtering)
对一幅图像\(f_{M\times N}\), 大小为\(m\times n\)的线性滤波器掩码为: \[ g(x,y)=\sum^a_{s=-a}\sum^b_{t=-b}w(s,t)f(x+s,y+t)\\ a=\frac{m-1}{2},b=\frac{n-1}2 \] 上式称为卷积。Filter masks(滤波器掩码)有时也叫做卷积掩码/卷积核。
Correlation v.s. Convolution
- 相关运算:在图像上移动核的中心,并且在每个位置计算乘积之和。
- 卷积运算:将相关运算的核旋转180°。
对于这个例子,
- "same" correlation res: 08242100
- "same" convolution res:01242800
平滑核:
- 盒式核(box kernel)
- 高斯核(Gaussian kernel)
非线性空间滤波(Nonlinear Spatial Filtering)
- 非线性空间过滤通常也使用邻域,但会使用一些其他数学运算。例如,让每个中心点的响应等于其邻域中的最大像素值是一种非线性过滤操作。
- 另一个基本区别是,掩码的概念在非线性处理中并不那么普遍。
给定一个大小为\(M\times N\)的输入图像\(f\)和一个大小为\(m\times n\)的邻域,函数 colfilt 生成一个最大大小为 \(mn × MN\) 的矩阵,称为 A: 每列对应于以图像中某个位置为中心的邻域所包含的像素。
锐化(高通)空间滤波器(Sharpening Spatial Filters)
平滑称为低通滤波、锐化称为高通滤波。
- 锐化的主要目的是突显图像中的精细细节或增强模糊的细节。
- 锐化通常通过空间微分来实现。
数字函数的导数以差分/差值的形式定义。
对于一阶导数,我们要求它必须满足:(如 Sobel 算子,适合边缘检测) \[ \frac{\partial f}{\partial x}=f(x+1)-f(x) \]
- 在平坦段(灰度值恒定的区域)必须为零 。
- 在灰度阶跃或斜坡的开始处必须非零。
- 沿斜坡必须非零 。
对于二阶导数,我们要求它必须满足:(如 Laplacian 算子,可以增强图像细节,但可能放大噪声。) \[ \frac{\partial^2 f}{\partial x^2}=f(x+1)+f(x-1)-2f(x) \]
- 在平坦段(灰度值恒定的区域)必须为零。
- 在灰度阶跃或斜坡的开始和结束处必须非零。
- 沿斜率恒定的斜坡必须为零
- 图像中水平扫描线的一段,显示斜坡和阶梯边缘以及恒定段。
- 扫描线及其导数的值。
- 导数图,显示零交叉。在 (a) 和 (c) 中,为了便于视觉显示,各点用虚线连接起来。
拉普拉斯(Laplacian Filter)
最简单的各向同性导数算子(核)是拉普拉斯,对于两个变量的函数图像\(d(x,y)\), 它定义为: \[ \begin{align} \frac{\partial^2 f}{\partial x^2}&=f(x+1,y)+f(x-1,y)-2f(x,y)\\ \frac{\partial^2 f}{\partial y^2}&=f(x,y+1)+f(x,y-1)-2f(x,y)\\ \nabla^2 f& = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}\\ &= [f(x+1, y) + f(x-1, y) + f(x, y+1) + f(x, y-1)] - 4f(x, y) \end{align} \] 这个公式可以使用下面的核进行卷积运算来实现。因此,图像锐化的滤波原理类似于低通滤波,只是使用的系数不同。
使用拉普拉斯核进行图像增强:\(g(x,y)=f(x,y)-\nabla^2 f(x,y)\)
(a)模糊后的月球北极图像。 (b)使用上述(a)核得到的拉普拉斯图像。 (c)使用公式\(g(x,y)=f(x,y)-\nabla^2 f(x,y), c=-1\)得到的锐化后的图像。 (d)重复相同过程但使用上述(b)核得到的结果。
拉普拉斯图像往往是黑色的、无特征的。
钝化掩蔽和高提升滤波(Unsharp masking and high-boost filtering)
钝化掩蔽和高提升滤波是图像锐化的重要技术,主要用于增强图像细节,通过放大图像的高频成分(如边缘和纹理)来突出细节部分。
钝化掩蔽三步走:
钝化掩蔽通过从原图像中减去模糊化版本来实现锐化。 \[ f_s(x, y) = f(x, y) - \bar{f}(x, y) \] 其中\(f_s(x, y)\) 表示锐化后图像,\(\bar{f}(x, y)\) 是图像\(f(x, y)\)的模糊版本。
- 模糊原图像
- 从原图像减去模糊后图像(产生的差称为模板)
- 将模板与原图像相加
高提升滤波
然后,将加权后的模板与原图像相加, 得到 \(f_{hb}(x, y)\): \[ f_{hb}(x, y) = A f(x, y) - \bar{f}(x, y) \] 其中 \(A \geq 1\), \(\bar{f}(x, y)\)是 \(f(x, y)\)的模糊版本。.
更近一步,还能得到: \[ f_{hb}(x, y) = (A - 1)f(x, y) + f(x, y) - \bar{f}(x, y)\\ f_{hb}(x, y) = (A - 1)f(x, y) + f_s(x, y) \] 使用拉普拉斯算子进行锐化:当使用\(\nabla^2f(x, y)\)来计算锐化图像 \(f_s(x, y)\),高提升滤波的公式变为: \[ f_{hb}(x, y) = (A - 1)f(x, y) - \nabla^2f(x, y)\\ \text{or}\ f_{hb}(x, y) = (A - 1)f(x, y) + \nabla^2f(x, y) \] 其中拉普拉斯算子用于检测图像的快速灰度变化区域(边缘和细节),这使得锐化能够更直接地基于边缘信息进行。