纵览
编辑
这种方法通常用来增加许多图像的全局对比度 ,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度 可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光 图像中更好的骨骼 结构显示以及曝光过度或者曝光不足照片 中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
实现
编辑
考虑一个离散的灰度图像 {x },让 ni 表示灰度 i 出现的次数,这样图像中灰度为 i 的像素的出现概率是
p
x
(
i
)
=
p
(
x
=
i
)
=
n
i
n
,
0
≤
i
<
L
{\displaystyle \ p_{x}(i)=p(x=i)={\frac {n_{i}}{n}},\quad 0\leq i<L}
L 是图像中所有的灰度数(通常为256),
n
{\displaystyle n}
是图像中所有的像素数,
p
x
(
i
)
{\displaystyle p_{x}(i)}
实际上是像素值为 i 的图像的直方图,归一化到 [0,1]。
把对应于 px 的累积分布函数 ,定义为:
c
d
f
x
(
i
)
=
∑
j
=
0
i
p
x
(
j
)
{\displaystyle \ cdf_{x}(i)=\sum _{j=0}^{i}p_{x}(j)}
,
是图像的累计归一化直方图。
我们创建一个形式为 y = T (x ) 的变换,对于原始图像中的每个值它就产生一个
y
{\displaystyle y}
,这样
y
{\displaystyle y}
的累计概率函数就可以在所有值范围内进行线性化,转换公式定义为:
c
d
f
y
(
i
)
=
i
K
{\displaystyle \ cdf_{y}(i)=iK}
对于常数 K 。CDF的性质允许我们做这样的变换(参见逆分布函数);定义为:
c
d
f
y
(
y
′
)
=
c
d
f
y
(
T
(
k
)
)
=
c
d
f
x
(
k
)
{\displaystyle \ cdf_{y}(y^{\prime })=cdf_{y}(T(k))=cdf_{x}(k)}
其中 k 属于区间 [0,L)。注意 T 将不同的等级映射到
0..1
{\displaystyle {0..1}}
域,为了将这些值映射回它们最初的域,需要在结果上应用下面的简单变换:
y
′
=
y
⋅
(
max
{
x
}
−
min
{
x
}
)
+
min
{
x
}
{\displaystyle \ y^{\prime }=y\cdot (\max\{x\}-\min\{x\})+\min\{x\}}
上面描述了灰度图像上使用直方图均衡化的方法,但是通过将这种方法分别用于图像RGB 颜色值的红色、绿色和蓝色分量,从而也可以对彩色图像进行处理。
彩色图像直方图均衡化
编辑
实际上,对彩色分量rgb分别做均衡化,会产生奇异的点,图像不和谐。一般采用的是用HSL和HSV色彩空间 进行亮度的均衡即可。
例子
编辑
下面的这个例子是一个8位的8×8灰度图像:
[
52
55
61
66
70
61
64
73
63
59
55
90
109
85
69
72
62
59
68
113
144
104
66
73
63
58
71
122
154
106
70
69
67
61
68
104
126
88
68
70
79
65
60
70
77
68
58
75
85
71
64
59
55
61
65
83
87
79
69
68
65
76
78
94
]
{\displaystyle {\begin{bmatrix}52&55&61&66&70&61&64&73\\63&59&55&90&109&85&69&72\\62&59&68&113&144&104&66&73\\63&58&71&122&154&106&70&69\\67&61&68&104&126&88&68&70\\79&65&60&70&77&68&58&75\\85&71&64&59&55&61&65&83\\87&79&69&68&65&76&78&94\end{bmatrix}}}
该灰度图像的灰度值出现次数如下表所示,为了简化表格,出现次数为0的值已经被省略
灰度值
出现次数
灰度值
出现次数
灰度值
出现次数
灰度值
出现次数
灰度值
出现次数
52
1
64
2
72
1
85
2
113
1
55
3
65
3
73
2
87
1
122
1
58
2
66
2
75
1
88
1
126
1
59
3
67
1
76
1
90
1
144
1
60
1
68
5
77
1
94
1
154
1
61
4
69
3
78
1
104
2
62
1
70
4
79
2
106
1
63
2
71
2
83
1
109
1
累积分布函数 (cdf)如下所示,与上一表格类似,为了简化,累积分布函数值为0的灰度值已经被省略
灰度值
cdf
灰度值
cdf
灰度值
cdf
灰度值
cdf
灰度值
cdf
52
1
64
19
72
40
85
51
113
60
55
4
65
22
73
42
87
52
122
61
58
6
66
24
75
43
88
53
126
62
59
9
67
25
76
44
90
54
144
63
60
10
68
30
77
45
94
55
154
64
61
14
69
33
78
46
104
57
62
15
70
37
79
48
106
58
63
17
71
39
83
49
109
59
如表格所示,灰度值最小值为52,最大值为154. 通常,直方图均衡化算式如下:
h
(
v
)
=
r
o
u
n
d
(
c
d
f
(
v
)
−
c
d
f
m
i
n
c
d
f
m
a
x
−
c
d
f
m
i
n
×
(
L
−
1
)
)
{\displaystyle h(v)=\mathrm {round} \left({\frac {cdf(v)-cdf_{min}}{cdf_{max}-cdf_{min}}}\times (L-1)\right)}
累积分布函数最小值cdfmin 在本例中为1,最大值cdfmax 在本例中为64,而L则是灰度级数(如本例中,图像为8位深度,则灰度级数共有2^8=256级数,这也是最常见的灰度级数).则对于本例的直方图均衡化算式为:
h
(
v
)
=
r
o
u
n
d
(
c
d
f
(
v
)
−
1
63
×
255
)
{\displaystyle h(v)=\mathrm {round} \left({\frac {cdf(v)-1}{63}}\times 255\right)}
例如,灰度为78的像素的累积分布函数为46,均衡化后,灰度值变化为:
h
(
78
)
=
r
o
u
n
d
(
46
−
1
63
×
255
)
=
r
o
u
n
d
(
0.714286
×
255
)
=
182
{\displaystyle h(78)=\mathrm {round} \left({\frac {46-1}{63}}\times 255\right)=\mathrm {round} \left(0.714286\times 255\right)=182}
直方图均衡化后,图像的灰度值变化如下表所示:
[
0
12
53
93
146
53
73
166
65
32
12
215
235
202
130
158
57
32
117
239
251
227
93
166
65
20
154
243
255
231
146
130
97
53
117
227
247
210
117
146
190
85
36
146
178
117
20
170
202
154
73
32
12
53
85
194
206
190
130
117
85
174
182
219
]
{\displaystyle {\begin{bmatrix}0&12&53&93&146&53&73&166\\65&32&12&215&235&202&130&158\\57&32&117&239&251&227&93&166\\65&20&154&243&255&231&146&130\\97&53&117&227&247&210&117&146\\190&85&36&146&178&117&20&170\\202&154&73&32&12&53&85&194\\206&190&130&117&85&174&182&219\end{bmatrix}}}
注意:原最小灰度值52变为了0,而最大灰度值154变为了255
原始图像
均衡化后图像
全尺寸图像
编辑
未经均衡化的图像
相应的直方图(红)和累积直方图(黑)
经过均衡化的同一幅图像
相应的直方图(红)和累积直方图(黑)
参见
编辑
参考文献
编辑
Acharya and Ray, Image Processing: Principles and Applications , Wiley-Interscience 2005 ISBN 0471719986
Russ, The Image Processing Handbook: Fourth Edition , CRC 2002 ISBN 0849325323
外部链接
编辑