灰度直方图
灰度直方图: 图像灰度直方图描述的是图像各个灰度级的统计特性,横坐标表示各级灰度值,纵坐标表示各级灰度值在图像中对应的像素个数。
比如灰度级范围为[0,L-1]的数字图像的灰度直方图可以如下离散函数来表示:
其中,rk表示第k级灰度值,nk表示图像中灰度为rk的像素个数,k=0,1,...,L-1。
归一化灰度直方图
归一化灰度直方图:横坐标表示各级灰度值,纵坐标表示各级灰度值在图像中出现的概率统计。归一化直方图的纵坐标分量之和应等于1。
其中,rk表示第k级灰度值,nk表示图像中灰度为rk的像素个数,M与N表示图像的行和列,p(rk)表示灰度级rk在图像中出现的概率值,k=0,1,...,L-1。
累积直方图
累计直方图:代表图像组成成分在灰度级的累计概率分布情况,每一个概率值代表小于等于此灰度值的概率。
其中,rk表示第k级灰度值,nk表示图像中灰度为rk的像素个数,M与N表示图像的行和列,p(rk)表示灰度级rk在图像中出现的概率值,c(rk)表示累积值,k=0,1,...,L-1。
从上图可以看出,在暗图像中,灰度直方图的分量集中在灰度级的低端;在亮图像中,灰度直方图的分量集中在灰度级的高端;低对比图图像具有较窄的灰度直方图;高对比度图像中灰度直方图的分量覆盖很宽的灰度级范围,且像素的分布没有太不均匀,只有少量垂线比其它高许多。
直方图均衡
直方图均衡:是将当前的灰度分布通过一个变换函数,变换为范围更宽、灰度分布更均匀的图像,也就是将原图像的直方图修改为在整个灰度区间内大致均匀分布,因此扩大了图像的动态范围,增强了图像的对比度。
直方图均衡化的步骤:
- 计算原图像的灰度直方图p(rk);
- 计算原图像的累积直方图c(rk);
- 计算图像新的像素值,如下
其中,rk表示第k级灰度值,nk表示图像中灰度为rk的像素个数,M与N表示图像的行和列,p(rk)表示灰度级rk在图像中出现的概率值,c(rk)表示累积值,k=0,1,...,L-1,sk表示输出图像的灰度级,(L-1)表示图像的最大灰度级比如255。
示例
已知一幅大小为64×64像素的3位图像的灰度分布以及归一化灰度直方图值如下表所示,求均衡后的归一化灰度直方图?
rk | nk | p(rk) |
---|---|---|
r0 | 790 | 0.19 |
r1 | 1023 | 0.25 |
r2 | 850 | 0.21 |
r3 | 656 | 0.16 |
r4 | 329 | 0.08 |
r5 | 245 | 0.06 |
r6 | 122 | 0.03 |
r7 | 81 | 0.02 |
由于该图像是3位图像,所以L=23=8,直接运用直方图均衡化公式,可得:
将所求得的s值近似为相近的整数,即:
这些整数就是均衡后的直方图的值,可以看到,通过直方图均衡操作,原先的8个灰度级变为了5个灰度级,即:
- 原先的第0灰度级被映射为了第1灰度级,再由上表可知,在均衡后的图像中有790个像素具有该值;
- 原先的第1灰度级被映射为了第3灰度级,在均衡后的图像中有1023个像素具有该值;
- 原先的第2灰度级被映射为了第5灰度级,在均衡后的图像中有850个像素具有该值;
- 原先的第3、4灰度级被映射为了第6灰度级,在均衡后的图像中有(656+329)=985个像素具有该值;
- 原先的第5、6、7灰度级被映射为了第7灰度级,在均衡后的图像中有(245+122+81)=448个像素具有该值.。
根据归一化灰度直方图的计算公式,使用MN=64×64=4096去除这些数即可得到均衡后图像的归一化灰度直方图,将其绘制出来如下(图3)所示。
直方图匹配
直方图匹配:对于某些应用,采用直方图均衡的基本增强并不是最好的方法,特别地,有时我们希望处理后的图像具有规定的直方图形状,这种用于产生处理后有特殊直方图的方法称为直方图匹配或直方图规定化。
直方图匹配的步骤:
- 对原始图像的灰度直方图进行均衡化,得到一个变换函数sk=T(rk),其中sk是均衡化后的灰度级,rk是原始灰度级。
- 对规定的直方图进行均衡化,得到一个变换函数vq=G(zq),其中vq是均衡化后的灰度级,zq是规定化的灰度级。
- 上面都是对同一图像的均衡化,其结果应该是相等的。
由于:
通过反变换可变形得到下式:
像这样,通过均衡化作为中间结果,将得到原始灰度级rk和规定化后灰度级zq之间的映射关系。
但是在实践中,我们并不需要计算G的反变换,因为我们处理的灰度级是整数,比如8位图像的灰度级是0-255,利用vq=G(zq)式计算q=0,1,2,...,L-1时的所有值是一件很简单的事情。实际计算步骤如下:
- 对原始图像的灰度直方图进行均衡化,将sk四舍五入为[0,L-1]内的整数。
- 对规定的直方图进行均衡化,将vq的值四舍五入为[0,L-1]内的整数。
- 对于每一个sk值,都寻找相应的vq值,使得vq最接近sk,进而可得sk到zq的映射。当满足sk的zq值多于一个时,我们选择最小的zq值进行映射。
- 根据得到的sk与zq的映射关系,即可将原始直方图均衡后的灰度级映射为规定化后的灰度级,形成直方图规定化后的图像。
示例
已知一幅大小为64×64像素的3位图像的灰度分布、归一化灰度直方图值如表1所示,规定的归一化灰度直方图值如表2所示,求规定后的归一化灰度直方图?
表1.原始图像的灰度分布、归一化灰度直方图值
rk | nk | p(rk) |
---|---|---|
r0 | 790 | 0.19 |
r1 | 1023 | 0.25 |
r2 | 850 | 0.21 |
r3 | 656 | 0.16 |
r4 | 329 | 0.08 |
r5 | 245 | 0.06 |
r6 | 122 | 0.03 |
r7 | 81 | 0.02 |
表2.规定的归一化灰度直方图值
zq | p(zq) |
---|---|
z0 | 0.00 |
z1 | 0.00 |
z2 | 0.00 |
z3 | 0.15 |
z4 | 0.20 |
z5 | 0.30 |
z6 | 0.30 |
z7 | 0.15 |
首先对原始图像的灰度直方图进行均衡化,再将sk四舍五入为[0,L-1]内的整数,可得:
对规定的直方图进行均衡化,并将vq的值四舍五入为[0,L-1]内的整数,可得:
将如上计算结果统计到表格中:
zq | vq=G(zq) |
---|---|
z0 | 0 |
z1 | 0 |
z2 | 0 |
z3 | 1 |
z4 | 2 |
z5 | 5 |
z6 | 6 |
z7 | 7 |
对于每一个sk值,都寻找相应的vq值,使得vq最接近sk,根据vq与zq的关系,进而可得sk到zq的映射,如下所示:
sk | vq=G(zq) | zq |
---|---|---|
1 | 1 | 3 |
3 | 2 | 4 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 7 |
将sk映射为zq,实际上就是将原始直方图均衡后的灰度级映射为规定化后的灰度级,详细过程如下:
- 原始直方图均衡后的第1灰度级被映射为了第3灰度级,在直方图均衡后的图像中有790个像素具有该值;
- 原始直方图均衡后的第3灰度级被映射为了第4灰度级,在直方图均衡后的图像中有1023个像素具有该值;
- 原始直方图均衡后的第5灰度级被映射为了第5灰度级,在直方图均衡后的图像中有850个像素具有该值;
- 原始直方图均衡后的第6灰度级被映射为了第6灰度级,在直方图均衡后的图像中有(656+329)=985个像素具有该值;
- 原始直方图均衡后的第7灰度级被映射为了第7灰度级,在直方图均衡后的图像中有(245+122+81)=448个像素具有该值;
根据归一化灰度直方图的计算公式,使用MN=64×64=4096去除这些数即可得到规定后图像的归一化灰度直方图,将其绘制出来如下(图d)所示。
从结果可以看出,如上(图d)所示的最终结果并不完全与规定的直方图匹配,但我们达到了将灰度明确地移向灰度级高端的目的。
直方图均衡与直方图匹配的比较
- 由于原始影像的直方图中有大量像素灰度接近0,直接进行直方图均衡时,其结果是把非常窄的暗像素区间映射到输出图像灰度级的高端。
- 由于原始影像的直方图中有大量像素灰度接近0,所以可以修改原始图像的直方图,使其不再有这一属性。即采用直方图匹配的方法来改善原始影像,人为规定一个直方图,该直方图保持了原有直方图的基本形状,但在图像灰度暗区的灰度值有更平滑的过度。
- 比较以上结果可以看出,对于该问题,直方图匹配的效果比直方图均衡要好。应该注意,原始直方图的细小改变会使图像的外观得到显著改进。