图像处理技术
机器视觉系统中,视觉信息的处理技术主要依赖于图像处理方法,它包括图像增强、数据编码和传输、平滑、边缘锐化、分割、特征抽取、图像识别与理解等内容。经过这些处理后,输出图像的质量得到相当程度的改善,既改善了图像的视觉效果,又便于计算机对图像进行分析、处理和识别。
3.3.1 图像的增强
图像增强处理技术一直是图像处理领域一类非常重要的基本处理技术。通过采取适当的增强处理可以将原本模糊不清甚至根本无法分辨的原始图片处理成清楚、明晰的富含大量有用信息的可使用图像,因此此类图像处理技术在医学、遥感、微生物、刑侦以及军事等诸多领域得到广泛应用。图像的增强用于调整图像的对比度,突出图像中的重要细节,改善视觉质量。通常采用灰度直方图修改技术进行图像增强。
在空间域对图像进行增强处理的方式有许多种,如增强对比度和动态范围压缩等等,但这些处理方式都是针对原始图像的每一个像素直接对其灰度进行处理的,其处理过程主要是通过增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现的。通过改变选用的增强函数的解析表达式就可以得到不同的处理效果,这类处理方法比较灵活方便,处理效果也不错,但对于某些灰度分布很密集或对比度很弱的图像,虽然也能起到一定的增强效果但并不明显。对于这种情况就可以采用本文提出的灰度直方图变换方法将原始图像密集的灰度分布变得比较疏散,从而拉大图像的对比度并在视觉上达到明显增强的效果,
使一些原本不易观察到的细节能变得清晰可辨。
图像的灰度直方图是表示一幅图像灰度分布情况的统计特性图表,与对比度紧密相连。
通常,在计算机中表示的一幅二维数字图像可表示为一个矩阵,其矩阵中的元素是位于相应坐标位置的图像灰度值,是离散化的整数,一般取0,1,……, 255。这主要是因为计算机中的一个字节所表示的数值范围是0~255。另外,人眼也只能分辨32个左右的灰度级。所以,用一个字节表示灰度即可。
图像的灰度变换处理是通过改变原始图像各像素在各灰度级上的概率分布来实现的。通过对图像的灰度值进行统计可以得到一个一维离散的图像灰度统计直方图函数p(sk)=nk/n(这里k=0,1,2……L-1),该式表示在第k个灰度级上的像素个数nk占全部像素总数n的比例,p(sk)则给出了对sk出现概率的一个估计。因此该直方图函数实际是图像的各灰度级的分布情况的反映,换句话说也就是给出了该幅图像所有灰度值的整体描述。通过该函数可以清楚地了解到图像对应的
动态范围情况,可以了解到图像灰度的主要集中范围。因此可以通过图像增强程序的干预来改变直方图的灰度分布状况,使灰度均匀地或是按预期目标分布于整个灰度范围空间,从而达到增强图像对比度的效果。这种方法是基于数理统计和概率论的,比直接在空间域对原始图像采取对比度增强效果要好得多。在实际应用中直方图的变换主要有均衡变换和规定变换两种,而后者又可根据灰度级映射规则的不同分单映射规则和组映射规则两种。
一、直方图均衡化处理
直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。对图像空间域点的增强过程是通过增强函数t=EH(s)来完成的,t、s分别为目标图像和原始图像上的像素点(x, y),在进行均衡化处理时,增强函数EH需要满足两个条件:增强函数EH(s)在0≤s≤L-1的范围内是一个单调递增函数,这个条件保证了在增强处理时没有打乱原始图像的灰度排列次序; 另一个需要满足的条件是对于0≤s≤L-1应当有0≤EH(s)≤L-1,它保证了变换过程中灰度值的动态范围的一致性。同样的,对于反变换过程s=EH-
1(t),在0≤t≤1时也必须满足上述两个条件。累计分布函数(cumulative直条图和直方图图片
distribution function,CDF)就是满足上述条件的一种,通过该函数可以完成s到t的均匀分布转换。此时的增强转换方程为:
tk = EH(sk)=∑(ni/n)=∑ps(si),(k=0,1,2……L-1)上述求和区间为0到k,根据该方程可以由原图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布tk,按式tk=[(N-1)* tk+0.5]对其取整并得出源灰度sk到tk的灰度映射关系,其中N为灰度的级数。重复上述步骤,得到所有的源图像各灰度级到目标图像各灰度级的映射关系,再按照新的映射关系对源图像各点像素进行灰度转换,即可
完成对源图的直方图均衡化。下面是按照上述算法实现的部分关键程序代码。
首先对原始图像的各像素点的灰度情况进行统计计算。对于24位BMP图像,图像阵列是从第54字节开始的,每像素按R、G、B的顺序占3个字节。
for (DWORD i=54; i
ns_r[m_cpBuffer[i]]++; //ns_r[k]为k灰度级像素数,m_cpBuffer[i]为当前的灰度值
i++;
ns_g[m_cpBuffer[i]]++; //ns_g为G分量的统计计数
i++;
ns_b[m_cpBuffer[i]]++; //ns_b为B分量的统计计数
}
for (i=0; i<256; i++) ;//计算R、G、B三分量的直方图分布
{
ps_r[i]=ns_r[i]/((m_dwFileLen-54)/3.0f); //ps_r[i]为R分量中i灰度
级出现的概率
ps_g[i]=ns_g[i]/((m_dwFileLen-54)/3.0f); //ps_b[i]为G分量中i灰度
级出现的概率
ps_b[i]=ns_b[i]/((m_dwFileLen-54)/3.0f); //ps_b[i]为B分量中i灰度
级出现的概率
}
然后计算R、G、B三分量各灰度级的累计直方图分布,并对其进行取整以得出源和目标图像灰度之间的映射关系:
for (i=0; i<256; i++)
{ //计算累计直方图分布
temp_r[i]=temp_r[i-1]+ps_r[i];
temp_g[i]=temp_g[i-1]+ps_g[i];
temp_b[i]=temp_b[i-1]+ps_b[i]; //累计分布取整,ns_r[]、ns_g[]、ns_b[]保存有计算出来的灰
度映射关系
ns_r[i]=(int)(255.0f*temp_r[i]+0.5f);
ns_g[i]=(int)(255.0f*temp_g[i]+0.5f);
ns_b[i]=(int)(255.0f*temp_b[i]+0.5f);
}
最后按照计算出来的映射关系,把原图的原始灰度值映射到经过均衡化的新灰度级上。从实验结果可以看出原始图像太暗,根本看不清细节,而处理过的图像则比较清晰:
for (i=54; i
{
m_cpBuffer[i]=ns_r[m_cpBuffer[i]]; //对R分量进行灰度映射(均衡化)
i++;
m_cpBuffer[i]=ns_g[m_cpBuffer[i]]; //对G分量进行灰度映射(均衡化)
i++;
m_cpBuffer[i]=ns_b[m_cpBuffer[i]]; //对B分量进行灰度映射(均衡化)
}
二、单映射规则的直方图规定化处理
前面的直方图均衡化处理方法从实验效果看还是很不错的,从实现算法上也可以看出其优点主要在于能自动增强整幅图像的对比度,但具体的增强效果也因此不易控制,只能得到全局均衡化处理的直方图。在科研和工程应用中往往要根据不同的要求得到特定形状的直方图分布以有选择的对某灰度范围进行局部的对比度增强,此时可以采用对直方图的规定化处理,通过选择合适的规定化函数取得期望的效
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论