图像灰度变换
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
效果对比图
(a) 原图
(b)以100作为阈值二值化的图
图4-3
固定阀值法
4. 双固定阀值法
1. 理论基础 相对于前面的非零取一法和固定阀值法,双 固定阀值法预先设置了两个阀值T1和T2, T1<T2,当对图像进行处理时,如果某个像 素的灰度值小于T1则置0(或者255);如果 大于T1并且小于T2时,则置255(或者置0); 如果大于T2时,则置0(或者255)。可根据 具体情况选择双固定阀值法是用0-255-0型 或是255-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;j<height;j++) for(int i=0;i<wide;i++) { //若该像素的灰度值介于两个阈值之间,这将其置为255 if(*p_data>=YuZhi1&&*p_data<=YuZhi2) *p_data=255; else *p_data=0; //否则置0 p_data++; } } if(mode==1) //255-0-255型 { for(int j=0;j<height;j++) for(int i=0;i<wide;i++) { //若该像素的灰度值介于两个阈值之间,这将其置为0 if(*p_data>=YuZhi1&&*p_data<=YuZhi2) *p_data=0; else *p_data=255; //否则置255 p_data++; } } }
根据 g ( x, y) T [ f ( x, y)] ,可以将灰度变换分为 线性变换和非线性变换。 本章中所介绍的非0元素取1法、固定阀值法、 双固定阀值法都属于非线性灰度变换。
1.二值化和阈值处理
设定某一阈值T,用T将图像的数据分成两大 部分:大于T的像素群和小于T 的像素群。这 是研究灰度变换最特殊的方法,称为图像的 二值化(binarization)。 阈值处理的操作过程是先由用户指定或通过 算法生成一个阈值,如果图像中某像素的灰 度值小于该阈值,则将该像素的灰度值设置 为0或255,否则灰度值设置为255或0。
非零元素取一法的变换函数表达式如下: 0 x<1 f(x)= 255 x>1
g 255 01 255 f
图4-1
非零元素取一法灰度变换函数
2. 实现步骤 (1)取得原图的数据区指针。 (2)每个像素依次循环,若该像素灰度值为0, 则不变;若该像素灰度值不为0,则置为255。
3. 程序代码
void HuiDuBianHuanDib::Fei0()//对图像进行非零取一运算 { LPBYTE p_data; int wide,height; //原图数据区指针 //原图长、宽 //取得原图的数据区指针
3.固定阈值法
1.理论基础 在某种意义上非零取一法也可以理解成为一 种特殊的固定阀值法,因为它的阀值默认为 1。固定阀值法就是为灰度图像f设定一个阀 值T,把灰度值小于给定阈值T的像素置为0, 大于阈值T的像素置为255,从而对灰度图像 实现二值化变换。
固定阀值法的变换函数表达式如下: 0 x<T f(x)= 255 x>T 其中T为指定的阈值。 g 255
阈值化的变换函数表达式如下: 0 x<T f(x)= 255 x>T 其中T为指定的阈值。阈值T就像个门槛,比它 大就是白,比它小就是黑。该变换函数是阶 跃函数,只需给出阈值点T即可,经过阈值 处理后的图像变成了一幅黑白二值图,阈值 处理是灰度图转二值图的一种常用方法。
2. 非零元素取一法
1. 理论基础 非零元素取一法是最基础的二值化算法。顾 名思义非0取1就是对于灰度图像f,若某像 素灰度值为0,则其灰度值不变,仍为零; 对于灰度值不为零的像素,将其像素值全部 变为255。非零元素取一法的阈值T=1。
p_data=this->GetData (); wide=this->GetWidth (); height=this->GetHeight ();
for(int j=0;j<height;j++)
for(int i=0;i<wide;i++) { if(*p_data!=0) *p_data=255; p_data++; } } //若像素值不为0 //将其置为255 //所有像素依次循环
0
T
f 255
图4-2 固定阀值法灰度变换函数
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->GetHeight (); for(int j=0;j<height;j++) for(int i=0;i<wide;i++) { if(*p_data>YuZhi) //灰度值大于给定阈值,置为255 *p_data=255; else *p_data=0; //不大于置为0 p_data++; } }
0-255-0型固定阀值法的变换函数表达式如下:
0 x<T1
其中T1、T2为指定的阈值。
x >T2 g
f(x)=
255 T1<X<T2
0 g
f 0 T1 T2 255 (a)0-255-0型灰度变换函数
f 0 T1 T2 255 (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,其余像素的灰度值置为0。 若选择方式1(255-0-255型),每个像素依次循环, 若该像素灰度值大于T1并且小于T2,则将其灰度值 置为0,其余像素的灰度值置为255。
从图像输入装置得到的图像数据,以浓淡表示, 各个像素与某一灰度值相对应。设原图像像 素的灰度值D=f(x,y),处理后图像像素的 灰度值D′=g(x,y),则灰度增强可表示为:
g ( x, y) T [ f ( x, y)]
D' T ( D) 或 要求D和D′都在图像的灰度范围之内。函数 称为灰度变换函数,它描述了输入灰度值和 输出灰度值之间的转换关系。
图像灰度变换
本章要点: 灰度变换的基本方法 二值化和阈值处理 非零元素取一法 固定阈值法 双固定阀值法
灰度变换的基本方法
图像的灰度变换(Gray-Scale Transformation,GST) 处理是图像增强处理技术中一种非常基础、直接的 空间域图像处理方法,也是图像数字化软件和图像 显示软件的一个重要组成部分。灰度变换是指根据 某种目标条件按一定变换关系逐点改变原图像中每 一个像素灰度值的方法。目的是为了改善画质,使 图像的显示效果更加清晰。灰度变换有时又被称为 图像的对比度增强或对比度拉伸。例如为了显示出 图像的细节部分或提高图像的清晰度,需要将图像 整个范围的灰度级或其中某一段(a,b)灰度级扩 展或压缩到(a′,b′),这些都要求采用灰度变 换方法。