Matlab图像锐化处理及边缘检测.docx

上传人:b****7 文档编号:15756724 上传时间:2023-07-07 格式:DOCX 页数:55 大小:379.55KB
下载 相关 举报
Matlab图像锐化处理及边缘检测.docx_第1页
第1页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第2页
第2页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第3页
第3页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第4页
第4页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第5页
第5页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第6页
第6页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第7页
第7页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第8页
第8页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第9页
第9页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第10页
第10页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第11页
第11页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第12页
第12页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第13页
第13页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第14页
第14页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第15页
第15页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第16页
第16页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第17页
第17页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第18页
第18页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第19页
第19页 / 共55页
Matlab图像锐化处理及边缘检测.docx_第20页
第20页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Matlab图像锐化处理及边缘检测.docx

《Matlab图像锐化处理及边缘检测.docx》由会员分享,可在线阅读,更多相关《Matlab图像锐化处理及边缘检测.docx(55页珍藏版)》请在冰点文库上搜索。

Matlab图像锐化处理及边缘检测.docx

Matlab图像锐化处理及边缘检测

Matlab图像锐化处理及边缘检测

本章要点:

图像边缘锐化的基本方法

微分运算

梯度锐化

边缘检测

6.1图像边缘锐化的基本方法

物体的边缘是以图像局部特性不连续性的形式出现。

本质上边缘常意味着一个区域的终结和另一个区域的开始。

图像边缘信息在图像分析和人的视觉中都是十分重要的,是图像识别中提取图像特征的一个重要特性。

图像的边缘有方向和幅度两个特性。

通常,延边缘走向的像素变化平缓,而垂直于边缘走向的像素变化剧烈。

边缘的描述包含以下几个方面:

(1)边缘点——它两边像素的灰度值有显著的不同。

边缘点也存在于这样一对邻点之间即一个在较亮的区域内部,另一个在外部。

(2)边缘法线方向——在某点灰度变化最剧烈的方向,与边缘方向垂直。

(3)边缘方向——与边缘法线方向垂直,是目标边界的切线方向。

(4)边缘位置——边缘所在的坐标位置。

(5)边缘强度——沿边缘法线方向图像局部的变化强度的量度。

粗略地区分边缘种类可以有两种,其一是阶跃状边缘,它两边像素的灰度值有显著的不同,其二是屋顶状边缘,它位于灰度值从增加到减少的变化转折点。

这些变化分别对应景物中不同的物理状态。

边缘是图像上灰度变化比较剧烈的地方,如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级的变化带。

对这种变化最有用的两个特征是灰度的变化率和方向,在灰度变化突变处进行微分,将产生高值。

经典的边缘提取方法是考虑图像的每个像素在某个领域内的变化,利用边缘邻近一阶或二阶方向导数变化规律,来检测边缘。

图像灰度值的显著变化可以用一阶差分替代一阶微分的梯度来表示,它们分别以梯度向量的幅度和方向来表示。

因此图像中陡峭边缘的梯度值将是很大的;那些灰度变化平缓的地方,梯度值是比较小的;而那些灰度值相同的地方,梯度值将为零。

图像经过梯度运算能灵敏地检测出边界线,这种微分边缘检测算子运算简单易行,但有方向性。

利用计算机进行图像锐化处理有两个目的,一是与柔化处理相反,增强图像边缘,使模糊的图像变得更加清晰起来,颜色变得鲜明突出,图像的质量有所改善,产生更适合人观察和识别的图像,本章的梯度锐化就是介绍这方面的内容。

二是希望经过锐化处理后,目标物体的边缘鲜明,以便于计算机提取目标物体的边界、对图像进行分割、目标区域识别、区域形状提取等,为图像理解和分析打下基础,目前它已成为机器视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位,本章的边缘检测算子就是介绍这方面的内容。

与图像平滑处理相对应,图像锐化也可以分为空间域图像锐化法和空间频率域图像锐化法两大类型。

空间频率域图像锐化的方法将在第九章介绍,本章介绍边缘增强及边缘检测的方法,基于空间域处理,为分割及目标物体特征提取打下基础。

6.2微分运算

边缘是由相邻域灰度级不同像素点构成的,若想增强边缘,就应该突出相邻点间灰度级的变化。

如下图所示,不难发现原图中左边暗,右边亮,中间存在着一条明显的边界。

001255255255255

111254253254254

000255255253253

110254254254254

注意:

由于计算机显示屏幕的坐标原点在视窗的左上角,显示屏幕的坐标系如图6-1所示。

(0,0)x

f(x,y)

y

图6-1显示屏幕的坐标系

为了与f(x,y)表示法相一致,图像f(i,j)中的i代表列,j代表行。

如果用右列减去左列,即每一个像素的值为:

G(i,j)=f(i,j)-f(i-1,j)

结果如下:

01254000

00253-110

002550-20

0-1254000

可以看出,第3列比其他列的灰度值高很多,在边界附近,灰度值有明显的跳变,人眼观察时,就能发现一条很明显的亮边;在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0,区域都很暗。

这样,G(i,j)=f(i,j)-f(i-1,j)就起到了垂直边沿检测的作用。

如对于上面那幅图像转置,得到如下图像数据:

0101

0101

1100

255254255254

255253255254

255254253254

255254253254

该边缘是水平方向的,这时如果还用左列减去右列就得不到边界数据,必须是下一行减去上一行,即每一个像素的值为:

G(i,j)=-f(i,j-1)+f(i,j),图像上得到一条很明显的亮边。

这就是一种边沿检测器,它在数学上的涵义是一种基于梯度的滤波器,又称边沿算子,梯度是有方向的,和边沿的方向总是正交(垂直)的。

图像灰度的变化情况可以用灰度分布的梯度来反映。

图像处理中最常用的微分方法是求梯度。

对于图像f(i,j),它在点(i,j)处的梯度是一个矢量,定义为:

(6-1)

其方向导数在边缘法线方向上取得局部最大值。

怎样求f(i,j)梯度的局部最大值和方向呢?

我们知道f(i,j)沿方向r的梯度为:

(6-2)

的最大值条件是

=0

即:

=0(6-3)

梯度是向量,各向同性。

梯度方向对应于f(i,j)最大变化率方向上,即

梯度最大值G=

=

(6-4)

为了减少计算量而用G=

(6-5)

梯度幅度比例于邻像素的灰度级,在灰度陡变区域,梯度值大,在灰度相似区,梯度值小,在灰度级为常数区,梯度为零。

因此,微分运算应用在图像上,可使图像的轮廓清晰。

本节介绍的微分运算有:

纵向微分运算;

横向微分运算;

双方向一次微分运算。

6.2.1纵向微分运算

1.理论基础

对灰度图像在纵方向进行微分实现了将图像向左平移一个像素,再用原图像减去平移后图像。

相减的结果反映了原图像亮度变化率的大小。

原图像中像素值保持不变的区域,相减的结果为零,即像素为黑;原图像中像素灰度值变化剧烈的区域,相减后得到较大的变化率,对应的像素很亮,而且像素灰度值差别越大,则得到的像素就越亮,所以图像的垂直边缘得到增强。

本程序对灰度图像f在纵方向或横方向进行微分,在数字处理中,微分用差分表近似,并按下式求得:

G(i,j)=f(i,j)-f(i-1,j-1)(6-6)

该算法用如下卷积核:

2.实现步骤

(1)取得原图的数据区指针。

(2)开辟一块内存缓冲区,并初始化为255。

(3)每个像素依次循环,新图像缓冲区中的当前像素的灰度值等于原图中当前像素的灰度值与其左方的像素的灰度值之差的绝对值。

(4)将缓冲区中的图像复制回原图数据区。

3.程序代码

/**************************************************************

*函数名称:

ZongXiang()

*函数类型:

void

*功能:

对图像进行纵向微分

**************************************************************/

voidWeiFenDib:

:

ZongXiang()

{

LPBYTEp_data;//原图数据区指针

intwide,height;//原图长、宽

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

LPBYTEtemp=newBYTE[wide*height];//开辟图像一缓冲区

memset(temp,255,wide*height);

for(intj=1;j

for(inti=1;i

//当前像素的灰度值等于其和左方像素灰度值之差的绝对值

temp[wide*j+i]=abs(p_data[wide*j+i]-p_data[wide*j+(i-1)]);

//将缓冲区中的图像复制回原图数据区

memcpy(p_data,temp,wide*height);

//删除缓冲区

deletetemp;

}

4.效果对比图

(a)原图(b)纵向微分运算

图6-2纵向微分运算

6.2.2横向微分运算

1.理论基础

该算法的数学表达式为:

G(i,j)=f(i,j)-f(i,j-1)+(6-7)

该算法用如下卷积核:

2。

实现步骤

(1)取得原图的数据区指针。

(2)开辟一块内存缓冲区,并初始化为255。

(3)每个像素依次循环,新图像缓冲区中的当前像素的灰度值等于原图中当前像素的灰度值与其上方的像素的灰度值之差的绝对值。

(4)将缓冲区中的图像复制回原图数据区。

3.程序代码

/**************************************************************

*函数名称:

HengXiang()

*函数类型:

void

*功能:

对图像进行横向微分

**************************************************************/

voidWeiFenDib:

:

HengXiang()

{

LPBYTEp_data;//原图数据区指针

intwide,height;//原图长、宽

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

LPBYTEtemp=newBYTE[wide*height];//开辟图像一缓冲区

memset(temp,255,wide*height);

for(intj=1;j

for(inti=1;i

//当前像素的灰度值等于其和上方像素灰度值之差的绝对值

temp[wide*j+i]=abs(p_data[wide*j+i]-p_data[wide*(j-1)+i]);

//将缓冲区中的图像复制回原图数据区

memcpy(p_data,temp,wide*height);

//删除缓冲区

deletetemp;

}

4.效果对比图

图6-3横向微分运算

6.2.3双方向一次微分运算

1.理论基础

对灰度图像f在纵方向和横方向两个方向进行微分。

该算法是同时增强水平和垂直方向的边缘。

该算法的数学表达式为:

G(i,j)=sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]+[f(i,j)-f(i-1,j)]*[f(i,j)-f(i-1,j)]}(6-8)

对于含小数的G(i,j)可四舍五入。

该算法用如下卷积核:

水平(i方向)垂直(j方向)

使用水平方向卷积核得出像素值为m,使用垂直方向卷积核得出像素值为n,该像素边界强度为:

sqrt[(m×m)+(n×n)]。

该算法是同时增强水平和垂直方向的边缘。

2.实现步骤

(1)取得原图的数据区指针。

(2)开辟一块内存缓冲区,并初始化为255。

(3)每个像素依次循环,原图中当前像素的灰度值与其左方的像素的灰度值之差的绝对值的平方,再加上当前像素的灰度值与其上方的像素的灰度值之差的绝对值的平方,所得的平方根即为新图像当前像素的灰度值。

(4)缓冲区中的图像复制回原图数据区。

3.程序代码

/**************************************************************

*函数名称:

ShuangXiang()

*函数类型:

void

*功能:

对图像进行双向一次微分

**************************************************************/

voidWeiFenDib:

:

ShuangXiang()

{

LPBYTEp_data;//原图数据区指针

intwide,height;//原图长、宽

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

LPBYTEtemp=newBYTE[wide*height];//开辟图像一缓冲区

memset(temp,255,wide*height);

for(intj=1;j

for(inti=1;i

//根据双向一次微分公式计算当前像素的灰度值

temp[wide*j+i]=(int)sqrt((p_data[wide*j+i]-p_data[wide*j+(i-1)])*(p_data[wide*j+i]

-p_data[wide*j+(i-1)])+(p_data[wide*j+i]-p_data[wide*(j-1)+i])

*(p_data[wide*j+i]-p_data[wide*(j-1)+i]));

//将缓冲区中的图像复制回原图数据区

memcpy(p_data,temp,wide*height);

//删除缓冲区

deletetemp;

}

4.处理结果

(a)原图(b)纵向微分运算

(c)横向微分运算(d)双方向一次微分运算

图6-4微分运算

6.3梯度锐化

图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,这就需要利用图像鋭化技术,使边缘变得清晰。

经过平滑的图像变得模糊的根本原因是图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算),就可以使图像变得清晰。

图像处理中最常用的微分方法是求梯度。

对于图像f(i,j),它在点(i,j)处的梯度是一个矢量,定义为:

G[f(i,j)]的梯度为:

G[f(i,j)]=[(

)2+(

)2]1/2(6-9)

  对离散图像而言,可用差分法近似上述公式,得到:

G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2(6-10)

这正是双方向一次微分运算。

为了便于编程和提高运算,在某些场合可进一步简化为:

G[f(i,j)]=|f(i,j)-f(i-1,j)|+|f(i,j)-f(i,j-1)|(6-11)

利用差分运算时,图像的第一行和第一列的像素的梯度无法求得,一般用后一行或后一列的梯度值近似代替。

微分运算可用来求信号的变化率,因而具有加强高频分量的作用,从上一节效果图上可知仅仅微分处理后的图像非常暗,不适用。

如果将前面介绍的各种微分运算应用在图像上,既要求图像的轮廓清晰,又要求保持目标物体的内部灰度不变,这就是图像梯度锐化的目的。

梯度锐化常用的方法有:

直接以梯度值代替;

辅以门限判断;

ø给边缘规定一个特定的灰度级;

ø给背景规定灰度级;

ø根据梯度二值化图像.

6.3.1直接以梯度值代替

利用双方向一次微分运算,算出梯度后让梯度值等于该点的灰度值。

即f(i,j)=G[f(i,j)]。

G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2

或G[f(i,j)]=|f(i,j)-f(i-1,j)|+|f(i,j)-f(i,j-1)|

这种方法直截了当。

但在均匀的区域,因梯度值G[f(i,j)]很小,会表现出图像很暗的特性,这在某些场合是不适宜的。

就像在前面看到的微分效果一样,除了黑色的背景,几乎看不出什么边界,所以在这里我们就不作介绍了。

6.3.2辅以门限判断

1理论基础

门限判断梯度锐化的公式如下:

G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2

G[f(i,j)]+100;G[f(i,j)]≥T

g(i,j)=

f(i,j);其它(6-12)

该方法基本上不破坏图像的背景,又可增强边缘。

这是因为G[f(i,j)]表示的是两个像素点之间灰度差的大小,也就是梯度的大小。

对于图像而言,物体和物体之间,背景和背景之间的梯度变化一般很小,灰度变化较大的地方一般集中在图像的边缘上,也就是物体和背景交接的地方,当设定一个合适的阈值T,G[f(i,j)]大于T就认为该像素点处于图像的边缘,对结果加100,以使边缘变亮,而对于G[f(i,j)]不大于T就认为像素点是同类像素(同是物体或同是背景)。

这样既增亮了物体的边界,同时又保留了图像背景原来的状态。

2.实现步骤

(1)获得原图像的首地址,及图像的宽和高;

(2)开辟一块内存缓冲区,并初始化为255;

(3)计算图像的像素的梯度,将结果保存在内存缓冲区;

(4)比较像素的梯度是否大于30,是则将梯度值加100,不是则将该像素点的灰度值恢复,如果梯度加100大于255,将其置为255;

(5)将内存中的数据复制到图像数据区。

3.编程代码

/***************************************************************

*函数名称:

Menxianruihua()

*函数类型:

void

*功能:

对图像进行门限梯度锐化

***************************************************************/

voidTiDuRuiHuaDib:

:

Menxianruihua()

{

LPBYTEp_data;//原图数据区指针

intwide,height;//原图长、宽

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

LPBYTEp_temp=newBYTE[wide*height];//开辟图像一缓冲区

memset(p_temp,255,wide*height);//初始化为255

inttemp;

for(intj=1;j

for(inti=1;i

{

//根据双向一次微分公式计算当前像素的灰度值

temp=(int)sqrt((p_data[wide*j+i]-p_data[wide*j+(i-1)])*(p_data[wide*j+i]

-p_data[wide*j+(i-1)])+(p_data[wide*j+i]-p_data[wide*(j-1)+i])

*(p_data[wide*j+i]-p_data[wide*(j-1)+i]));

if(temp>=30)

{

if((temp+100)>255)

p_temp[wide*j+i]=255;

else

p_temp[wide*j+i]=temp+100;

}

if(temp<30)

p_temp[wide*j+i]=p_data[wide*j+i];

}

//将缓冲区中的图像复制回原图数据区

memcpy(p_data,p_temp,wide*height);

//删除缓冲区

deletep_temp;

}

4.处理效果图

(a)原图(b)辅以门限判断效果图

图6-5辅以门限判断效果图

6.3.3给边缘规定一个特定的灰度级

1理论基础

G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2

La;G[f(i,j)]≥T

g(i,j)=

  f(i,j);其它(6-13)

  La为一指定的灰度值。

这种处理实际上是门限锐化的一种特殊形式,它将边界的灰度值统一化,这样可以使边界更加清晰明显。

该方法基本上不破坏图像的背景,又可找到边缘,并根据需要增强边缘。

2实现步骤

(1)获得原图像的首地址,及图像的高和宽。

(2)开辟一块内存缓冲区,并初始化为255。

(3)计算图像的像素的梯度,将结果保存在内存缓冲区。

(4)比较像素的梯度是否大于30,是则将灰度值置为255,否则恢复该像素原来的灰度值。

(5)将内存中的数据复制到图像数据区。

3.编程代码

/***************************************************************

*函数名称:

GuDingRuiHua()

*函数类型:

void

*功能:

给边缘规定一个特定的灰度级。

***************************************************************/

voidTiDuRuiHuaDib:

:

GuDingRuiHua()

{

LPBYTEp_data;//原图数据区指针

intwide,height;//原图长、宽

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

LPBYTEp_temp=newBYTE[wide*height];//开辟图像一缓冲区

memset(p_temp,255,wide*height);//初始化为255

inttemp;

for(intj=1;j

for(inti=1;i

{

//根据双向一次微分公式计算当前像素的灰度值

temp=(int)sqrt((p_data[wide*j+i]-p_data[wide*j+(i-1)])*(p_data[wide*j+i]

-p_data[wide*j+(i-1)])+(p_data[wide*j+i]-p_data[wide*(j-1)+i])

*(p_data[wide*j+i]-p_data[wide*(j-1)+i]));

if(temp>30)

{

p_temp[wide*j+i]=255;

}

else

p_temp[wide*j+i]=p_data[wide*j+i];

}

//将缓冲区中的图像复制回原图数据区

memcpy(p_data,p_temp,wide*height);

//删除缓冲区

deletep_temp;

}

4.效果对比图

 

(a)原图(b)给边缘规定一个特定的灰度级

图6-6给边缘规定一个特定的灰度级

6.3.4给背景规定灰度级 

G[f(i,j)];G[f(i,j)]≥T

g(i,j)=

  Lb;其它(6-14)

   Lb为一对背景指定的灰度值。

这种处理的原理和上一节介绍

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2