直方图均衡化
简介:直方图均衡化是为了让图片的像素更均匀的分布于整体灰度级,这样的图像会有高对比度的外观并展示灰色调的较大变化,丰富一幅图片灰度细节且增大动态范围。
算法原理:
- 假设输入图片灰度级为r 输出灰度级为s 两者对应函数变换关系为T( r ),我们这里需要求的就是这个变换关系。
- 因为变换关系要满足两个条件:
(a) T( r)T( r)在[0,L−1][0,L−1]上严格单调递增;(实际问题中像素值为整数所以要近似取整)
(b) 当0≤r≤L−10≤r≤L−1时,0≤T(r )≤L−10≤T ( r)≤L−1。
由第一个条件可知r 与s 应双向一一映射,这时就满足一个概率论的基本结论:假设 pr( r)pr( r) 和 ps( s)ps( s) 分别表示随机变量 r 和 s 的PDF,pr( r)pr(r ) 和变换 TT 已知,且 T(r )T(r ) 在定义域内连续可微,则变换后 s的PDF可由下式得到:
- 从人眼视觉特性来考虑,一幅图像的直方图如果是均匀分布的,即Ps(s)=k(归一化时k=1)时,该图像色调给人的感觉比较协调。因此将原图像直方图通过T (r )调整为均匀分布的直方图,这样修正后的图像能满足人眼视觉要求。因为归一化假定k=1则有
ds =pr(r ) dr;
由于这里像素级范围为[0:L-1]s所以上式积分前应成L-1。 - 上面对应的是连续函数,实际中应用离散函数对应为:
实现步骤:
1、计算各个灰度值出现的次数,即统计直方图.
2、用统计直方图计算各个灰度值的累积分布图,就是从1到这个灰度的所有点的个数。
3、根据累积分布图s(k)归一化计算出原来各灰度值的均衡化之后的新的值。新的灰度值=(L-1)*(s(k)/nm)。 (归一化可以放在前面进行计算)
matlab实现可见如下链接:添加链接描述