图像增强
1.背景
增强的主要目的是对图像进行处理,使结果图像比原图像更适合于某一特定应用。图像。
增强方法可分为两大类:空域方法和频域方法。
空域方法是基于图像中的像素的直接进行局部处理。
频域技术是基于图像的傅里叶变换进行处理。
2. 灰度变换函数
空间域处理的数学表示:
g ( x , y ) = T [ f ( x , y ) ] , g(x,y)=T[f(x,y)], g(x,y)=T[f(x,y)],
其中 f ( x , y ) f(x,y) f(x,y): 输入图像 g ( x , y ) g(x,y) g(x,y):输出图像 T : 在 T: 在 T:在f( x, y) 上的操作 , 定义在 上的操作 ,定义在 上的操作,定义在(x,y)的某个邻域上
·
T
T
T 可以在一组图像上进行操作,例如噪声消除
· 方形和矩形邻域是使用最多的,因为它们易实现,也可使用圆形区域。
T T T最简单的情况是邻域大小为1×1。这时 g g g只依赖于 f f f 在 (x, y)处的值,即
s 2 = T ( r ) , s^2=T\left(r\right), s2=T(r),
我们称之为灰度变换或亮度变换,其中 s s s与 r r r分别为输出与输入的亮度值。
2.1. 幂律变换
s
=
c
r
γ
其中
c
,
γ
是正常数
s\text{ = }cr^\gamma\quad\text{其中 }c,\gamma\text{是正常数}
s = crγ其中 c,γ是正常数
c=1时的图像为:
应用例子:
以上面幂律变换像为例子:当整体偏暗的图像,我们要想将将暗处的地方调亮,则
γ
则需要选择小于1的值 ,将低像素部分的亮度调高一些。
\quad{ }\gamma\text{则需要选择小于1的值 ,将低像素部分的亮度调高一些。}
γ则需要选择小于1的值 ,将低像素部分的亮度调高一些。以增强图像的对比度;
同对于整体比较亮的图像则需要选择
γ
则需要选择大于1的值 ,将高像素部分的亮度调低一些。
\quad{ }\gamma\text{则需要选择大于1的值 ,将高像素部分的亮度调低一些。}
γ则需要选择大于1的值 ,将高像素部分的亮度调低一些。
以增强整体的对比度。
2.2.对数变换
对数变换是用这个数学表达式实现的:
s = c log ( 1 + r ) s=c\log(1+r) s=clog(1+r)
· 其中
c
c
c 是常数. · 该变换的形状类似于gamma曲线。
对数变换的主要用途之一是压缩动态范围
• 例如,傅里叶谱(第4章)的值在[0,106]或更高的范围内并不少见。当显示
在一个线性缩放到8位的显示器上时,高值占据了显示器的主导地位,从
而丢失了低强度值的视觉细节频谱。通过计算log,动态范围例如106减少
到大约14,这更易于显示管理。
• 执行对数转换时,通常希望将压缩后的值恢复到显示的全部范围。
2.3.对比拉伸变换
公式为:
s
=
T
(
r
)
=
1
1
+
(
m
/
r
)
E
s=T(r)=\frac1{1+(m/r)^E}
s=T(r)=1+(m/r)E1
它将小于
m
m
m的输入值压缩到输出图像中较窄的暗区范围内; 类似地,它将
m
m
m 以上的值压缩成输出中的窄带亮区;m位置对应f为1/2处的位置。
其中
r
r
r为输入图像的强度,
s
s
s为输出图像中对应的强度值,E控制函数
的斜率,
m
m
m为参数。
3. 直方图处理
3.1.直方图处理
亮度变换通常是基于从图像亮度直方图中提取的信息进行的,直方图在
在很多图像处理方面(图像增强、压缩、分割和描述)都起到基础的作
用,一幅亮度取值在[0,G]范围的数字图像,将它量化为L个亮度级别的直方图可以定义为一个离散函数
h
(
r
k
)
=
n
k
h(r_k)=n_k
h(rk)=nk
其中
r
k
r_k
rk为区间[0,G]中的第
k
k
k个强度级别类,
n
k
n_k
nk为图像中强度级别为
r
k
r_k
rk的像素数目。uint8类图像的G值为255,uint16类图像的G值为65535,double类图像G值为1。
一幅图像的直方图
h
(
r
k
)
h(r_k)
h(rk)可以表示为一个向量,将其所有分量除以该图像 的像素总数,可得到对应的归一化直方图,即
p
(
r
k
)
=
h
(
r
k
)
N
=
n
k
N
,
N
=
∑
k
=
1
L
n
k
,
k
=
1
,
2
,
.
.
.
,
L
p(r_k)=\frac{h(r_k)}{N}=\frac{n_k}{N},N=\sum_{k=1}^{L}n_k,k=1,2,...,L
p(rk)=Nh(rk)=Nnk,N=k=1∑Lnk,k=1,2,...,L
从基本概率论知识可知,
p
(
r
k
)
p(r_k)
p(rk)可看作为在一幅图像中强度级
r
k
r_k
rk发生
概率的估计值。
3.2.直方图均衡
目的:改善图像的对比度。
结果:均衡后的的图像具有几乎均匀的像素值分布。
优点:无参数的算法
所以我们的目的就是为了得到均匀分布的概率密度分布函数。
针对给定的变换函数
T
(
r
)
T(r)
T(r), 我们有
s = T ( r ) = ∫ 0 r p r ( w ) d w s=T(r)=\int_0^rp_r(w)dw s=T(r)=∫0rpr(w)dw
d s d r = d T ( r ) d r = d [ ∫ 0 r p r ( w ) d w ] d r = p r ( r ) \frac{ds}{dr}=\frac{dT(r)}{dr}=\frac{d[\int_0^rp_r(w)dw]}{dr}=p_r(r) drds=drdT(r)=drd[∫0rpr(w)dw]=pr(r)
p
s
(
s
)
=
p
r
(
r
)
∣
d
r
d
s
∣
=
p
r
(
r
)
∣
1
p
r
(
r
)
∣
=
1
,
0
≤
s
≤
1
p_s(s)=p_r(r)|\frac{dr}{ds}|=p_r(r)|\frac{1}{p_r(r)}|=1,0\leq s\leq1
ps(s)=pr(r)∣dsdr∣=pr(r)∣pr(r)1∣=1,0≤s≤1
· 可知无论原来的映射符合上面分布,在给定的积分映射变换下,输出随机变量
s
s
s服从均匀概率分布。
·
T
(
r
)
T(r)
T(r) 虽然依赖于
p
r
(
r
)
p_r(r)
pr(r), 但是得到的
p
s
(
s
)
p_s(s)
ps(s)总是均匀的
对于离散的情况,图像中亮度级
r
k
r_k
rk 出现的概率为
p r ( r k ) = n k n , k = 0 , 1 , 2 , … , L − 1 p_r(r_k)=\frac{n_k}n\:,k=0,1,2,\ldots,L-1 pr(rk)=nnk,k=0,1,2,…,L−1
其中
n
k
n_k
nk为输入图像中
r
k
r_k
rk级的像素数目,
n
n
n为从图像中总的像素数目。
此时,变换函数为
s
k
=
T
(
r
k
)
=
∑
j
=
0
k
p
r
(
r
j
)
=
∑
j
=
0
k
n
j
n
,
k
=
0
,
1
,
2
,
.
.
.
,
L
−
1
s_k=T(r_k)=\sum_{j=0}^kp_r(r_j)=\sum_{j=0}^k\frac{n_j}{n},k=0,1,2,...,L-1
sk=T(rk)=j=0∑kpr(rj)=j=0∑knnj,k=0,1,2,...,L−1
利用该映射,可将将输入图像中
r
k
r_k
rk级的每个像素映射到
s
k
s_{k}
sk级对应的像素,从而得到均衡后输出图像。
具体地:
· 对输入图像计算其直方图,并计算其归一化直方图
· 利用下面的累计映射计算输入图像中每个灰度级
r
k
r_k
rk对应的输出图像的
· 注意这时
s
k
s_k
sk为一个属于区间[0, 1]的浮点数,
可以通过
m
k
=
[
S
k
∗
(
L
−
1
)
]
m_k=[S_k*(L-1)]
mk=[Sk∗(L−1)]将
s
k
s_k
sk转换为一个整数的灰度级别,其中[]代表着一种取整操作,这里不妨假设为四舍五入的取整运算。
· 这种取整运算会导致多个输入灰度级对应同一个灰度级的输出,即
m
p
=
m
p
+
1
=
.
.
.
.
.
.
=
m
k
=
.
.
.
.
.
.
=
m
q
−
1
=
m
q
m_p=m_{p+1}=......=m_k=......=m_{q-1}=m_q
mp=mp+1=......=mk=......=mq−1=mq ,这时输出图像的灰度级
m
k
m_k
mk对应的归一化直方图中的概率值为对应的多个输入灰度级的概率值之和。
作业中一个例子:
1.原灰度级 0 1 2 3 4 5 6 7
概率 0.17 0.25 0.21 0.16 0.07 0.08 0.04 0.02
累积函数 0.17 0.42 0.63 0.79 0.86 0.94 0.98 1.00
2.将累积分布函数中的每一项都乘以7,并且进行四舍五入,得到新的灰度级s。
原灰度级 0 1 2 3 4 5 6 7
概率 0.17 0.25 0.21 0.16 0.07 0.08 0.04 0.02
累积函数 0.17 0.42 0.63 0.79 0.86 0.94 0.98 1.00
新的灰度级 1 3 4 6 6 7 7 7
3.将原灰度级和新灰度级分布进行一个映射。得到新的灰度级的概率。
新灰度级 0 1 2 3 4 5 6 7
对应概率 0.00 0.17 0 0.25 0.21 0.00 0.23 0.14
离散情况下通常直方图均衡并不能产生绝对平坦的输出直方图
• 离散累计映射并不能保证该映射是单调递增的,只能保证是单调不减
的
• 累计映射的输出值需要转化成整型的灰度级,转化的过程中出现多对一
的关系,这是造成输出直方图不平坦的重要原因。
直方图均衡只能用一次,多次使用没有效果,直方图均衡是直方图匹配的一个特例。
3.3.直方图匹配
当图像中存在主要由于原始图像中像素的高度集中在0附近,这样进行直方图均衡的话,
s
k
=
T
(
r
k
)
=
∑
j
=
0
k
p
r
(
r
j
)
=
∑
j
=
0
k
n
j
n
,
k
=
0
,
1
,
2
,
.
.
.
,
L
−
1
s_k=T(r_k)=\sum_{j=0}^kp_r(r_j)=\sum_{j=0}^k\frac{n_j}{n},k=0,1,2,...,L-1
sk=T(rk)=j=0∑kpr(rj)=j=0∑knnj,k=0,1,2,...,L−1利用公式计算在起始灰度级的概率就会很大,累积概率又是单调递增的,因此映射回去后反而都集中在了高像素区域,因此图像又变得很亮。
一种合理的方法是修改该图像的直方图,使其不具有此属性。
解决这种情况的一种可能方法就是使用直方图匹配。我们希望输出图像保持原始图像的直方图的一般形状,同时将源图像在灰度级低端的密集情况进行改善,使其变得分布更广泛、分散。
我们注意到原始图像的直方图基本上是双峰的,一个大的模式在原点,另一个小的模式在灰度的高端。例如,可以使用多模态高斯函数对目标直方图进行建模。
匹配结果
可以看到很好地解决了直方图均衡存在的问题。
4.总结:
重点关注直方图均衡和匹配算法。