1第九章图像分割2图像图像识别图像预处理图像理解图像分割9.1概述3分割出来的各区域对某种性质例如灰度,纹理而言具有相似性,区域内部是连通的的且没有过多小孔。区域边界是明确的相邻区域对分割所依据的性质有明显的差异图像分割特征4边缘检测边缘跟踪阈值分割区域分割图像分割本章要点59.2边缘检测基于边缘检测的图像分割方法的基本思路是先确定图像中的边缘像素,然后就可把它们连接在一起构成所需的边界。◆图像边缘意味着图像中一个区域的终结和另一个区域的开始,图像中相邻区域之间的像素集合构成了图像的边缘。◆进一步讲,图像的边缘是指图像灰度发生空间突变的象素的集合。6◆图像边缘有两个特征:方向和幅度沿边缘走向,像素值变化比较平缓;沿垂直于边缘的走向,像素值则变化比较剧烈。◆一般常用一阶和二阶导数来描述和检测边缘。综上所述,图像中的边缘可以通过对它们求导数来确定,而导数可利用微分算子来计算。对于数字图像来说,通常是利用差分来近似微分。7梯度算子设f(x,y)为连续图像函数,Gx和Gy分别为x方向和y方向的梯度,且在点(x,y)处的梯度可以表示为一个矢量,并有其梯度定义:TyyxfxyxfyxfG),(),()),((822|),G(|yxGGyxyxGGyxG),(4}max{),()(8yxGGyxG)/arctan(),(yxGGyx对应于欧氏距离的梯度幅值:对应于街区距离的梯度幅值:对应于棋盘距离的梯度幅值:由梯度矢量幅角表示的梯度方向是函数f(x,y)增加最快的方向:9梯度算子Roberts算子Z1Z2Z3Z4Z5Z6Z7Z8Z9100-10-110)1,(),1()1,1(),(),(jifjifjifjifjiG10梯度算子Sobel算子789123369147(2)(2)(2)(2)xyGZZZZZZGZZZZZZZ1Z2Z3Z4Z5Z6Z7Z8Z9-1-2-1000121-101-202-10111梯度算子Prewitt算子Z1Z2Z3Z4Z5Z6Z7Z8Z9)()()()(741963321987ZZZZZZGZZZZZZGyx-1-1-1000111-101-101-10112梯度算子原图Prewitt算子Sobel算子Roberts算子13拉普拉斯算子22222(,)(,)(,)fxyfxyfxyxy2(,)(1,)(1,)(,1)(,1)4(,)fxyfxyfxyfxyfxyfxy差分微分二阶导数算子14拉普拉斯算子图9.5两种常用的拉普拉斯算子模板0101-410101111-8111115拉普拉斯算子16Canny算子好的检测结果:对边缘的错误检测率要尽可能低,在检测出图像真实的边缘的同时要避免检测出现虚假的边缘。好的边缘定位精度:标记出的边缘位置要和图像上真正边缘的位置尽量接近。对同一边缘要有低的响应次数:有的算子会对一个边缘回产生多个响应。也就是说图像上本来只有一个边缘点的,可是检测出来就会出现多个边缘点。克服噪声的影响基本思想17Canny算子算法步骤用高斯滤波器平滑图像计算滤波后图像梯度的幅值和方向对梯度幅值应用非极大值抑制,其过程为找处图像梯度中的局部极大值点,把其它非局部极大值点置零以得到得到细化的边缘用双阈值算法检测和连接边缘,使用两个阈值T1和T2(T1T2),T1用来找到每条线段,T2用来在这些线段的两个方向上延伸寻找边缘的断裂处,并连接这些边缘。18Canny算子实例19算子比较Roberts算子:Roberts算子利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备能抑制噪声能力。该算子对具有陡峭边缘且含噪声少的图像效果较好。Sobel算子和Prewitt算子:都是对图像先做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。20算子比较Laplacian算子:是不依赖于边缘方向的二阶微分算子,对图像中的阶跃型边缘点定位准确,该算子对噪声非常敏感,它使噪声成分得到加强,这两个特性使得该算子容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘,同时抗噪声能力较差。LOG算子:克服了拉普拉斯算子抗噪声能力较差的缺点,但在抑制噪声的同时也可能将原有的比较尖锐的边缘也平滑掉了,造成这些尖锐边缘无法被检测到。21算子比较Canny算子:基于最优化思想推导出的边缘检测算子,但实际效果不一定最优。该算子同样采用高斯函数对图像做平滑处理,具有较强的噪声抑制能力,但是会将一些高频边缘平滑掉,造成边缘丢失。Canny算子采用双阈值算法检测和连接边缘,采用的多尺度检测和方向性搜索比LOG算子好。22MATLAB图像处理工具箱利用edge函数来实现基于各种算子的边缘检测功能,这个函数寻找像素值剧烈变化的像素点。调用格式如下:[g,t]=edge(I,'method',parameters)其中I是输入图像,method是边缘检测算子,parameters是设置的参数,输出g是二值图像矩阵,其值为1的像素构成边缘。参数t给出函数使用的阈值。23(1)使用Roberts算子的语法结构:BW=edge(I,'roberts',thresh,options)其中thresh表示阈值,低于该阈值的像素值将被忽略。options默认为'thinning',即边缘细化,当取值为'nothinning',边缘不细化,可以对算法加速。24(2)使用Sobel算子的语法结构:BW=edge(I,'sobel',thresh,direction,options)其中direction是指Sobel算子的检测方向,可取值horizontal、vertical或者both。(3)使用Prewitt算子的语法结构:BW=edge(I,'prewitt',thresh,direction)25(4)使用Canny算子的语法结构:BW=edge(I,'canny',thresh,sigma)其中thresh表示阈值,若为两个元素的向量,则第一个元素为低阈值,第二个元素为高阈值,若为一个元素,表示高阈值,低阈值为0.5*thresh。sigma是指高斯滤波器的标准差,缺省值为1,滤波器的大小根据sigma的值选择。26(5)使用Log算子的语法结构:BW=edge(I,'log',thresh,sigma)其中sigma是指高斯滤波器的标准差,缺省值为2,滤波器的大小为ceil(sigma*3)*2+1。27I=imread('rice.png');BW1=edge(I,'roberts');%以自动阈值选择法对图像进行Roberts算子边缘检测[BW1,thresh1]=edge(I,'roberts');%返回当前Roberts算子边缘检测的阈值disp('Roberts算子自动选择阈值为');disp(thresh1)figure;subplot(2,2,1);imshow(BW1);title('自动阈值的Roberts算子检测');BW2=edge(I,'roberts',0.07);%以阈值为0.07对图像进行Roberts算子检测subplot(2,2,2);imshow(BW2);title('阈值为0.07的Roberts算子检测');BW3=edge(I,'roberts',0.05);%以阈值为0.05对图像进行Roberts算子检测subplot(2,2,3);imshow(BW3);title('阈值为0.05的Roberts算子检测');BW4=edge(I,'roberts',0.03);%以阈值为0.03对图像进行Roberts算子检测subplot(2,2,4);imshow(BW4);title('阈值为0.03的Roberts算子检测');2829I=imread('rice.png');BW1=edge(I,'roberts');BW2=edge(I,'sobel');BW3=edge(I,'prewitt');BW4=edge(I,'canny');BW5=edge(I,'log');figure;subplot(2,3,1);imshow(I);title('原始图像');subplot(2,3,2);imshow(BW1);title('Roberts算子');subplot(2,3,3);imshow(BW2);title('Sobel算子');subplot(2,3,4);imshow(BW3);title('Prewitt算子');subplot(2,3,5);imshow(BW4);title('Canny算子');subplot(2,3,6);imshow(BW5);title('Log算子边缘检测');30319.3边缘跟踪数字图像可用各种方法检测出边缘点,但是由于噪声、光照不均等因素的影响,获得的边缘点有可能是不连续的,必须通过边界跟踪将它们转换为有用的边界信息,以便于后续处理。32基本步骤从图像中一个边缘点出发,然后根据某种判别准则搜索下一个边缘点以此跟踪出目标边界。确定边界的起始搜索点,起始点的选择很关键,对某些图像,选择不同的起始点会导致不同的结果。确定合适边界判别准则和搜索准则,判别准则用于判断一个点是不是边界点,搜索准则则指导如何搜索下一个边缘点。确定搜索的终止条件。33是一种适用于黑白二值图像的图像分割方法。算法步骤:(1)在靠近边缘处任取一起始点,然后按照每次只前进一步,步距为一个象素的原则开始跟踪;(2)当跟踪中的某步是由白区进入黑区时,以后各步向左转,直到穿出黑区为止;(3)当跟踪中的某步是由黑区进入白区时,以后各步向右转,直到穿出白区为止;(4)当围绕目标边界循环跟踪一周回到起点时,则所跟踪的轨迹便是目标的轮廓;否则,应继续按(2)和(3)的原则进行跟踪。9.3.1轮廓跟踪法34黑起点白35黑起点白黑白起点(a)某些小凸部分可能被漏掉(b)利用不同起点跟踪小凸部分369.3.2光栅跟踪法光栅跟踪方法的基本思想是先利用检测准则确定接受对象点,然后根据已有的接受对象点和跟踪准则确定新的接受对象点,最后将所有标记为1且相邻的对象点联接起来就得到了检测到的细曲线。37◆需要事先确定检测阈值d、跟踪阈值t,且要求dt。◆检测准则:对图像逐行扫描,将每一行中灰度值大于或等于检测阈值d的所有点(称为接受对象点)记为1。◆跟踪准则:设位于第i行的点(i,j)为接受对象点,如果位于第i+1行上的相邻点(i+1,j-1)、(i+1,j)和(i+1,j+1)的灰度值大于或等于跟踪阈值t,就将其确定为新的接受对象点,并记为1。38光栅跟踪图像分割算法:(1)确定检测阈值d和跟踪阈值t,且要求dt;(2)用检测阈值d逐行对图像进行扫描,依次将灰度值大于或等于检测阈值d的点的位置记为1;(3)逐行扫描图像,若图像中的(i,j)点为接受对象点,则在第i+1行上找点(i,j)的邻点:(i+1,j-1)、(i+1,j)、(i+1,j+1)并将其中灰度值大于或等于跟踪阈值t的邻点确定为新的接受对象点,将相应位置记为1;(4)重复步骤(3),直至图像中除最末一行以外的所有接受点扫描完为止。39例d=7,t=4(a)1解题过程和检测结果(b)直接取阈值为4时的检测结果40bwtraceboundary函数的调用形式:B=bwtraceboundary(BW,p,fstep,conn,N,dir)其中参数P是一个指定行、列坐标的二元向量,表示图像边界上开始跟踪的那个点;fstep表示初始查找方向,用于寻找对象中与P相连的下一个像素,例如字符串“N”表示north,“NE”表示northeast,以指定方向,除了N、N