资源描述
第十章第十章 图像分割图像分割第十章 图像分割1n异常图像的分割是图像处理中最困难的异常图像的分割是图像处理中最困难的任务之一。精确的分割决定着计算分析任务之一。精确的分割决定着计算分析过程的成败。过程的成败。n因此,应该对提高稳定分割的可能性予因此,应该对提高稳定分割的可能性予以特别关注。以特别关注。异常图像的分割是图像处理中最困难的任务之一。精确的分割决定着2n图像分割算法主要基于图像亮度值的两图像分割算法主要基于图像亮度值的两个基本特性:个基本特性:n1不连续性(图像的边缘)不连续性(图像的边缘)n2相似性(预先定义准则将图像分割为相相似性(预先定义准则将图像分割为相似区域:门限处理、区域生长、区域分似区域:门限处理、区域生长、区域分离和聚合)离和聚合)图像分割算法主要基于图像亮度值的两个基本特性:3n10.1间断检测间断检测n10.2边缘连接和边界检测边缘连接和边界检测n10.3阈值处理阈值处理n10.4基于区域的分割基于区域的分割n10.5使用分水岭变换的分割使用分水岭变换的分割10.1间断检测410.1间断检测间断检测n数字图像中有三种基本类型的灰度级间数字图像中有三种基本类型的灰度级间断:点,线和边缘断:点,线和边缘。n10.1.1点检测n模板进行检测n-1-1 -1|R|Tn-1 8 -1n-1-1 -1 10.1间断检测数字图像中有三种基本类型的灰度级间断:点,线5点检测nf=imread(pointdetect.tif);nimshow(f);nw=-1-1-1;-1 8-1;-1-1-1;ng=abs(imfilter(double(f),w);nT=max(g(:);ng=g=T;nfigure,imshow(g);点检测f=imread(pointdetect.tif610.1.2线检测线检测n模板模板n-1-1-1 -1-1 2 -1 2-1 2-1-1 n2 2 2 -1 2-1 -1 2-1 -1 2 -1 n-1-1-1 2-1-1 -1 2-1 -1-1 2n水平水平 +45度度 垂直垂直 -45度度10.1.2线检测模板7nf=imread(linedetect.tif);nimshow(f);nw=2-1-1;-1 2-1;-1-1 2;ng=imfilter(double(f),w);nfigure,imshow(g,)ngtop=g(1:120,1:120);ngtop=pixeldup(gtop,4);nfigure,imshow(gtop,);f=imread(linedetect.tif);8ngbot=g(end-119:end,end-119:end);ngbot=pixeldup(gbot,4);nfigure,imshow(gbot,);ng=abs(g);nfigure,imshow(g,);nT=max(g(:);ng=g=T;nfigure,imshow(g);gbot=g(end-119:end,end-119:end910.1.3边缘检测边缘检测n边缘检测对于灰度级间断的检测是最为边缘检测对于灰度级间断的检测是最为普遍的检测方法。普遍的检测方法。n利用微分方法求边缘利用微分方法求边缘n注意:导数受噪声的影响非常之大。注意:导数受噪声的影响非常之大。nSobel,Prewitt,RobertsnLaplacian,LOG10.1.3边缘检测边缘检测对于灰度级间断的检测是最为普遍的10使用使用edge函数的边缘检测函数的边缘检测n边缘检测的基本意图是使用如下两个基边缘检测的基本意图是使用如下两个基本准则之一在图像中找到亮度快速变化本准则之一在图像中找到亮度快速变化的地方的地方n1找到亮度的一阶导数在幅度上比指定的找到亮度的一阶导数在幅度上比指定的阈值大的地方。阈值大的地方。n2找到亮度的二阶导数有零交叉的地方。找到亮度的二阶导数有零交叉的地方。使用edge函数的边缘检测边缘检测的基本意图是使用如下两个基11ng,t=edge(f,method,parameters)nMethod:nSobel/Prewitt/Roberts/Laplacian of a Gaussian(LOG)/Zero crossing/CannynParameter:nThresh,direction:horizontal/vertical/bothnSigma:标准差标准差ng:2值结果。值结果。t:阈值:阈值g,t=edge(f,method,paramete12例:使用例:使用Sobel模板提取边缘模板提取边缘nf=imread(edgedetect.tif);nimshow(f);ngv,t=edge(f,sobel,vertical);nfigure,imshow(gv);nt例:使用Sobel模板提取边缘f=imread(edged13n指定一个较高的阈值将弱边缘去掉指定一个较高的阈值将弱边缘去掉ngv=edge(f,sobel,0.15,vertical);nfigure,imshow(gv);n产生水平和垂直边缘产生水平和垂直边缘ngboth=edge(f,sobel,0.15,both);nfigure,imshow(gboth);指定一个较高的阈值将弱边缘去掉14函数函数edge不能计算不能计算+-45度边缘,如要计度边缘,如要计算这些边缘,需要制定模板,并使用函数算这些边缘,需要制定模板,并使用函数imfilternw45=-2-1 0;-1 0-1;0 1 2;n%w45=0 1 2;-1 0-1;-2-1 0;ng45=imfilter(double(f),w45,replicate);nT=0.03*max(abs(g45(:);ng45=g45=T;nfigure,imshow(g45);函数edge不能计算+-45度边缘,如要计算这些边缘,需要制15Sobel,LoG,Canny边缘检测器边缘检测器比较比较nf=imread(edgedetect.tif);nimshow(f);ng_sobel_default,ts=edge(f,sobel);nfigure,imshow(g_sobel_default);ng_log_default,tlog=edge(f,log);nfigure,imshow(g_log_default);ng_canny_default,tc=edge(f,canny);nfigure,imshow(g_canny_default);Sobel,LoG,Canny边缘检测器比较f=imread16ng_sobel_best=edge(f,sobel,0.05);nfigure,imshow(g_sobel_best);ng_log_best=edge(f,log,0.003,2.25);nfigure,imshow(g_log_best);ng_canny_best=edge(f,canny,0.04,0.10,1.5);nfigure,imshow(g_canny_best);g_sobel_best=edge(f,sobel,0.1710.2边缘连接和边界检测边缘连接和边界检测n在得到的边缘上的像素点,由于噪声,在得到的边缘上的像素点,由于噪声,不均匀光照的影响而产生的边缘间断,不均匀光照的影响而产生的边缘间断,使得一组像素很少能完整地描绘一条边使得一组像素很少能完整地描绘一条边缘。缘。n使用边缘检测算法后,紧跟着使用连接使用边缘检测算法后,紧跟着使用连接过程将边缘像素组合成有意义的边缘。过程将边缘像素组合成有意义的边缘。10.2边缘连接和边界检测在得到的边缘上的像素点,由于噪声,1810.2.1局部处理局部处理n连接边缘点的最简单的方法之一:连接边缘点的最简单的方法之一:n分析图像中每个点分析图像中每个点(x,y)的一个小邻域的一个小邻域(3*3,5*5)内像素的特点。)内像素的特点。该点是该点是一个得到的边缘点。一个得到的边缘点。n依据事先预定的准则,将所有被认为是依据事先预定的准则,将所有被认为是相似的点连接起来,形成满足这些准则相似的点连接起来,形成满足这些准则的像素组成的一条边缘。的像素组成的一条边缘。10.2.1局部处理连接边缘点的最简单的方法之一:19边缘像素相似性的两个主要性边缘像素相似性的两个主要性质:质:n1生成的边缘像素的梯度算子的响应强度生成的边缘像素的梯度算子的响应强度n2 梯度向量的方向。梯度向量的方向。n如果同时满足这两个条件,则将边缘连接起来,如果同时满足这两个条件,则将边缘连接起来,在图像的每个位置重复这样的操作。在图像的每个位置重复这样的操作。边缘像素相似性的两个主要性质:1生成的边缘像素的梯度算子的响2010.2.2通过通过Hough变换进行整变换进行整体处理体处理n根据给定图像上的一个点集,如何找到根据给定图像上的一个点集,如何找到位于直线上的所有点的子集?位于直线上的所有点的子集?n利用直线的斜截式公式利用直线的斜截式公式10.2.2通过Hough变换进行整体处理根据给定图像上的一21n在参数空间中,相交的直线表示在在参数空间中,相交的直线表示在xy平平面中两点共线。面中两点共线。n为了表示垂直的情况,使用直线标准表为了表示垂直的情况,使用直线标准表达达在参数空间中,相交的直线表示在xy平面中两点共线。22nHough变换将变换将 参数空间细分为了参数空间细分为了累加器单元。坐标为累加器单元。坐标为(i,j)的单元,对应的单元,对应参数空间坐标参数空间坐标 相关的方形。相关的方形。n最初这些单元置为最初这些单元置为0。然后对于平面上的。然后对于平面上的每一个非背景点变换到参数空间。将对每一个非背景点变换到参数空间。将对应位置的累加器加应位置的累加器加1。n累加器的值意味着累加器的值意味着xy平面上有多少个点平面上有多少个点共线。共线。Hough变换将 参数空间细分为了累加器单元23例:Hough变换nf=imread(houghtrans.tif);nimshow(f);nH=hough(f);nfigure,imshow(H,);例:Hough变换f=imread(houghtrans.24给出坐标轴显示参数空间给出坐标轴显示参数空间nH,theta,rho=hough(f);nfigure,imshow(theta,rho,H,notruesize);naxis on,axis normal;nxlabel(theta),ylabel(rho);给出坐标轴显示参数空间H,theta,rho=hough25使用Hough变换作线检测和连接n函数函数houghpeaks得到得到Hough变换的峰值点变换的峰值点nr,c,hnew=houghpeaks(h,numpeaks,threshold,nhood)h:Hough变换矩阵变换矩阵numpeaks:指定要寻找的最大峰指定要寻找的最大峰threshold:阈值以下的认为不是峰阈值以下的认为不是峰nhood:抑制的邻域大小抑制的邻域大小使用Hough变换作线检测和连接函数houghpeaks得到26n函数函数houghpixels找到图像中影响到峰找到图像中影响到峰值的每一个非零值点的位置。值的每一个非零值点的位置。n函数函数houghlines采用一些策略,将位置采用一些策略,将位置相关的像素组合成线段。相关的像素组合成线段。函数houghpixels找到图像中影响到峰值的每一个非零值2710.3阈值处理阈值处理n10.3.1全局阈值处理全局阈值处理n步骤:步骤:n1)为)为T选一个初始估计值选一个初始估计值n2)使用)使用T分割图像,产生两组像素分割图像,产生两组像素G1,G210.3阈值处理10.3.1全局阈值处理28n3)计算计算G1和和G2范围内的像素的平均亮范围内的像素的平均亮度值度值u1,u2,n4)计算新阈值)计算新阈值T=(u1+u2)/2;n5)重复步骤重复步骤2-4,直到迭代中的,直到迭代中的T的差比的差比预先指定的参数预先指定的参数T0小为止。小为止。3)计算G1和G2范围内的像素的平均亮度值u1,u2,29函数graythresh实现全局阈值,使用Otsu方法nT=graythresh(f);nf=imread(globalthreshold.tif);nimshow(f);nT=graythresh(f);ng=f=T*255;nfigure,imshow(g);函数graythresh实现全局阈值,使用Otsu方法T=g3010.3.2局部阈值处理局部阈值处理n针对背景照明不均匀时,全局阈值处理针对背景照明不均匀时,全局阈值处理可能无效。针对照明问题作预处理进行可能无效。针对照明问题作预处理进行补偿,同时使用形态学变换对图像进行补偿,同时使用形态学变换对图像进行处理。处理。n使用局部变化的阈值函数对图像进行阈使用局部变化的阈值函数对图像进行阈值处理。值处理。10.3.2局部阈值处理针对背景照明不均匀时,全局阈值处理可3110.4基于区域的分割基于区域的分割n分割的目的是把图象分成区域。区域内分割的目的是把图象分成区域。区域内部像素具有相似性部像素具有相似性n10.4.1基础公式基础公式n用用R表示整个图象区域,将表示整个图象区域,将R分成分成n个子个子区域,满足:区域,满足:10.4基于区域的分割分割的目的是把图象分成区域。区域内部像32第十章图像分割课件3310.4.2区域生长区域生长n预先定义生长的准则,将像素或子区域预先定义生长的准则,将像素或子区域合成较大的区域。合成较大的区域。n由一个或多个开始点组成的集合的选择由一个或多个开始点组成的集合的选择通常要基于问题的性质。通常要基于问题的性质。n当没有先验信息可用时,一种处理方法当没有先验信息可用时,一种处理方法是在每个像素上计算同一组属性,在生是在每个像素上计算同一组属性,在生长过程中,这些属性将像素分配到不同长过程中,这些属性将像素分配到不同区域。区域。10.4.2区域生长预先定义生长的准则,将像素或子区域合成较34n相似性准则的选择不但依赖于所考虑的相似性准则的选择不但依赖于所考虑的问题,而且依赖于可用的图象数据类型。问题,而且依赖于可用的图象数据类型。n但图象为单色图像时,图像分析应该用但图象为单色图像时,图像分析应该用一组基于灰度级和空间性质的描述符来一组基于灰度级和空间性质的描述符来执行。执行。n若在区域生长中没有使用连通信息,则若在区域生长中没有使用连通信息,则会产生错误结果。会产生错误结果。相似性准则的选择不但依赖于所考虑的问题,而且依赖于可用的图象35n区域生长的另一个问题是停止规则的表区域生长的另一个问题是停止规则的表达。一般来说,当不再有像素满足该区达。一般来说,当不再有像素满足该区域所包含的准则时,生长区域就会停止。域所包含的准则时,生长区域就会停止。n函数函数regiongrow实现区域生长。实现区域生长。ng,NR,SI,TI=regiongrow(f,S,T)nS,T:是一个数组(与是一个数组(与f大小相同)或一大小相同)或一个标量。个标量。ng:分割后的图象分割后的图象nNR:不同区域的数目,不同区域的数目,SI:一幅包含有:一幅包含有种子点的图像,种子点的图像,TI:一幅包含在进行连通一幅包含在进行连通性处理之前通过阈值测试的像素的图象。性处理之前通过阈值测试的像素的图象。区域生长的另一个问题是停止规则的表达。一般来说,当不再有像素36例:区域生长对焊接孔隙检测例:区域生长对焊接孔隙检测的应用的应用nf=imread(regiongrowimage.tif);nimshow(f);nimhist(f);ng,NR,SI,TI=regiongrow(f,255,65);nfigure,imshow(g);nfigure,imshow(SI);nfigure,imshow(TI);例:区域生长对焊接孔隙检测的应用f=imread(regi3710.5使用分水岭变换的分割使用分水岭变换的分割n在地理学中,分水岭是指一个山脊,在在地理学中,分水岭是指一个山脊,在该山脊两边的区域中有着不同流向的水该山脊两边的区域中有着不同流向的水系。系。n分水岭变换将在图象中找到汇水盆地和分水岭变换将在图象中找到汇水盆地和脊线。在求解时,关键概念是将初始图脊线。在求解时,关键概念是将初始图象变换成另一幅图象,在变换后,汇水象变换成另一幅图象,在变换后,汇水盆地就是我们想要识别的盆地就是我们想要识别的 对象或区域。对象或区域。10.5使用分水岭变换的分割在地理学中,分水岭是指一个山脊,3810.5.1使用距离变换的分水岭使用距离变换的分水岭分割分割n二值图像的距离变换是一个相对简单的二值图像的距离变换是一个相对简单的概念:它是每一个像素到最近非零值像概念:它是每一个像素到最近非零值像素的距离。素的距离。nD=bwdist(f)n值为值为1 的像素的距离变换为的像素的距离变换为010.5.1使用距离变换的分水岭分割二值图像的距离变换是一个39n1 1 0 0 0n1 1 0 0 0n0 0 0 0 0 n0 0 1 2 3n0 0 1 2 3n1 1 1.4 21 1 0 0 040例:距离变换的分水岭变换分例:距离变换的分水岭变换分割图像割图像nf=imread(anding.tif);nimshow(f);nT=graythresh(uint8(f);ng=im2bw(f,T);nfigure,imshow(g);ngc=g;nfigure,imshow(gc);例:距离变换的分水岭变换分割图像f=imread(andi41nD=bwdist(gc);nfigure,imshow(D,);nL=watershed(-D);nw=L=0;nfigure,imshow(w);ng2=g&w;nfigure,imshow(g2);D=bwdist(gc);4210.5.2使用梯度的分水岭分割使用梯度的分水岭分割n在分水岭变换之前,通常要使用梯度幅在分水岭变换之前,通常要使用梯度幅度来与处理图像。梯度图象在沿对象的度来与处理图像。梯度图象在沿对象的边缘处有较高的像素值,而在其他地方边缘处有较高的像素值,而在其他地方则有较低的像素值。理想情况下,分水则有较低的像素值。理想情况下,分水岭变换会沿着对象边缘处产生分水岭脊岭变换会沿着对象边缘处产生分水岭脊线。线。10.5.2使用梯度的分水岭分割在分水岭变换之前,通常要使用43例:使用梯度和分水岭变换分例:使用梯度和分水岭变换分割图像割图像nf=imread(blackbubble.tif);nimshow(f);nh=fspecial(sobel);nfd=double(f);ng=sqrt(imfilter(fd,h,replicate).2+imfilter(fd,h,replicate).2);nfigure,imshow(g,);nL=watershed(g);nwr=L=0;nfigure,imshow(wr);例:使用梯度和分水岭变换分割图像f=imread(blac44n%解决过分割,在计算分水岭变换之前,先平滑梯度图象。ng2=imclose(imopen(g,ones(3,3),ones(3,3);nL2=watershed(g2);nwr2=L2=0;nf2=f;nf2(wr2)=255;nfigure,imshow(f2);%解决过分割,在计算分水岭变换之前,先平滑梯度图象。4510.5.3控制标记符的分水岭分控制标记符的分水岭分割割n由于噪声和梯度局部的不规则性导致国由于噪声和梯度局部的不规则性导致国分割的产生。分割的产生。n解决该问题的一种实际方法是加入一个解决该问题的一种实际方法是加入一个预处理阶段,以将一些先验知识带到分预处理阶段,以将一些先验知识带到分割过程中,从而限制所允许的区域的数割过程中,从而限制所允许的区域的数目,避免过分割。目,避免过分割。10.5.3控制标记符的分水岭分割由于噪声和梯度局部的不规则46n用于控制过分割的一种方法基于标记符用于控制过分割的一种方法基于标记符的概念。的概念。n标记符是一个属于一幅图像的连通分量。标记符是一个属于一幅图像的连通分量。我们希望有一个内部标记符集合(处于我们希望有一个内部标记符集合(处于每个感兴趣对象的内部)和一个外部标每个感兴趣对象的内部)和一个外部标记符集合(包含在背景中)。记符集合(包含在背景中)。n这些标记符可以如下的修改梯度图象。这些标记符可以如下的修改梯度图象。用于控制过分割的一种方法基于标记符的概念。47例:标记符控制的分水岭分割图像nf=imread(labelwatershed.tif);nimshow(f);nh=fspecial(sobel);nfd=double(f);ng=sqrt(imfilter(fd,h,replicate).2+imfilter(fd,h,replicate).2);nfigure,imshow(g,);nL=watershed(g);nwr=L=0;nfigure,imshow(wr);例:标记符控制的分水岭分割图像f=imread(label48n%解决过分割,用imregionalmin计算图像中大量局部最小区域的位置nrm=imregionalmin(g);nfigure,imshow(rm);%解决过分割,用imregionalmin计算图像中大量局部49n%发现显示的多数局部最小区域位置非常浅,表示了与我们的分割问题不相关的细节。n%为了消除这些无关的小区域,我们采用函数imextendedmin,该函数科计算图像中的n%低点集合,即比周围更深的点的集合(通过某个高度阈值)。nim=imextendedmin(f,2);nfim=f;nfim(im)=175;%在原图像上以灰色气泡的形式叠加扩展的局部最小区域位置。nfigure,imshow(fim);%发现显示的多数局部最小区域位置非常浅,表示了与我们的分割问50n%下面,我们需要寻找外部标记符或者我们确信属于背景的像素。在这里我们采用的方法是n%用找到的像素去标记背景,这些像素恰好位于内部标记符中间的位置,通过求另一个分水岭n%问题,我们可以做到这一点。nLim=watershed(bwdist(im);nem=Lim=0;nfigure,imshow(em);%下面,我们需要寻找外部标记符或者我们确信属于背景的像素。在51n%利用内部标记符合外部标记符修改梯度图象。使局部最小区域仅出现在标记的位置,其他像素n%按需要“上推”,一边删除其他的局部最小区域。ng2=imimposemin(g,im|em);nfigure,imshow(g2,);nL2=watershed(g2);nf2=f;nf2(L2=0)=255;nfigure,imshow(f2);%利用内部标记符合外部标记符修改梯度图象。使局部最小区域仅出52大作业:大作业:n1月月10号之前,上传至号之前,上传至ftp:/202.204.125.41/fuhui/homework/微机图像处理微机图像处理 端口:端口:2121n命名:姓名命名:姓名+学号学号n包括:程序(源文件包括:程序(源文件:代码和图像代码和图像)+报告报告n要求:实现对图像的增强变化(空域和要求:实现对图像的增强变化(空域和频域),包括平滑,锐化,对比度增强频域),包括平滑,锐化,对比度增强等,实现对图像的分割(灰度图和彩色等,实现对图像的分割(灰度图和彩色图)。需要做出界面。图)。需要做出界面。n报告中阐述实现各项图像处理功能的方报告中阐述实现各项图像处理功能的方法,以及程序如何操作的说明。法,以及程序如何操作的说明。大作业:1月10号之前,上传至ftp:/202.204.153
展开阅读全文