直方图均衡化取整怎么计算_图像直方图均衡化和规定化是怎么做的?

2017年11月9日更新:感谢知友 @罗maochun 指出了原文中的重要错误,现已更正。

----------------------------------

为简化问题,仅讨论灰度图像的直方图均衡。

设输入图像为二元函数 f(x, y) ,输出图像为二元函数 g(x, y),显然二者尺寸相等。我们知道,那些灰度值分布较为平均的图像,通常对比度较高。比如,下图中 g 的灰度较分散(有白的有灰的有黑的),所以对比度较高;f 的灰度很集中,所以显得灰蒙蒙的。直方图均衡的目的,就是对 f 进行处理产生 g,使得 g 的灰度值比 f 更分散。

怎么做呢?如果我们有一个恰当的 灰度映射函数 T就好了,它能把输入灰度值 r 映射为输出灰度值为 s,即

equation?tex=s+%3D+T%28r%29 。假设图像的灰度值连续,由黑到白取值为1~L中的实数。灰度映射函数 T 可能长这样:

equation?tex=s+%3D+T%28r%29+%3D+%5Cbegin%7Bcases%7D+1%2C+%26r+%5Cin+%5B1%2C+%5Cfrac%7BL%7D%7B4%7D%5D+%5Ccr+2r+-+%5Cfrac%7BL%7D%7B2%7D%2C+%26r+%5Cin+%5B%5Cfrac%7BL%7D%7B4%7D%2C+%5Cfrac%7B3L%7D%7B4%7D%5D+%5Ccr+L%2C+%26r+%5Cin+%5B%5Cfrac%7B3L%7D%7B4%7D+%2C+L%5D+%5Cend%7Bcases%7D

用图形来表达就是:

对图像施以该灰度映射,图示如下:

看起来不错。不过——

有一句老话叫做“具体问题具体分析”,这告诉我们:决不可能使用某个特定的 T 一劳永逸。那么,有没有办法“自动地”根据实际情况生成 T 呢?答案是肯定的。请接着往下看。

设任意灰度值 t 在 f 中出现的概率为函数

equation?tex=p_f%28t%29 ,在 g 中出现的概率为函数

equation?tex=p_g%28t%29 。这两个函数均可以直接由图像统计出来。然后,我们定义两个函数

equation?tex=S_f%28n%29+%3D+%5Cint_%7B1%7D%5E%7Bn%7Dp_f%28t%29dt (意义:f 中灰度值小于 n 的概率)

以及

equation?tex=S_g%28n%29+%3D+%5Cint_%7B1%7D%5E%7Bn%7Dp_g%28t%29dt (意义:g 中灰度值小于 n 的概率)

那么必然有

equation?tex=S_f%28r%29+%3D+S_g%5BT%28r%29%5D+%5CLeftrightarrow+S_f%28r%29+%3D+S_g%28s%29+%5C+%5C+%5Ccdots+%5Ccdots%281%29

为什么呢?这是因为我们必须保证:原本比 r 暗的灰度,在变换后依然比 s 暗;原本比 r 亮的灰度,在变换后依然比 s 亮。如果连这一点都不能保证,那么输出的图像就会黑白颠倒一团糟。

比方说,若

equation?tex=r+%3D+1%2F3 ,变换后

equation?tex=s+%3D+T%28r%29+%3D+5%2F2。那么,f 中灰度值小于1/3的像素数目 == g 中灰度值小于5/2的像素数目,用频率估算概率,也就是 f 中灰度值小于1/3的概率 == g 中灰度值小于5/2的概率。还不懂?看图!

弄清楚 (1) 式的含义后,对其微分就得到下面的式子:

equation?tex=p_f%28r%29+%5Ccdot+dr+%3D+p_g%28s%29+%5Ccdot+ds+%5C+%5C+%5Ccdots%5Ccdots+%282%29

再接下来,如果我们令变换

equation?tex=T%28r%29+%3D+L+%5Ccdot+S_f%28r%29 ,那么:

equation?tex=%5Cbegin%7Balign%7D+s+%26%3D+T%28r%29+%5C%5C+%26%3D+L+%5Ccdot+S_f%28r%29%5C%5C+%26%3D+L+%5Ccdot+%5Cint_%7B1%7D%5E%7Br%7Dp_f%28t%29dt+%5C%5C+%5CRightarrow+%5Cfrac%7Bds%7D%7Bdr%7D+%26%3D+L+%5Ccdot+p_f%28r%29+%5C+%5C+%5Ccdots+%5Ccdots+%283%29+%5Cend%7Balign%7D

其中的第三行,t 是积分变量,真正的自变量是积分上限 r。

由 (2)(3) 得

equation?tex=p_g%28s%29+%3D+1%2FL

奇迹出现了:g 中各灰度出现概率相等,为常数1/L。也就是说,各灰度被完全均摊了!

于是我们知道,无论输入图像是什么,只要统计它之中各灰度值出现的概率

equation?tex=p_f ,然后生成映射函数

equation?tex=T%28r%29+%3D+L+%5Ccdot+S_f%28r%29+%3D+L+%5Ccdot+%5Cint_%7B1%7D%5E%7Br%7D+p_f%28t%29dt ,剩下的事就是逐个映射图中灰度即可。

现实中数字图像的灰度值是离散的,对此我们只需略作修改。假设图像最多含有 L 种灰度级,由黑到白依次编号为

equation?tex=1%2C+2%2C+%5Ccdots%2C+L 。每个灰度级在 f 中出现的概率依次为

equation?tex=p_f%281%29%2C+p_f%282%29%2C+%5Ccdots%2C+p_f%28L%29 ,在 g 中出现的概率依次为

equation?tex=p_g%281%29%2C+p_g%282%29%2C+%5Ccdots%2C+p_g%28L%29

函数定义改为:

equation?tex=S_f%28n%29+%3D+%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%7Bp_f%28i%29%7D 以及

equation?tex=S_g%28n%29+%3D+%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%7Bp_g%28i%29%7D ,其余同理。

可惜的是,在灰度值离散的情况下,r 和 s 均为整数,我们必须对映射结果取整,这导致 g 中各灰度值出现的概率未必相等。但是可以确定的是: g 的灰度级在一定程度上比 f 更分散了。

至于直方图匹配呢,原理相同,只是多一步而已,详见图像处理教材,在此不再赘述。

参考资料:

Digital Image Processing (3rd Edition), R.C. Gonzalez and R.E. Woods

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值