您的位置:首页 > 理论基础 > 数据结构算法

直方图匹配算法设计文档

2012-05-08 10:49 471 查看
直方图匹配算法设计文档
2011-4-26

 
1、应用背景及研究现状

图像增强的最终目的是设法改进图像的质量,使其满足各种研究的需要。目前,图像增强的技术很多,不同的增强技术可以用于不同的目的,这取决于图像研究的需要。在图像处理中,有时需要对一幅图像进行变换,使其具有某种特定的直方图形式:如使该图像与某一标准图像具有相同的直方图,或者使图像的直方图具有某一特定的函数形式,这一过程就是直方图匹配。

直方图匹配是一种行之有效的图像增强方法,是一种基于灰度映射变换的空间域图像增强方法。在图像处理前期经常要采用此方法来修正图像。在将原始图像的直方图向目标直方图做匹配映射时,常用的映射规则是单映射规则(singlemapping law,SML)和组映射规则(group mappinglaw,GML)。本文从计算机实现的角度来阐述直方图匹配方法,并结合这两种映射规则,给出了具体的实现算法,同时,对这些算法进行了分析和比较。

2、算法及数据结构描述

2.1 算法描述

灰度直方图(Histogram):是图像灰度级的函数,它表示图像中具有每种灰度级的像素的个数,反映图像中每种灰度出现的频率。

灰度直方图是灰度级函数的显示,描述的是图像中具有该灰度级图像的个数,横标标为灰度级,纵坐标为该灰度级出现的频率(像素个数)。直方图能够显示一张图像中色调的分布情况,揭示了图像中每一个亮度级别下像素出现的数量,根据这些数值所绘出的图像形态,可以初步判断图像的质量情况。

灰度直方图概括了一幅图像的灰度级内容,描述了图像中各个灰度级出现的频率,计算简单。

直方图只反映该图像中不同灰度值出现的次数,而未反映某一灰度值像素所在的位置。也就是说,它只包含了该图像中某一灰度值的像素出现的概率,而丢失了其所在位置的信息。

每一幅图像都对应唯一的直方图,但同样的直方图可对应不同的图像。

直方图匹配是一种应用于灰度直方图调整的图像增强方法,通过将原始图像的直方图转换为指定的直方图,可用来校正因拍摄亮度或者传感器的变化来导致的图像差异。

2.2 数据结构描述

直方图匹配方法主要是以直方图均衡化为基础,其基本思路如下:

(1)首先对原始图像进行直方图均衡化:

     (1)

(2)然后再对目标图像进行直方图均衡化:

          (2)

(3)这样, 和 就具有同样的均匀密度,即;建立均衡化直方图的对应关系,并将原图像像素灰度对应映射到新的灰度级,得到规定的直方图。

常用的建立映射方法有SML规则法和GML规则法。

(1)   SML规则

寻找 和 使下式达到极小化,即

      

然后将 对应到 去,完成了变换。

(2)GML规则

存在一个离散整数数组 ,这个数组满足:

 
寻找能使式子 的值达到最小的 ,其中 的求和区间为 , 的求和区间为 。

当 时,将介于0和 之间的 都映射到 中;

当 时,将介于 之间的 都映射到 中去,完成变换。

2.3 算法流程描述

本设计的算法流程图如图1所示。

 
图1 算法流程图
3、具体实现

(1)首先对图2进行直方图均衡化。

 
图 2原始图像                  图3 原图像直方图

首先计算原图像的灰度直方图H(如图3所示),然后对其进行概率统计:pH=H/(m*n),再求出累加概率pH’,最后重新做映射变换,得到:H’=pH’*255,由此得到调整后的直方图,完成原图像的直方图均衡化。

算法如下:

for (i=0;i<nHeight;i++)
{
for (j=0;j<nWidth;j++)
{
lpSrc=(unsigned char *)buffer+i*lineByte+j;
H[*(lpSrc)]++;
}
}
for (i=0;i<256;i++)
{
pH[i]=(H[i]*1.0)/(nWidth*nHeight);
}
temp=pH[0];
for (i=1;i<256;i++)
{
pH[i]=pH[i]+temp;
temp=pH[i];
}
for (i=0;i<256;i++)
{
H[i]=pH[i]*255;
}

完成原图像的直方图均衡化。

(2)对图4 高斯函数图像进行均衡化

 
图4 高斯函数图像
 
高斯函数:

 
由高斯函数的图像可知,在[-5,5]之外,高斯函数的图像趋近于横坐标(即值趋近于零),所以,令数组X的取值范围为-5:step:5,其中,step=,为X的取值的步进值。这样数组 X 中共有256(0--255)个值。
然后,计算高斯函数值。由 ,求出高斯函数(数组),其中sigma取值0.7。
然后,对Gx求和,得sum。
最后,计算Gx= Gx/sum。
高斯函数均衡化算法如下:

step=(5-(-5))/255.0;
X[0]=-5;
for (i=1;i<256;i++)
{
X[i]=X[i-1]+step;
}
for (i=0;i<256;i++)
{
Gx[i]=exp(-(X[i])*(X[i])/(2*Sigma*Sigma));
sum+=Gx[i];
}
for (i=0;i<256;i++)
{
Gx[i]=Gx[i]/sum;
G[i]=Gx[i]*255;
}
(3)实现匹配

选择单映射规则,具体匹配算法如下:

for (i=0;i<256;i++)
{
for (j=0;j<256;j++)
{
if (G[j]==H[i])
{
H[i]=j;
}
}
}
选择组映射规则,具体匹配算法如下:
for (i=0;i<256;i++)
{
for (j=0;j<256;j++)
{
diff[i][j]=abs(G[i]-nH[j]);
}
}
for(i=0;i<256;i++)
{
min_value= diff [i][0];
for(j=1;j<256;j++)
if (min_value>diff[i][j])
{
min_value=diff[i][j];
endY=j;
}
if(startY!=lastStartY||endY!=lastEndY)
{
for(int k=startY;k<=endY;k++)
nH[k]=i;
lastStartY=startY;
lastEndY=endY;
startY=lastEndY+1;
}
}

(4)结果分析

原始图像经过直方图匹配所得结果如下:

  

图5  SML结果图                 图6  GML结果图

由图5和图6可知,采取两种规则都能得到较理想的效果,但采取组映射(GML)规则所得结果图更加接近于规定匹配的高斯函数的图像,而采取单映射(SML)规则所得结果图与高斯函数的图像相差较大。

单映射规则虽然实现起来比较简单直观,但在实际处理时仍存在不可忽视的取整误差。直方图匹配采取组映射(GML)规则要比单映射(SML)规则所得的效果好。

4、结论

本文详细阐述了在图像增强中常用的直方图匹配的算法思想以及具体实现,采取单映射和组映射规则的直方图变换方法,通过程序算法实现了图像增强的过程并给出了相应的结果。本文只选取了特定函数与图像进行匹配,实验表明本文所介绍的算法对于图像之间的匹配同样适用。

直方图匹配虽是在直方图均衡化的基础上进行计算的,但相比直方图均衡却有着无可比拟的优点。直方图均衡化对图像时自动增强,且效果不易控制,得到的是全图增强的结果;而直方图匹配是有选择地增强,虽须给定需要的直方图,但可得到特定增强的结果。

5、参考文献

[1]楼竞,吴访升,刘栋梁,灰度直方图规定化实现方法的分析,江苏技术师范学院学报,2004.12第10卷第4期

[2]吴铁洲,熊才权,直方图匹配图像增强技术的算法研究与实现,湖北工业大学学报,2005.4第20卷第2期
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息