)算法思想
灰度均衡也称直方图均衡,目的是通过点运算使输入转换为在每一灰度级上都有相同的像素点数的输出图像(即输出的直方图是平的)。这对于在进行图像比较或分割之前将图像转化为一级的格式是十分有效的。
按照图像的概率密度函数(PDF,归一化带单位面积的直方图)的定义:
P(x) =
* H(x)(式5)
其中H(x)为直方图,A0为图像的面积,设转换前图像的概率密度函数为
Pr(r),转换后图像的概率密度函数为Ps(S),转换函数为s = f(r),由概率论知识,我们可以得到:
Ps(S) = Pr(r)*
(式6)
这样,如果想使转换后图像的概率密度函数为1(即直方图是平的)则必须满足:
Pr(r)=
(式4-5)
等式两边积分,得:
S = f(r)= ∫0 rP2(u)du =
∫0 r H(u)du (式7)
该转换式被称为图像的累积分布函数
上面的式是被归一化后推导的对于没有归一化的情况,只要求以最大的灰度值(DMax,对于灰度图就是255)即可,灰度均衡的转换式为:
DB = f (DA)=
H(u)du (式1)
对于离散图像转换式为:
DB = f(DA)=
(式8)
式中Hi为第i级灰度的像素个数。
(2)编程实现
在灰度均衡操作同样不需要改变DIB的调色板和文件夹,只要把指向DIB像素起始位置的指针和DIB高度、宽度信息传递给子函数就可以完成灰度均衡变换工作,其核心代码如下:
*(lpData + lOffset)=state ; //显示灰度均衡
*(lpData + lOffset+1)=state ;
*(lpData + lOffset+2)=state ;
(3)效果图
图 4-5 灰度均衡效果图
5、图像对比度增强
- 算法思想:
在对图像均衡直方图处理以后,便可对图像进行对比度增强,进一步拉开对比度。它通过对图像的灰度值进行统计,对于比最小设定值小的则认为是有关的信息,则将它作为黑色处理,比最大设定值大的则认为是一些无关的信息,将它们去掉,而处于两者之间的,则进行对比度增强,将他们在总的灰度值里面的比例作为新的像素信息保存起来。
这个工作的主要目的是将图像的特征一步一步显现出来。
(2) 编码实现:
① 编辑菜单IDR_MAINFRAM,在菜单“预处理”中添加一子菜单项,命名为“实现图像对比度增强”,并将其ID设为ID_READY_ContrastEnhance。
- 类CFaceDetectView中添加“实现图像对比度增强”菜单项的事件处理程序,其代码如下;
lOffset = gDib.PixelOffset(i, j, gwBytesPerLine);
获取图像灰度增强函数
int state=IncreaseContrast(ZFT[k][k1], 100);
显示灰度增强后的图像
*(lpData + lOffset ) = state ;
*(lpData + lOffset+1) = state ;
*(lpData + lOffset+2) = state ;
其中IncreaseContras()函数是实现图像对比度增强的关键函数,该根据参数n来调节对比度,n越大,对比越强烈,其核心是:
如果数据很小,设置为0
if(pByte<=Low)
return 0;
获得中间数据,并进行对比增强处理
else if ((Low<pByte)&&(pByte<High))
return int(((pByte-Low)/Grad));
如果数据很大,设置为255
else
return 255;
- 效果图
图4-6 对比度增强效果图