《图像灰度变换》由会员分享,可在线阅读,更多相关《图像灰度变换(22页珍藏版)》请在金锄头文库上搜索。
1、第4章 图像灰度变换,本章要点: 灰度变换的基本方法 二值化和阈值处理 灰度的线性变换 窗口灰度变换处理 分段线性变换 灰度直方图 灰度分布均衡化 灰度匹配变换,4.1灰度变换的基本方法,图像的灰度变换(Gray-Scale Transformation,GST) 处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。灰度变换有时又被称为图像的对比度增强或对比度拉伸。例如为了显示出图像的细节部分或提高图像的
2、清晰度,需要将图像整个范围的灰度级或其中某一段(a,b)灰度级扩展或压缩到(a,b),这些都要求采用灰度变换方法。,从图像输入装置得到的图像数据,以浓淡表示,各个像素与某一灰度值相对应。设原图像像素的灰度值D=f(x,y),处理后图像像素的灰度值D=g(x,y),则灰度增强可表示为: 或 要求D和D都在图像的灰度范围之内。函数称为灰度变换函数,它描述了输入灰度值和输出灰度值之间的转换关系。,根据 ,可以将灰度变换分为线性变换和非线性变换。本章中所介绍的非0元素取1法、固定阀值法、双固定阀值法都属于非线性灰度变换。,4.2 二值化和阈值处理,设定某一阈值T,用T将图像的数据分成两大部分:大于T的
3、像素群和小于T 的像素群。这是研究灰度变换最特殊的方法,称为图像的二值化(binarization)。 阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。,阈值化的变换函数表达式如下: 0 xT其中T为指定的阈值。阈值T就像个门槛,比它大就是白,比它小就是黑。该变换函数是阶跃函数,只需给出阈值点T即可,经过阈值处理后的图像变成了一幅黑白二值图,阈值处理是灰度图转二值图的一种常用方法。,4.2.1 非零元素取一法,1. 理论基础 非零元素取一法是最基础的二值化算法。顾名思义非0取1就是对于灰
4、度图像f,若某像素灰度值为0,则其灰度值不变,仍为零;对于灰度值不为零的像素,将其像素值全部变为255。非零元素取一法的阈值T=1。,非零元素取一法的变换函数表达式如下: 0 x1 图4-1 非零元素取一法灰度变换函数,2. 实现步骤(1)取得原图的数据区指针。(2)每个像素依次循环,若该像素灰度值为0,则不变;若该像素灰度值不为0,则置为255。,3. 程序代码,void HuiDuBianHuanDib:Fei0()/对图像进行非零取一运算LPBYTE p_data; /原图数据区指针int wide,height; /原图长、宽p_data=this-GetData (); /取得原图的
5、数据区指针wide=this-GetWidth ();height=this-GetHeight ();for(int j=0;jheight;j+)for(int i=0;iwide;i+) /所有像素依次循环 if(*p_data!=0) /若像素值不为0 *p_data=255; /将其置为255 p_data+; ,4.2.2固定阈值法,1.理论基础 在某种意义上非零取一法也可以理解成为一种特殊的固定阀值法,因为它的阀值默认为1。固定阀值法就是为灰度图像f设定一个阀值T,把灰度值小于给定阈值T的像素置为0,大于阈值T的像素置为255,从而对灰度图像实现二值化变换。,图4-2 固定阀值法
6、灰度变换函数,固定阀值法的变换函数表达式如下: 0 xT 其中T为指定的阈值。 g 255 f 0 T 255,2. 实现步骤1)取得原图的数据区指针。2)通过对话框输入阈值T。3)所有像素依次循环,若像素灰度值小于T,则将该像素置为0;否则置为255。,3.编程代码void HuiDuBianHuanDib:GuDing(int YuZhi)/固定阀值运算LPBYTE p_data; /原图数据区指针int wide,height; /原图长、宽p_data=this-GetData (); /取得原图的数据区指针wide=this-GetWidth ();height=this-GetHe
7、ight ();for(int j=0;jheight;j+)for(int i=0;iYuZhi) /灰度值大于给定阈值,置为255 *p_data=255;else *p_data=0; /不大于置为0p_data+; ,效果对比图 (a) 原图 (b)以100作为阈值二值化的图 图4-3 固定阀值法,4.2.3 双固定阀值法,1 理论基础 相对于前面的非零取一法和固定阀值法,双固定阀值法预先设置了两个阀值T1和T2,T1T2,当对图像进行处理时,如果某个像素的灰度值小于T1则置0(或者255);如果大于T1并且小于T2时,则置255(或者置0);如果大于T2时,则置0(或者255)。可根
8、据具体情况选择双固定阀值法是用0-255-0型或是255-0-255型。,0-255-0型固定阀值法的变换函数表达式如下:,0 xT1 f(x)= 255 T1XT2 g g f f 0 T1 T2 255 0 T1 T2 255(a)0-255-0型灰度变换函数 (b)255-0-255型灰度变换函数 图4-4双固定阀值法,2. 实现步骤 1)取得原图数据区指针 2)通过对话框输入阈值1(T1)和阈值2(T2),并选择方式(0-255-0)型或(255-0-255)型。 3)若选择方式0(0-255-0型),每个像素依次循环,若该像素灰度值大于T1并且小于T2,则将其灰度值置为255,其余像
9、素的灰度值置为0。 若选择方式1(255-0-255型),每个像素依次循环,若该像素灰度值大于T1并且小于T2,则将其灰度值置为0,其余像素的灰度值置为255。,3程序代码 Void HuiDuBianHuanDib:ShuangYu(int YuZhi1,int YuZhi2,int mode)LPBYTE p_data; /原图数据区指针int wide,height; /原图长、宽p_data=this-GetData ();wide=this-GetWidth ();height=this-GetHeight ();if(mode=0) /0-255-0型,for(int j=0;jheight;j+) for(int i=0;i=YuZhi1&*p_data=YuZhi2) *p_data=255;else*p_data=0; /否则置0 p_data+; if(mode=1) /255-0-255型for(int j=0;jheight;j+)for(int i=0;i=YuZhi1&*p_data=YuZhi2) *p_data=0;else*p_data=255; /否则置255 p_data+; ,