Matlab图像锐化解决及边沿检测本章要点: þ 图像边沿锐化的基本措施 þ 微分运算 þ 梯度锐化 þ 边沿检测6.1 图像边沿锐化的基本措施物体的边沿是以图像局部特性不持续性的形式浮现本质上边沿常意味着一种区域的终结和另一种区域的开始图像边沿信息在图像分析和人的视觉中都是十分重要的,是图像辨认中提取图像特性的一种重要特性图像的边沿有方向和幅度两个特性一般,延边沿走向的像素变化平缓,而垂直于边沿走向的像素变化剧烈边沿的描述涉及如下几种方面:(1) 边沿点——它两边像素的灰度值有明显的不同边沿点也存在于这样一对邻点之间即一种在较亮的区域内部,另一种在外部2)边沿法线方向——在某点灰度变化最剧烈的方向,与边沿方向垂直3)边沿方向——与边沿法线方向垂直,是目的边界的切线方向4)边沿位置——边沿所在的坐标位置5)边沿强度——沿边沿法线方向图像局部的变化强度的量度粗略地辨别边沿种类可以有两种,其一是阶跃状边沿,它两边像素的灰度值有明显的不同,其二是屋顶状边沿,它位于灰度值从增长到减少的变化转折点这些变化分别相应景物中不同的物理状态边沿是图像上灰度变化比较剧烈的地方,如果一种像素落在图像中某一种物体的边界上,那么它的邻域将成为一种灰度级的变化带。
对这种变化最有用的两个特性是灰度的变化率和方向,在灰度变化突变处进行微分,将产生高值典型的边沿提取措施是考虑图像的每个像素在某个领域内的变化,运用边沿邻近一阶或二阶方向导数变化规律,来检测边沿图像灰度值的明显变化可以用一阶差分替代一阶微分的梯度来表达,它们分别以梯度向量的幅度和方向来表达因此图像中陡峭边沿的梯度值将是很大的;那些灰度变化平缓的地方,梯度值是比较小的;而那些灰度值相似的地方,梯度值将为零图像通过梯度运算能敏捷地检测出边界线,这种微分边沿检测算子运算简朴易行,但有方向性运用计算机进行图像锐化解决有两个目的,一是与柔化解决相反,增强图像边沿,使模糊的图像变得更加清晰起来,颜色变得鲜明突出,图像的质量有所改善,产生更适合人观测和辨认的图像,本章的梯度锐化就是简介这方面的内容二是但愿通过锐化解决后,目的物体的边沿鲜明,以便于计算机提取目的物体的边界、对图像进行分割、目的区域辨认、区域形状提取等,为图像理解和分析打下基本,目前它已成为机器视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位,本章的边沿检测算子就是简介这方面的内容与图像平滑解决相相应,图像锐化也可以分为空间域图像锐化法和空间频率域图像锐化法两大类型。
空间频率域图像锐化的措施将在第九章简介,本章简介边沿增强及边沿检测的措施,基于空间域解决,为分割及目的物体特性提取打下基本6.2 微分运算边沿是由相邻域灰度级不同像素点构成的,若想增强边沿,就应当突出相邻点间灰度级的变化如下图所示,不难发现原图中左边暗,右边亮,中间存在着一条明显的边界 0 0 1 255 255 255 255 1 1 1 254 253 254 254 0 0 0 255 255 253 253 1 1 0 254 254 254 254注意:由于计算机显示屏幕的坐标原点在视窗的左上角,显示屏幕的坐标系如图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 ) 成果如下: 0 1 254 0 0 0 0 0 253 -1 1 0 0 0 255 0 -2 0 0 - 1 254 0 0 0 可以看出,第3列比其她列的灰度值高诸多,在边界附近,灰度值有明显的跳变,人眼观测时,就能发现一条很明显的亮边;在灰度相近的区域内,这样做的成果使得该点的灰度值接近于0,区域都很暗。
这样,G ( i, j ) = f ( i , j )- f ( i-1, j )就起到了垂直边沿检测的作用如对于上面那幅图像转置,得到如下图像数据:0 1 0 10 1 0 11 1 0 0255 254 255 254 255 253 255 254255 254 253 254255 254 253 254 该边沿是水平方向的,这时如果还用左列减去右列就得不到边界数据,必须是下一行减去上一行,即每一种像素的值为: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)开辟一块内存缓冲区,并初始化为2553)每个像素依次循环,新图像缓冲区中的目前像素的灰度值等于原图中目前像素的灰度值与其左方的像素的灰度值之差的绝对值4)将缓冲区中的图像复制回原图数据区3.程序代码/************************************************************** *函数名称:ZongXiang() *函数类型:void *功能:对图像进行纵向微分 **************************************************************/void WeiFenDib::ZongXiang(){LPBYTE p_data; //原图数据区指针int wide,height; //原图长、宽p_data=this->GetData ();wide=this->GetWidth ();height=this->GetHeight ();LPBYTE temp=new BYTE [wide*height]; //开辟图像一缓冲区memset(temp,255,wide*height);for(int j=1;j
实现环节(1)获得原图的数据区指针2)开辟一块内存缓冲区,并初始化为2553)每个像素依次循环,新图像缓冲区中的目前像素的灰度值等于原图中目前像素的灰度值与其上方的像素的灰度值之差的绝对值4)将缓冲区中的图像复制回原图数据区3.程序代码/************************************************************** *函数名称:HengXiang() *函数类型:void *功能:对图像进行横向微分 **************************************************************/void WeiFenDib::HengXiang(){LPBYTE p_data; //原图数据区指针int wide,height; //原图长、宽p_data=this->GetData ();wide=this->GetWidth ();height=this->GetHeight ();LPBYTE temp=new BYTE [wide*height]; //开辟图像一缓冲区memset(temp,255,wide*height);for(int j=1;j