资源描述:
《膨胀与腐蚀,radon,hough变换》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、二值图像膨胀与腐蚀一般来说对于二值图像,膨胀运算后图像中物体“加长”或“变粗”;腐蚀运算后图像中物体“收缩”或“细化”。下面先通过一些例题观察分析膨胀与腐蚀后的效果,总结二值图像膨胀与腐蚀运算的方法与原则,最后给出二值图像膨胀与腐蚀运算的准确描述以及简单的应用。1二值图像膨胀运算先通过下面例题观察分析几个二值图像膨胀算子的不同效果。【例3-16】对二值图像实施膨胀运算。设计如下程序,结果显示在图3-16中。A=imread('C:MATLAB6p5workbc.bmp');B=~A;M=[1;1;1];N=[110];P=[001;0
2、10;000];Q=[001;000;100];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是一个行向量
3、。P、Q都是[33]矩阵,P、Q分别为:算子由0、1构成,有1的位置用来定义算子覆盖区域的邻域。这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有1的地方称为中心点处的邻域。在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如果图像的算子覆盖邻域内有1,那么覆盖区域中心的输出值就为1,也就是新图像在覆盖区域中心的值为1。否则为0。程序中读入的图像bc.bmp是白色背景黑色字体,使用语句B=~A把图像bc.bmp变为黑色背景白色字体,如图3-16(a)所示。该图像是二值图像,所有数据显示在图3-17中。字体b与c所在范围用灰色标出。图3
4、-17二值图像bc.bmp的颜色数据为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下图中的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”所示。当
5、算子移动到位置“2”时,因为右上角处颜色值为1(其他处为1不起作用),所以在覆盖区域中心(8,7)处输出颜色值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二值图像膨胀运算规则其他算子的运算规则都与上面所述相同。运算结果与原图像有关,算子形状与图像的邻域情况决
6、定了运算结果。另外,从上面描述情况看,二值图像膨胀运算本质上是逻辑运算。数学上,二值图像膨胀运算可以用集合定义如下:其中,A为原图像,B为算子。就是上面描述的那种覆盖操作,是空集,是计算后的输出值。2二值图像腐蚀运算二值图像腐蚀运算本质上也是逻辑运算,可以用如下数学定义描述二值图像腐蚀运算:其中,A为原图像,B为算子。Ac是A的补集。是移动覆盖操作,是空集,是计算后的输出值。在进行腐蚀运算时,算子移动一下,输出一个新值赋给算子覆盖处的中心位置。计算输出值的方法是:如果算子覆盖邻域内图像像素值有为0的,那么中心位置的输出值为0,否则为1。根据
7、上面定义与说明,结合下面例3-17来理解图像腐蚀运算规则。【例3-17】对二值图像实施腐蚀运算。把3-16中程序语句:C1=imdilate(B,M);C2=imdilate(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是用来进行腐蚀运算的。腐蚀运算后,原来图像一般会变细变小。【例
8、3-18】对二值图像实施腐蚀运算,并且与膨胀运算进行比较。设计下面程序:A=imread('0370.bmp');B=im2bw(A);B=~B;M=strel('diamond