图⽚直⽅图均衡化
对于输⼊像素点r和输出像素点s都在灰度级 [0,L-1]之间,r = 0 代表⿊⾊, r = L - 1代表⽩⾊。对于r和s的变换形式为:
r和s满⾜⼀下条件:
利⽤反函数来从s推r时,有以下定义:
r和s满⾜条件:
条件a是为了保证输出的灰度级不少于输⼊,这是为了防⽌⼆义性。条件b是为了保证输出的灰度范围和输⼊的灰度范围相同。条件a`也是为
了保证s到r 也是⼀⼀对应的,防⽌⼆义性。实验中采⽤8bit整性的像素分布,不⼀定满⾜这个情况。
在实验中会类似左边的图像,出现多个输⼊的r,输出同⼀个s值。⽽在理论的约束上应该和右图相似,r与s⼀⼀对应。
对于⼀副灰度图像,
和
分别代表输⼊图像和输出图像的像素点的概率分布,我们简称为PDF。对于已知的和满⾜公式:
(1)
直⽅图均衡化的采⽤的公式如下:
(2)
其中w是积分假变量,L-1是最⼤的灰度级。
为什么要这么做呢。由莱布尼兹准则,我们知道上限的定积分的导数是被积函数在该上限的值。
(3)
我们将的结果带⼊(1)中,
(4)
2 结论
使⽤(2)公式后,输出图像的像素点s分布是均匀的,PDF为1/(L-1)。
3 离散直⽅图均衡化采⽤公式
对于离散的直⽅图均衡化采⽤的公式为:
(5)
其中MN是总的像素点个数
编码实现
1 统计输⼊的灰度图像的像素信息
void calHistInfo(const Mat& src, vector& calVec, vector& calVecBefor,unsigned int LMax){
int width = src.cols;
int height = src.rows;
int piexl = 0;
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++) {
piexl = (int)src.at(h, w);
calVec[round(piexl)] += 1;