直方图均衡化

   直方图均衡化实际是缩小原图像中小概率像素的灰度等级范围,而拉长大概率像素的灰度等级范围,使得主要像素(有用像素)的对比度增加并减小极少像素(往往为无用数据)的灰度等级范围。以下是维基百科对直方图均衡化的叙述,原文转载自:http://zh.wikipedia.org/wiki/直方图均衡化

   直方图均衡化用来增强图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

    这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

实现

我们来看一个灰度图像,让n_i表示灰度i出现的次数,这样图像中灰度为i 的像素的出现概率是

p_x(i) = \frac{n_i}{n}, i\in {0,..., L - 1}

L 是图像中所有的灰度数,n 是图像中所有的像素数, p 实际上是图像的直方图,归一化到 0..1

把 c 作为对应于 p 的累计概率函数, 定义为:

 c(i) = \sum_{j=0}^i p_x(j)

c 是图像的累计归一化直方图。

我们创建一个形式为 y = T(x) 的变化,对于原始图像中的每个值它就产生一个 y,这样 y 的累计概率函数就可以在所有值范围内进行线性化,转换公式定义为:

y_i = T(x_i) = c(i)

注意 T 将不同的等级映射到 {0..1} 域,为了将这些值映射回它们最初的域,需要在结果上应用下面的简单变换:

y_i' = y_i \cdot(max - min) + min

上面描述了灰度图像上使用直方图均衡化的方法,但是通过将这种方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也可以对彩色图像进行处理。

例子

下面的这个例子是一个8位的8×8灰度图像:

\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的值已经被省略

灰度值 出现次数 灰度值 出现次数 灰度值 出现次数 灰度值 出现次数 灰度值 出现次数
5216427218521131
5536537328711221
5826627518811261
5936717619011441
6016857719411541
6146937811042  
6217047921061
6327128311091

累积分布函数(cdf)如下所示,与上一表格类似,为了简化,累积分布函数值为0的灰度值已经被省略

灰度值 cdf 灰度值 cdf 灰度值 cdf 灰度值 cdf 灰度值 cdf
52164197240855111360
55465227342875212261
58666247543885312662
59967257644905414463
601068307745945515464
61146933784610457  
62157037794810658
63177139834910959

如表格所示,灰度值最小值为52,最大值为154. 通常,直方图均衡化算式如下:

h(v) = \mathrm{round} \left(   \frac {cdf(v) - cdf_{min}} {(M \times N) - cdf_{min}}   \times (L - 1) \right)

累积分布函数最小值cdfmin在本例中为1, M和N分别代表了图像的长宽像素个数(本例中为8×8=64),而L则是灰度级数(如本例中,图像为8位深度,则灰度级数共有2^8=256级数,这也是最常见的灰度级数).则对于本例的直方图均衡化算式为:

h(v) = \mathrm{round} \left(   \frac {cdf(v) - 1} {63}   \times 255 \right)

例如,灰度为78的像素的累积分布函数为46,均衡化后,灰度值变化为:

h(78) = \mathrm{round} \left(   \frac {46 - 1} {63}   \times 255 \right)= \mathrm{round} \left(   0.714286   \times 255 \right)=182

直方图均衡化后,图像的灰度值变化如下表所示:

\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

JPEG example subimage.svgJPEG example subimage - equalized.svg
原始图像均衡化后图像
彩色图像直方图均衡化 实际上,对彩色分量rgb分别做均衡化,会产生奇异的点,图像不和谐。一般采用的是用yuv空间进行亮度的均衡即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白杨林荫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值