图像分析--灰度化,二值化,反色,饱和度,对比度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/evsqiezi/article/details/7905436
 灰度化

   在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。0%的灰度RGB数值是255,255,255;1%灰度的RGB数值是253,253,253;2%灰度RGB值为250,250,250。一般有以下四种方法对彩色图像进行灰度化:   

1.分量法   

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。

如图4-1的彩色图像转为4-2三种灰度图。

 图4-1 彩色图像   (a)R分量灰度图 (b)G分量灰度图 (c)B分量灰度图   

图4-2 彩色图的三分量灰度图   

2.最大值法   

将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。   f(i,j)=max(R(i,j),G(i,j),B(i,j))   

3.平均值法   

将彩色图像中的三分量亮度求平均得到一个灰度图。   f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3   

4.加权平均法   

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。   f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))

二值化

  

全局二值化
  一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。

  全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。

  局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。

局部自适应二值化
  局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。

  局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。

反色

    反色的实际含义是将RGB值反转。若颜色的量化级别是256,则新图的RGB值为255减去原图的RGB值。这里针对的是所有图,包括真彩图、带调色板的彩色图(又称为伪彩色图)、和灰度图。针对不同种类有不同的处理。先看看真彩图。我们知道真彩图不带调色板,每个象素用3个字节,表示RGB三个分量。所以处理很简单,把反转后的RGB值写入新图即可,比如一个点的颜色为(0,0,0),反色后为(255,255,255)。再来看看带调色板的彩色图,我们知道位图中的数据只是对应调色板中的一个索引值,我们只需要将调色板中的颜色反转,形成新调色板,而位图数据不用动,就能够实现反转。

灰度图是一种特殊的伪彩色图,只不过调色板中的RGB都是一样的而已。所以反转的处理和上面讲的一样。

求区域内R,G,B的各自平均值

求R,G,B的平均值在图像处理上有很大的意义,代码如下:

void GetRGBInfo(CPoint point,CPoint pStart ,int& nBData,int& nGData ,int & nRData)
{
	int nLeft,nRight,nUp,nBottom;
	nLeft = point.x<pStart.x?point.x:pStart.x;
	nRight = point.x>pStart.x?point.x:pStart.x;
    nBottom = point.y<pStart.y?point.y:pStart.y;
 	nUp = point.y>pStart.y?point.y:pStart.y;
	int nNum = 0;
	long nValueR=0;
	long nValueG=0;
	long nValueB=0;
 

	for (int i=nBottom;i<nUp;i++)
	{
		for (int j=nLeft;j<nRight;j++)
		{
			nValueR+= g_pImageSrc[i*m_nPicWidth*3+j*3];
		     nValueG+= g_pImageSrc[i*m_nPicWidth*3+j*3+1];
		 	nValueB+= g_pImageSrc[i*m_nPicWidth*3+j*3+2];
			nNum++;
		}
	}
	if (nNum!=0)
	{
		nBData = nValueR/nNum;
		nGData = nValueG/nNum;
		nRData = nValueB/nNum;
	}

}

 饱和度

        所谓的饱和度,指的其实是色彩的纯度,纯度越高,表现越鲜明,纯度较低,表现则较黯淡,色饱和度表示光线的彩色深浅度或鲜艳度,取决于彩色中的白色光含量,白光含量越高,即彩色光含量就越低,色彩饱和度即越低,反之亦然。其数值为百分比,介于0 - 100% 之间。纯白光的色彩饱和度为0,而纯彩色光的饱和度则为100%。

对比度

        对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,差异范围越小代表对比越小,好的对比率120:1就可容易地显示生动、丰富的色彩,当对比率高达300:1时,便可支持各阶的颜色。但对比率遭受和亮度相同的困境,现今尚无一套有效又公正的标准来衡量对比率,所以最好的辨识方式还是依靠使用者眼睛。

没有更多推荐了,返回首页