膨胀与腐蚀,radon,hough变换.ppt

上传人:s****8 文档编号:68511270 上传时间:2022-12-28 格式:PPT 页数:42 大小:725KB
返回 下载 相关 举报
膨胀与腐蚀,radon,hough变换.ppt_第1页
第1页 / 共42页
膨胀与腐蚀,radon,hough变换.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《膨胀与腐蚀,radon,hough变换.ppt》由会员分享,可在线阅读,更多相关《膨胀与腐蚀,radon,hough变换.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、二值图像膨胀与腐蚀 一般来说对于二值图像,膨胀运算后图像中物体一般来说对于二值图像,膨胀运算后图像中物体“加加长长”或或“变粗变粗”;腐蚀运算后图像中物体;腐蚀运算后图像中物体“收缩收缩”或或“细细化化”。下面先通过一些例题观察分析膨胀与腐蚀后。下面先通过一些例题观察分析膨胀与腐蚀后的的效果,总结二值图像膨胀与腐蚀运算的方法与原则,效果,总结二值图像膨胀与腐蚀运算的方法与原则,最后给出二值图像膨胀与腐蚀运算的准确描述以及最后给出二值图像膨胀与腐蚀运算的准确描述以及简单的应用。简单的应用。1 1 二值图像膨胀运算二值图像膨胀运算 先通过下面例题观察分析几个二值图像膨胀算子的先通过下面例题观察分析

2、几个二值图像膨胀算子的不同效果。不同效果。【例3-16】对二值图像实施膨胀运算。设计如下程序,结果显示在图3-16中。A=imread(C:MATLAB6p5workbc.bmp);B=A;M=1;1;1;N=1 1 0;P=0 0 1;0 1 0;0 0 0;Q=0 0 1;0 0 0;1 0 0;C1=imdilate(B,M);C2=imdilate(B,N);C3=imdilate(B,P);C4=imdilate(B,Q);subplot(1,5,1);imshow(B)subplot(1,5,2);imshow(C1)subplot(1,5,3);imshow(C2)subplot

3、(1,5,4);imshow(C3)subplot(1,5,5);imshow(C4)(a)(b)(c)(d)(e)图3-16 二值图像的膨胀运算 M、N、P、Q是4个算子,M是一个列向量,N是一个行向量。P、Q都是3 3矩阵,P、Q分别为:算子由算子由0、1构成,有构成,有1的位置用来定义算子覆盖区域的邻域。的位置用来定义算子覆盖区域的邻域。这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有1的地方称为中心点处的邻域。的地方称为中心点处的邻域。在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如在对二值图像进行膨胀运算时,也使用算子

4、在图像上滑动。如果图像的算子覆盖邻域内有果图像的算子覆盖邻域内有1 1,那么覆盖区域中心的输出值就,那么覆盖区域中心的输出值就为为1 1,也就是新图像在覆盖区域中心的值为,也就是新图像在覆盖区域中心的值为1 1。否则为。否则为0 0。程序中读入的图像程序中读入的图像bc.bmp是白色背景黑色字体,使用语句是白色背景黑色字体,使用语句B=A把图像把图像bc.bmp变为黑色背景白色字体,如图变为黑色背景白色字体,如图3-16(a)所示。所示。该图像是二值图像,所有数据显示在图该图像是二值图像,所有数据显示在图3-17中。字体中。字体b与与c所在所在范围用灰色标出。范围用灰色标出。图3-17 二值图

5、像bc.bmp的颜色数据 为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下图中的4个图像都是字母b的变化情况。(a)使使用用M膨膨胀胀后后的的结结果果(b)使使用用N膨膨胀胀后后的的结结果果(c)使使用用P膨膨胀胀后后的的结结果果(d)使使用用Q膨膨胀胀后后的的结结果果 下面以图下面以图3-19为例详细讲解二值图像膨胀运算规则。为例详细讲解二值图像膨胀运算规则。图图3-19使用的是算子使用的是算子Q。对于算子对于算子Q,只要覆盖区域的左只要覆盖区域的左下角与右上角至少有一个为下角与右上角至少有一个为1(两个为(两个为1也可以),那么在也可以),那么在覆盖区域的中心位置的返回值就是覆盖区域的

6、中心位置的返回值就是1。所以,当算子移动。所以,当算子移动到位置到位置“1”时,因为右上角处颜色值为时,因为右上角处颜色值为1,所以在覆盖区,所以在覆盖区域中心(域中心(5,3)处输出颜色值)处输出颜色值1,如图,如图3-19(b)位置位置“1”所所示。示。当算子移动到位置当算子移动到位置“2”时,因为右上角处颜色值为时,因为右上角处颜色值为1(其(其他处为他处为1不起作用),所以在覆盖区域中心(不起作用),所以在覆盖区域中心(8,7)处输出)处输出颜色值颜色值1,如图,如图3-19(b)位置位置“2”所示。所示。当算子移动到位置当算子移动到位置“3”时,因为左下角与右上角处颜色时,因为左下角

7、与右上角处颜色值都不为值都不为1,所以在覆盖区域中心(,所以在覆盖区域中心(12,9)处输出颜色值)处输出颜色值0,如图,如图3-19(b)位置位置“3”所示。所示。(a)图像图像3-16(a)的一部分,即有字母的一部分,即有字母b的那部分,图的那部分,图3-17左边的一部分数据左边的一部分数据(b)图图(a)使用使用Q膨胀后的部分结果,即膨胀后的部分结果,即3-18(d)的放大。的放大。图图3-19 二值二值图像图像膨胀运算规则膨胀运算规则 其他算子的运算规则都与上面所述相同。运算结果与原图像有关,算子形状与图像的邻域情况决定了运算结果。另外,从上面描述情况看,二值图像膨胀运算本质上是逻辑运

8、算。数学上,二值图像膨胀运算可以用集合定义如下:其中,A为原图像,B为算子。就是上面描述的那种覆盖操作,是空集,是计算后的输出值。2 2 二值图像腐蚀运算二值图像腐蚀运算 二值图像腐蚀运算本质上也是逻辑运算,可以用如下数学定义描述二值图像腐蚀运算:其中,A为原图像,B为算子。Ac是A的补集。是移动覆盖操作,是空集,是计算后的输出值。在进行腐蚀运算时,算子移动一下,输出一个新值赋给算子覆盖处的中心位置。计算输出值的方法是:如果算子覆盖邻域内图像像素值有为0的,那么中心位置的输出值为0,否则为1。根据上面定义与说明,结合下面例3-17来理解图像腐蚀运算规则。【例3-17】对二值图像实施腐蚀运算。把

9、3-16中程序语句:C1=C1=imdilate(B,Mimdilate(B,M);C2=);C2=imdilate(B,Nimdilate(B,N););C3=C3=imdilate(B,Pimdilate(B,P);C4=);C4=imdilate(B,Qimdilate(B,Q););修改为:C1=imerode(B,M);C2=C1=imerode(B,M);C2=imerode(B,Nimerode(B,N););C3=imerode(B,P);C4=C3=imerode(B,P);C4=imerode(B,Qimerode(B,Q););其他语句不变,程序运行的结果是图3-20。图

10、3-20 二值图像腐蚀运算 程序中的函数程序中的函数imerode是用来是用来进行腐蚀运算的。进行腐蚀运算的。腐蚀运算后,原腐蚀运算后,原来图像一般会变来图像一般会变细变小。细变小。【例3-18】对二值图像实施腐蚀运算,并且与膨胀运算进行比较。设计下面程序:A=imread(0370.bmp);B=im2bw(A);B=B;M=strel(diamond,3);C1=imerode(B,M);C2=imdilate(B,M);subplot(1,3,1);imshow(B)subplot(1,3,2);imshow(C1)subplot(1,3,3);imshow(C2)程序运行结果如图3-2

11、1所示。(a)原图像 (b)腐蚀后的图像 (c)膨胀后的图像 图3-21 二值图像腐蚀与膨胀比较 函数strel是专门用来生成算子模板的,strel(diamond,3)生成的算子模板为:0 0 0 1 0 0 00 0 0 1 0 0 00 0 1 1 1 0 00 0 1 1 1 0 00 1 1 1 1 1 00 1 1 1 1 1 01 1 1 1 1 1 11 1 1 1 1 1 10 1 1 1 1 1 00 1 1 1 1 1 00 0 1 1 1 0 00 0 1 1 1 0 00 0 0 1 0 0 00 0 0 1 0 0 0函数strel还可以生成square、line、

12、disk、periodicline、pair、octagon等模板。该算子模板呈菱形结构,一共有25个1。该算子覆盖区域呈菱形。3 3 灰度图像膨胀与腐蚀灰度图像膨胀与腐蚀灰灰度度图图像像膨膨胀胀腐腐蚀蚀的的定定义义与与二二值值图图像像膨膨胀胀腐腐蚀蚀的的定定义义有有些些区区别别,一般定义灰度图像膨胀为一般定义灰度图像膨胀为定义灰度图像腐蚀为定义灰度图像腐蚀为灰灰度度图图像像膨膨胀胀实实质质上上是是求求邻邻域域内内最最大大值值作作为为输输出出;灰灰度度图图像像腐腐蚀蚀是是求求邻邻域域内内最最小小值值作作为为输输出出。邻邻域域仍仍然然是是由由各各种种算算子子模模板板来来定义的。定义的。【例3-1

13、9】对灰度图像实施膨胀腐蚀运算。设计下面程序A=imread(D:flower1.bmp);A1=rgb2gray(A);se=strel(square,3);A2=imdilate(A1,se);A3=imerode(A1,se);subplot(1,3,1),imshow(A1);subplot(1,3,2),imshow(A2);subplot(1,3,3),imshow(A3);程序运行结果是图3-22(见下页图)。因为膨胀是取最大值,所以膨胀后图象白色成分增多;腐蚀取最小值,所以黑色成分增加。(a)原图像 (b)膨胀 (c)腐蚀 图3-22 灰度图像膨胀与腐蚀 程序中,程序中,str

14、el(square,3);是生成了一个是生成了一个3行行3列的矩阵,每个元素都是列的矩阵,每个元素都是1。如果把参数如果把参数se变成变成6*6大小方形区域,膨胀或腐蚀的区域变大,所以图形大小方形区域,膨胀或腐蚀的区域变大,所以图形的改变也比较大。如图的改变也比较大。如图3-23所示。所示。(a)原图像 (b)膨胀 (c)腐蚀 图3-23 图像膨胀与腐蚀(块区域为6*6)开运算与闭运算 1 开运算定义如下:对二值图像来说,开运算能够删除不包含模板形状的对象区域,能够平滑对象轮廓,断开狭窄的连接,去掉细小的突出部分。Matlab提供了函数imopen用来完成两个图像的开运算。2 闭运算定义如下:

15、闭运算能平滑图像的轮廓,能将狭窄的缺口连接起来形成细长的弯口,能填充比模板邻域小的洞。Matlab提供了函数imclose用来完成两个图像的闭运算。【例3-20】对图像实施开闭运算。设计如下程序:A=imread(D:125.jpg);B=rgb2gray(A);M=strel(diamond,2);C1=imopen(B,M);C2=imclose(B,M);subplot(1,3,1);imshow(B)subplot(1,3,2);imshow(C1)subplot(1,3,3);imshow(C2)程序的运行结果如图3-24所示。程序中先使用语句M=strel(diamond,2);生

16、成一个菱形模板,使用该模板对图像B进行开闭运算分别得到图像(矩阵)C2与C2,从图3-24能够看出开闭运算的区别。(a)原图像 (b)开运算 (c)闭运算 图3-24 图像开运算与闭运算 第第4 4章章 图像变换图像变换 l4.1 图像图像Radon变换变换 4.1图像Radon变换 函数RadonMatlabMatlab中提供了函数中提供了函数radonradon用来完成图像用来完成图像RadonRadon变换,该变换,该变换实质上是计算指定方向上图像矩阵的投影。变换实质上是计算指定方向上图像矩阵的投影。【例例4-1】图像图像RadonRadon变换变换。设计下面程序进行图像的设计下面程序进

17、行图像的RadonRadon变换。变换。A=imread(D:0371.bmp);A=imread(D:0371.bmp);C,x1=radon(A,0);C,x1=radon(A,0);D,x2=radon(A,30);D,x2=radon(A,30);subplot(1,3,1);subplot(1,3,1);imshow(Aimshow(A)subplot(1,3,2);plot(x1,C)subplot(1,3,2);plot(x1,C)subplot(1,3,3);plot(x2,D)subplot(1,3,3);plot(x2,D)读入图像,然后调用读入图像,然后调用radonra

18、don函数,变换后绘制出图函数,变换后绘制出图4-1(a)-4-1(a)-(c)(c)所示图形。可以看到图像变换后得到的是一个线图,也就所示图形。可以看到图像变换后得到的是一个线图,也就是说是说RadonRadon变换后变成了一维数组。变换的基本原理是在指定变换后变成了一维数组。变换的基本原理是在指定方向进行灰度投影计算。例如上面程序中的图像方向进行灰度投影计算。例如上面程序中的图像0371.bmp0371.bmp大大小为小为172 168172 168,宽度为,宽度为168168。以以图图像像中中心心作作为为原原点点,向向水水平平方方向向投投影影,在在区区间间-84-84 8484上上有有颜

19、颜色色值值(白白色色为为1 1,黑黑色色为为0 0),颜颜色色值值和和在在100100左左右右,如如图图图图4-1(b)4-1(b)所示。所示。以图像中心作为原点,向与水平成以图像中心作为原点,向与水平成3030度角的方向投影,在度角的方向投影,在稍大一些的区间上有颜色值,颜色值投影相加的情况显示在稍大一些的区间上有颜色值,颜色值投影相加的情况显示在图图4-1(c)4-1(c)中。中。为了更好地进行观察,绘制了二值图像为了更好地进行观察,绘制了二值图像0372.bmp0372.bmp,如图如图4-4-1(d)1(d)所示。使用上面程序,对所示。使用上面程序,对0372.bmp0372.bmp进

20、行变换,把程序中进行变换,把程序中文件文件0371.bmp0371.bmp改为改为0372.bmp0372.bmp即可。得到的结果如图即可。得到的结果如图4-1(e)4-1(e)、(f)(f)所示。从这个结果能进一步直观的理解所示。从这个结果能进一步直观的理解RadonRadon变换。变换。(a)被变换的图像A (b)0度方向投影 (c)30度方向投影 (d)被变换的图像B (e)0度方向投影 (f)30度方向投影 图4-1 图像radon变换相当于在一定方向上投影 例e1lclear;lx=zeros(55,55);lx(16:36,16:36)=1;limshow(x);lr,xp=rad

21、on(x,0);lfigure;lplot(xp,r)l例lclear;lI=zeros(200,200);lA=eye(100,100);lI(101:200,1:100)=A;lfigure,imshow(I);title(orginal image);ltheta=0:180;lR,xp=radon(I,theta);lfigure,imagesc(theta,xp,R);title(R_theta X);lxlabel(theta(degree);lylabel(Xprime);lcolormap(hot);lcolorbar;l所求=45度,X=-75左右。意思是在原XY坐标下的45

22、度的直线X上,距离原点75的位置有条与X垂直的直线。此直线真正的45+90=135度,右移-75/sin45=100的距离。函数Iradon Matlab也提供了函数也提供了函数iradon用来进行逆用来进行逆RadonRadon变换。下面例变换。下面例题题4-24-2先利用先利用radonradon函数计算一组旋转角度下的函数计算一组旋转角度下的RadonRadon变换变换R R,R R是二维数组,记载着对应于每个角度的变换后的数据。是二维数组,记载着对应于每个角度的变换后的数据。然后然后利用利用R及旋转角度,及旋转角度,使用使用函数函数iradon重建图像。重建图像。【例例4-2】利用逆利

23、用逆RadonRadon变换复原变换复原图像。图像。设计如下程序设计如下程序 B=imread(D:0371.bmp);T=0:10:180;C,x=radon(B,T);D=iradon(C,T);subplot(1,3,1);imshow(B)subplot(1,3,2);imagesc(T,x,C)subplot(1,3,3);image(D)程序运行结果是图4-2。(a)原图像 (b)变换曲线集合 (c)复原图像 图4-2 图像逆radon变换复原图像(1)程序中语句程序中语句T=0:10:180定义了一个向量定义了一个向量T,共有共有19个元素。调个元素。调用函数语句用函数语句C,x

24、=radon(B,T)中,如果角度中,如果角度T是一个向量,那是一个向量,那么么C,x中的中的C就是一个二维数组,用来表示多条变换后的曲就是一个二维数组,用来表示多条变换后的曲线。多条变换后的曲线绘制在一起,形成图线。多条变换后的曲线绘制在一起,形成图4-2(b)所示图形,所示图形,横轴表示横轴表示180度,纵轴表示每条曲线的高度。从图度,纵轴表示每条曲线的高度。从图4-2可以看可以看出复原的结果与原图有些差别,这是由于在出复原的结果与原图有些差别,这是由于在RadonRadon变换的过程变换的过程中损失了一些数据等原因造成的。中损失了一些数据等原因造成的。【例4-3】利用逆Radon变换复原

25、图像,观察复原效果。下面程序的运行结果如图4-3所示。A=imread(D:0010.jpg);B=rgb2gray(A);T=1:2:180;C,x=radon(B,T);D=iradon(C,T);subplot(1,3,1);imshow(B)subplot(1,3,2);imagesc(T,x,C)subplot(1,3,3);image(D)(a)原图像 (b)变换曲线集合 (c)复原图像 图4-3 图像逆radon变换复原图像(2)4.6 Hough变换1.直线检测的意义 直线是图像的基本特征之一。一般物体平面图像的轮廓可近似为直线及弧的组合,因此,对物体轮廓的检测与识别可以转化为

26、对这些基元的检测与提取。另外在运动图像分析和估计领域也可以采用直线对应法实现刚体旋转量和位移量的测量,所以对图像直线检测算法进行研究具有重要的意义。2.Hough变换原理及特点 Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。Hough变换常用来对图像中的直线和圆进行识别。3.直线的Hough变换的基本思想l x-y平面上的任意一条直线y=ax+b,对应在参数a-b平面上都有一个点a ab bl在参数a-b平面上相交直线最多的点,对应的x-y平面上的直线就是我们的解 上述在x-

27、y坐标中用斜率描述的直线存在斜率a无穷大的情况,会给计算带来不便。故一般采用下面的点-正弦曲线对偶。l点-正弦曲线对偶(=xcos +ysin)采用极坐标描述直线,则有如下的Hough变换函数:=xcos +ysin 即将图像空间中的点(x,y)影射到-参数空间。lI1=imread(D:0066.jpg);lI=rgb2gray(I1);l BW=edge(I,canny);l H,T,R=hough(BW);l imshow(H,XData,T,YData,R,InitialMagnification,fit);l axis normal,hold on;l P =houghpeaks(H

28、,5);l x=T(P(:,2);y=R(P(:,1);l plot(x,y,s,color,white);l lines=houghlines(BW,T,R,P);l figure,imshow(I),hold onl max_len=0;l for k=1:length(lines)l xy=lines(k).point1;lines(k).point2;l plot(xy(:,1),xy(:,2),Color,green);l plot(xy(1,1),xy(1,2),Color,yellow);l plot(xy(2,1),xy(2,2),Color,red);l len=norm(l

29、ines(k).point1-lines(k).point2);l if(len max_len)l max_len=len;l xy_long=xy;l endl end l plot(xy_long(:,1),xy_long(:,2),Color,cyan);H,theta,rho=hough(bw)函数l H,theta,rho=hough(BW)computes the Standard Hough Transform(SHT)of the binary image BW.You can use the hough function to detect lines in an imag

30、e.The function returns H,the Hough transform matrix.theta(in degrees)and rho are the arrays of rho and theta values over which the Hough transform matrix was generated.peaks=houghpeaks(H,numpeaks)函数lpeaks=houghpeaks(H,numpeaks)locates peaks in the Hough transform matrix,H,generated by the hough func

31、tion.numpeaks is a scalar value that specifies the maximum number of peaks to identify.lThe function returns peaks,a Q-by-2 matrix,where Q can range from 0 to numpeaks.Q holds the row and column coordinates of the peaks.If numpeaks is omitted,it defaults to 1.lI =imread(circuit.tif);lrotI=imrotate(I

32、,33,crop);lBW=edge(rotI,canny);lH,T,R=hough(BW);limshow(H,XData,T,YData,R,InitialMagnification,fit);lxlabel(theta),ylabel(rho);laxis on,axis normal,hold on;lP =houghpeaks(H,5,threshold,ceil(0.3*max(H(:);lx=T(P(:,2);y=R(P(:,1);lplot(x,y,s,color,white);l%Find lines and plot themllines=houghlines(BW,T,

33、R,P,FillGap,5,MinLength,7);lfigure,imshow(rotI),hold onlmax_len=0;lfor k=1:length(lines)l xy=lines(k).point1;lines(k).point2;l plot(xy(:,1),xy(:,2),LineWidth,2,Color,green);l%Plot beginnings and ends of linesl plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow);l plot(xy(2,1),xy(2,2),x,LineWidth,2,Colo

34、r,red);l%Determine the endpoints of the longest line segment l len=norm(lines(k).point1-lines(k).point2);l if(len max_len)l max_len=len;l xy_long=xy;l endlendl%highlight the longest line segmentlplot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,cyan);lA=dir(c:wenzhangimage1*.jpg);lfor k=1:size(A)l B=strcat(c:wenzhangimage1,A(k).name);l Image=imread(B);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com