VC 6.0在灰度数字图像增强处理中的应用

2008-04-09 04:10:42来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  摘 要 该文介绍了用直方图均衡化对灰度图像进行灰度映射,从而达到使图像增强的目的。利用VC 6.0执行效率高,可继承、封装、移植等成熟的软件技术,对直方图均衡化算法进行实现。实验表明,该程序可以快速、准确地对灰度图像进行灰度变换,达到了使图像对比度增强,改善图像质量的预期目的。

  关键字 Visual C ;图像增强;直方图均衡;DIB 文件

  由于噪声、光照等外界环境或设备本身的原因,通常我们所获取的原始数字图像质量不是很高,因此在对图像进行边缘检测、图像分割等操作之前,一般都需要对原始数字图像进行增强处理。图像增强主要有两方面应用,一方面是改善图像的视觉效果,另一方面也能提高边缘检测或图像分割的质量,突出图像的特征,便于计算机更有效地对图像进行识别和分析。

  图像增强是图像处理最关键的研究问题之一,图像增强按作用域可分为两类,即空域处理和频域处理。空域处理是直接对图像进行处理,而频域处理则是在图像的某个变化域内,对图像的变换系数进行运算,然后通过逆变换获得图像增强效果。本文主要对空域增强法中的直方图均衡进行分析并用VC 6.0进行算法实现。当前图像处理在算法实现中主要应用Matlab 仿真工具,但Matlab运行效率较低,且可移植性和实用性均不太理想。与Java和C#等其他高级语言相比,VC 在程序运行效率、内存使用的可控性和编程的灵活性上均具有较大的优势,因此本文采用VC 6.0 集成开发环境,以达到算法快速有效地执行,同时增强了算法的可移植性。

  灰度图像直方图均衡化的描述

  1、灰度图像直方图处理方法

  图像的直方图是图像处理中一种十分重要且实用的工具,它概括了一副图像的灰度级内容。从数学上来说图像直方图是图像各灰度值统计特性与图像灰度值的函数,它统计一幅图像中各个灰度级出现的次数或概率。实际上,灰度图像直方图是一个离散函数:

  pf(fk)=nk/n k=0,1,…,L-1

  其中fk为图像f(x,y)的第k级灰度,nk是图像f(x,y)中具有灰度值fk的象素个数,n是图像象素总数,L是图像的灰度级数。因为pf(fk)给出了对各个fk出现概率的一个统计,所以直方图提供了图像的灰度值分布情况。在灰度直方图坐标系中,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像各个像素点出现的次数或概率。在对灰度数字图像的增强处理方法中,灰度均衡化和灰度规定化应用较为广泛,但后者需要根据具体的图像人为规定好适当的期望直方图才能得到满意的效果,如果期望直方图规定不当则处理效果会很差,因此后者的通用性不好。而前者在处理时只需要将当前的灰度分布重新均衡地分布于整个灰度区间即可,虽然对于某一幅特定的图象处理效果可能不及灰度规定化,但通用性却要好的多,对任意图象均可获得相当不错的处理效果。

  2、灰度图像直方图均衡化算法分析

  直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):

  (1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。

  (2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。

  累计分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为:

  gk = EQ(fk) = (ni/n) = pf(fi) ,

  
   (k=0,1,2,……,L-1)

  上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。
  算法的实现

  利用VC 实现的灰度图像均衡化处理的流程如下:

  

  根据上述的算法描述,要实现灰度图像的直方图均衡化必须首先统计原图像的各级灰度值,在程序中定义了一个数组lDegreeCount[256]来统计原图像的各级灰度值,然后对得到的灰度值做灰度映射,将映射后的结果存到一个新的灰度映射关系数组bMaptable[256]中,根据这个数组就可以确定出源图象的某个灰度级经过变换后对应于哪个新的灰度级,最后将变换后的结果保存到DIB中。经过这样的处理后,就可把源图像中密集分布的灰度值映射到经过均衡化后的新灰度级上,增加了对比度,改善了视觉效果。

  实现直方图均衡化的函数主要代码如下:

BOOL WINAPI Equalize(LPSTR lpDIBs, LONG lWidth, LONG lHeight)
{
 unsigned char* lpSource; // 指向源图像的指针
 LONG lTmp; // 临时变量
 LONG t,s; // 循环变量
 BYTE bMaptable[256]; // 灰度映射表
 LONG lDegreeCount[256]; // 灰度计数表

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:VC下通过直方图变换对图像进行有效增强

下一篇:VisualC 6.0实现多层图像合成

热门词条
热门标签