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

上传人:本田雅阁 文档编号:2263955 上传时间:2019-03-13 格式:PPT 页数:42 大小:725.01KB
返回 下载 相关 举报
膨胀与腐蚀,radon,hough变换.ppt_第1页
第1页 / 共42页
膨胀与腐蚀,radon,hough变换.ppt_第2页
第2页 / 共42页
膨胀与腐蚀,radon,hough变换.ppt_第3页
第3页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《膨胀与腐蚀,radon,hough变换.ppt》由会员分享,可在线阅读,更多相关《膨胀与腐蚀,radon,hough变换.ppt(42页珍藏版)》请在三一文库上搜索。

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

2、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(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矩阵

3、,P、Q分别为:,算子由0、1构成,有1的位置用来定义算子覆盖区域的邻域。这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有1的地方称为中心点处的邻域。 在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如果图像的算子覆盖邻域内有1,那么覆盖区域中心的输出值就为1,也就是新图像在覆盖区域中心的值为1。否则为0。,程序中读入的图像bc.bmp是白色背景黑色字体,使用语句B=A把图像bc.bmp变为黑色背景白色字体,如图3-16(a)所示。该图像是二值图像,所有数据显示在图3-17中。字体b与c所在范围用灰色标出。,图3-17 二值图像bc.bmp的颜色数据,为了节省篇幅,这里只研究字母b被

4、膨胀后的变化情况。下图中的4个图像都是字母b的变化情况。,(a) 使用M膨胀后的结果,(b) 使用N膨胀后的结果,(c) 使用P膨胀后的结果,(d) 使用Q膨胀后的结果,下面以图3-19为例详细讲解二值图像膨胀运算规则。 图3-19使用的是算子Q。对于算子Q,只要覆盖区域的左下角与右上角至少有一个为1(两个为1也可以),那么在覆盖区域的中心位置的返回值就是1。所以,当算子移动到位置“1”时,因为右上角处颜色值为1,所以在覆盖区域中心(5, 3)处输出颜色值1,如图3-19(b)位置“1”所示。 当算子移动到位置“2”时,因为右上角处颜色值为1(其他处为1不起作用),所以在覆盖区域中心(8, 7

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

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

7、mdilate(B,N); C3=imdilate(B,P); C4=imdilate(B,Q); 修改为: C1=imerode(B,M);C2=imerode(B,N); C3=imerode(B,P);C4=imerode(B,Q); 其他语句不变,程序运行的结果是图3-20。,图3-20 二值图像腐蚀运算,程序中的函数imerode是用来进行腐蚀运算的。腐蚀运算后,原来图像一般会变细变小。,【例3-18】对二值图像实施腐蚀运算,并且与膨胀运算进行比较。 设计下面程序: A = imread(0370.bmp); B=im2bw(A); B=B; M=strel(diamond,3);

8、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-21所示。,(a) 原图像 (b) 腐蚀后的图像 (c) 膨胀后的图像 图3-21 二值图像腐蚀与膨胀比较,函数strel是专门用来生成算子模板的,strel(diamond,3)生成的算子模板为: 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1

9、 1 1 0 0 0 0 0 1 0 0 0 函数strel还可以生成square、line、disk、periodicline、pair、octagon等模板。,该算子模板呈菱形结构,一共有25个1。该算子覆盖区域呈菱形。,3 灰度图像膨胀与腐蚀 灰度图像膨胀腐蚀的定义与二值图像膨胀腐蚀的定义有些区别,一般定义灰度图像膨胀为 定义灰度图像腐蚀为 灰度图像膨胀实质上是求邻域内最大值作为输出;灰度图像腐蚀是求邻域内最小值作为输出。邻域仍然是由各种算子模板来定义的。,【例3-19】对灰度图像实施膨胀腐蚀运算。 设计下面程序 A=imread(D:flower1.bmp); A1=rgb2gray(

10、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 灰度图像膨胀与腐蚀,程序中,strel(square,3);是生成了一个3行3列的矩阵,每个元素都是1。 如果把参数se变成6*6大小方

11、形区域,膨胀或腐蚀的区域变大,所以图形的改变也比较大。如图3-23所示。,(a) 原图像 (b) 膨胀 (c) 腐蚀 图3-23 图像膨胀与腐蚀(块区域为6*6),开运算与闭运算,1 开运算定义如下: 对二值图像来说,开运算能够删除不包含模板形状的对象 区域,能够平滑对象轮廓,断开狭窄的连接,去掉细小的 突出部分。Matlab提供了函数imopen用来完成两个图像的 开运算。 2 闭运算定义如下: 闭运算能平滑图像的轮廓,能将狭窄的缺口连接起来形成 细长的弯口,能填充比模板邻域小的洞。Matlab提供了函 数imclose用来完成两个图像的闭运算。,【例3-20】对图像实施开闭运算。 设计如下

12、程序: 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);生成一个菱形模板,使用该模板对图像B进行开闭运算分别得到图像(矩阵)C2与C2,从图3-24能够看出开闭运算的区别。,(a) 原图像 (b) 开运算 (c) 闭运算

13、 图3-24 图像开运算与闭运算,第4章 图像变换,4.1 图像Radon变换,4.1图像Radon变换,函数Radon Matlab中提供了函数radon用来完成图像Radon变换,该 变换实质上是计算指定方向上图像矩阵的投影。 【例4-1】图像Radon变换。 设计下面程序进行图像的Radon变换。 A= imread(D:0371.bmp); C,x1=radon(A,0); D,x2=radon(A,30); subplot(1,3,1); imshow(A) subplot(1,3,2); plot(x1,C) subplot(1,3,3); plot(x2,D),读入图像,然后调用

14、radon函数,变换后绘制出图4-1(a)-(c)所示图形。可以看到图像变换后得到的是一个线图,也就是说Radon变换后变成了一维数组。变换的基本原理是在指定方向进行灰度投影计算。例如上面程序中的图像0371.bmp大小为172 168,宽度为168。,以图像中心作为原点,向水平方向投影,在区间-84 84上有颜色值(白色为1,黑色为0),颜色值和在100左右,如图图4-1(b)所示。 以图像中心作为原点,向与水平成30度角的方向投影,在稍大一些的区间上有颜色值,颜色值投影相加的情况显示在图4-1(c)中。,为了更好地进行观察,绘制了二值图像0372.bmp,如图4-1(d)所示。使用上面程序

15、,对0372.bmp进行变换,把程序中文件0371.bmp改为0372.bmp即可。得到的结果如图4-1(e)、(f)所示。从这个结果能进一步直观的理解Radon变换。,(a) 被变换的图像A (b) 0度方向投影 (c) 30度方向投影,(d) 被变换的图像B (e) 0度方向投影 (f) 30度方向投影 图4-1 图像radon变换相当于在一定方向上投影,例e1,clear; x=zeros(55,55); x(16:36,16:36)=1; imshow(x); r,xp=radon(x,0); figure; plot(xp,r),例 clear; I=zeros(200,200);

16、A=eye(100,100); I(101:200,1:100)=A; figure, imshow(I);title(orginal image); theta=0:180; R,xp=radon(I,theta); figure,imagesc(theta,xp,R); title(R_theta X); xlabel(theta(degree); ylabel(Xprime); colormap(hot); colorbar; 所求=45度,X=-75左右。意思是在原XY坐标下的45度的直线X上,距离原点75的位置有条与X垂直的直线。此直线真正的45+90=135度,右移-75/sin4

17、5=100的距离。,函数Iradon,Matlab也提供了函数iradon用来进行逆Radon变换。下面例 题4-2先利用radon函数计算一组旋转角度下的Radon变换R ,R是二维数组,记载着对应于每个角度的变换后的数据。 然后利用R及旋转角度,使用函数iradon重建图像。 【例4-2】利用逆Radon变换复原图像。 设计如下程序 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) subp

18、lot(1,3,3); image(D),程序运行结果是图4-2。,(a) 原图像 (b) 变换曲线集合 (c) 复原图像 图4-2 图像逆radon变换复原图像(1),程序中语句T=0:10:180定义了一个向量T,共有19个元素。调用函数语句C, x=radon(B,T)中,如果角度T是一个向量,那么C, x中的C就是一个二维数组,用来表示多条变换后的曲线。多条变换后的曲线绘制在一起,形成图4-2(b)所示图形,横轴表示180度,纵轴表示每条曲线的高度。从图4-2可以看出复原的结果与原图有些差别,这是由于在Radon变换的过程中损失了一些数据等原因造成的。,【例4-3】利用逆Radon变换

19、复原图像,观察复原效果。 下面程序的运行结果如图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.直线检测的意义,直线是图像的基本特征之一。一般物体平面图像的轮廓可近似为直线及

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

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

22、is normal, hold on; P = houghpeaks(H,5); x = T(P(:,2); y = R(P(:,1); plot(x,y,s,color,white); lines = houghlines(BW,T,R,P); figure, imshow(I), hold on max_len = 0; for k = 1:length(lines) xy = lines(k).point1; lines(k).point2; plot(xy(:,1),xy(:,2),Color,green); plot(xy(1,1),xy(1,2),Color,yellow); pl

23、ot(xy(2,1),xy(2,2),Color,red); len = norm(lines(k).point1 - lines(k).point2); if ( len max_len) max_len = len; xy_long = xy; end end plot(xy_long(:,1),xy_long(:,2),Color,cyan);,H, theta, rho = hough(bw)函数,H, theta, rho = hough(BW) computes the Standard Hough Transform (SHT) of the binary image BW. Y

24、ou can use the hough function to detect lines in an image. 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)函数,peaks = houghpeaks(H,numpeaks) locate

25、s peaks in the Hough transform matrix, H, generated by the hough function. numpeaks is a scalar value that specifies the maximum number of peaks to identify. The 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 num

26、peaks is omitted, it defaults to 1.,I = imread(circuit.tif); rotI = imrotate(I,33,crop); BW = edge(rotI,canny); H,T,R = hough(BW); imshow(H,XData,T,YData,R,InitialMagnification,fit); xlabel(theta), ylabel(rho); axis on, axis normal, hold on; P = houghpeaks(H,5,threshold,ceil(0.3*max(H(:); x = T(P(:,

27、2); y = R(P(:,1); plot(x,y,s,color,white); % Find lines and plot them lines = houghlines(BW,T,R,P,FillGap,5,MinLength,7); figure, imshow(rotI), hold on max_len = 0; for k = 1:length(lines) xy = lines(k).point1; lines(k).point2; plot(xy(:,1),xy(:,2),LineWidth,2,Color,green); % Plot beginnings and end

28、s of lines plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow); plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red); % Determine the endpoints of the longest line segment len = norm(lines(k).point1 - lines(k).point2); if ( len max_len) max_len = len; xy_long = xy; end end % highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,cyan);,A=dir(c:wenzhangimage1*.jpg); for k=1:size(A) B=strcat(c:wenzhangimage1,A(k).name); Image=imread(B);,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1