膨胀与腐蚀
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学上,二值图像膨胀运算可以用集合定义如下:
A?
B
?
? ?
z
?
|
(
?
B
)
z
?A
?
?
? ?
?
其中,A为原图像,B为算子。就是上面描述的那种覆盖操 作,是空集,是计算后的输出值。
2 二值图像腐蚀运算 二值图像腐蚀运算本质上也是逻 辑运算,可以用如下数学定义描述二值图像腐蚀运算:
A
B
?
? ?
z
?
|
(
?
B)
在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如 果图像的算子覆盖邻域内有1,那么覆盖区域中心的输出值就 为1,也就是新图像在覆盖区域中心的值为1。否则为0。
程序中读入的图像bc.bmp 是白色背景黑色字体,使用语句 B=~A把图像bc.bmp 变为黑色背景白色字体,如图3-16(a)所示。 该图像是二值图像,所有数据显示在图 3-17中。字体b 与c所 在范围用灰色标出。
二值图像膨胀与腐蚀
一般来说对于二值图像,膨胀运算后图像中物体 “加
长”或“变粗”;腐蚀运算后图像中物体“收缩” 或“细
化”。下面先通过一些例题观察分析膨胀与腐蚀后 的
效果,总结二值图像膨胀与腐蚀运算的方法与原则, 最后给出二值图像膨胀与腐蚀运算的准确描述以及 简单的应用。
1 二值图像膨胀运算
先通过下面例题观察分析几个二值图像膨胀算子的
(a) 图像3-16(a)的一部分,即有字母b的那部分,图3-17左边的一部分数据
(b) 图(a)使用Q膨胀后的部分结果,即3-18(d)的放大。 图3-19 二值图像膨胀运算规则
其他算子的运算规则都与上面所述相同。运算结果与原 图像有关,算子形状与图像的邻域情况决定了运算结果 。
另外,从上面描述情况看,二值图像膨胀运算本质上是 逻辑运算。
C3=imerode(B,P);C4=imerode(B,Q);
其他语句不变,程序运行的结果是图3-20。
图3-20 二值图像腐蚀运算
【例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-21所示。
(a) 原图像
(b) 腐蚀后的图像 图3-21 二值图像腐蚀与膨胀比较
(c) 膨胀后的图像
函数strel是专门用来生成算子模板的,strel('diamond',3)生成
的算子模板为:
0 0 0 1 0 0 0 该算子模板呈菱形结
0 0 1
0 1 1
1 1 1
1 1 1
图3-17 二值图像bc.bmp的颜色数据
为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下 图中的4个图像都是字母b的变化情况。
(a)
(b)
M
N
果结的后胀膨 用使
果结的后胀膨 用使
果结的后胀膨 用使
果结的后胀膨 用使
(c)
(d)
P
Q
下面以图3-19为例详细讲解二值图像膨胀运算规则。
图3-19使用的是算子Q。对于算子Q,只要覆盖区域的左 下角与右上角至少有一个为 1(两个为1也可以),那么在 覆盖区域的中心位置的返回值就是 1。所以,当算子移动 到位置“1”时,因为右上角处颜色值为1,所以在覆盖区 域中心(5, 3)处输出颜色值1,如图3-19(b)位置“1”所 示。
【例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);
程序中的函数 imerode是用来 进行腐蚀运算的。 腐蚀运算后,原 来图像一般会变 细变小。
当算子移动到位置“2”时,因为右上角处颜色值为1(其 他处为1不起作用),所以在覆盖区域中心(8, 7)处输出 颜色值1,如图3-19(b) 位置“2”所示。
当算子移动到位置“3”时,因为左下角与右上角处颜色值 都不为1,所以在覆盖区域中心(12, 9)处输出颜色值0, 如图3-19(b)位置“3”所示。
(a)
(b)
(c)
(d)
(e)
图3-16 二值图像的膨胀运算
M、N、P、Q是4个算子,M是一个列向量,N是一个行向量。
P、Q都是[3 3] 矩阵,P、Q分别为: ?0 0 1?
P ? ??0
1
0
? ?
??0 0 0??
?0 0 1 ? Q ? ??0 0 0??
??1 0 0 ??
算子由0、1构成,有1的位置用来定义算子覆盖区域的邻域。 这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有 1的地方称为中心点处的邻域。
【例3-16】对二值图像实施膨胀运算。 设计如下程序,结果显示在图3-16中。 A = imread('C:\MATLAB6p5\work\bc.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(1,5,4); imshow(C3) subplot(1,5,5); imshow(C4)
1 1 1
z
?A
c
?
?
? ?
百度文库
?
其中,A为原图像,B为算子。Ac是A的补集。是移动覆 盖操作,是空集,是计算后的输出值。
在进行腐蚀运算时,算子移动一下,输出一个新值赋给 算子覆盖处的中心位置。计算输出值的方法是:如果算 子覆盖邻域内图像像素值有为0的,那么中心位置的输出 值为0,否则为1。
根据上面定义与说明,结合下面例3-17来理解图像腐蚀运 算规则。
A?
B
?
? ?
z
?
|
(
?
B
)
z
?A
?
?
? ?
?
其中,A为原图像,B为算子。就是上面描述的那种覆盖操 作,是空集,是计算后的输出值。
2 二值图像腐蚀运算 二值图像腐蚀运算本质上也是逻 辑运算,可以用如下数学定义描述二值图像腐蚀运算:
A
B
?
? ?
z
?
|
(
?
B)
在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如 果图像的算子覆盖邻域内有1,那么覆盖区域中心的输出值就 为1,也就是新图像在覆盖区域中心的值为1。否则为0。
程序中读入的图像bc.bmp 是白色背景黑色字体,使用语句 B=~A把图像bc.bmp 变为黑色背景白色字体,如图3-16(a)所示。 该图像是二值图像,所有数据显示在图 3-17中。字体b 与c所 在范围用灰色标出。
二值图像膨胀与腐蚀
一般来说对于二值图像,膨胀运算后图像中物体 “加
长”或“变粗”;腐蚀运算后图像中物体“收缩” 或“细
化”。下面先通过一些例题观察分析膨胀与腐蚀后 的
效果,总结二值图像膨胀与腐蚀运算的方法与原则, 最后给出二值图像膨胀与腐蚀运算的准确描述以及 简单的应用。
1 二值图像膨胀运算
先通过下面例题观察分析几个二值图像膨胀算子的
(a) 图像3-16(a)的一部分,即有字母b的那部分,图3-17左边的一部分数据
(b) 图(a)使用Q膨胀后的部分结果,即3-18(d)的放大。 图3-19 二值图像膨胀运算规则
其他算子的运算规则都与上面所述相同。运算结果与原 图像有关,算子形状与图像的邻域情况决定了运算结果 。
另外,从上面描述情况看,二值图像膨胀运算本质上是 逻辑运算。
C3=imerode(B,P);C4=imerode(B,Q);
其他语句不变,程序运行的结果是图3-20。
图3-20 二值图像腐蚀运算
【例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-21所示。
(a) 原图像
(b) 腐蚀后的图像 图3-21 二值图像腐蚀与膨胀比较
(c) 膨胀后的图像
函数strel是专门用来生成算子模板的,strel('diamond',3)生成
的算子模板为:
0 0 0 1 0 0 0 该算子模板呈菱形结
0 0 1
0 1 1
1 1 1
1 1 1
图3-17 二值图像bc.bmp的颜色数据
为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下 图中的4个图像都是字母b的变化情况。
(a)
(b)
M
N
果结的后胀膨 用使
果结的后胀膨 用使
果结的后胀膨 用使
果结的后胀膨 用使
(c)
(d)
P
Q
下面以图3-19为例详细讲解二值图像膨胀运算规则。
图3-19使用的是算子Q。对于算子Q,只要覆盖区域的左 下角与右上角至少有一个为 1(两个为1也可以),那么在 覆盖区域的中心位置的返回值就是 1。所以,当算子移动 到位置“1”时,因为右上角处颜色值为1,所以在覆盖区 域中心(5, 3)处输出颜色值1,如图3-19(b)位置“1”所 示。
【例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);
程序中的函数 imerode是用来 进行腐蚀运算的。 腐蚀运算后,原 来图像一般会变 细变小。
当算子移动到位置“2”时,因为右上角处颜色值为1(其 他处为1不起作用),所以在覆盖区域中心(8, 7)处输出 颜色值1,如图3-19(b) 位置“2”所示。
当算子移动到位置“3”时,因为左下角与右上角处颜色值 都不为1,所以在覆盖区域中心(12, 9)处输出颜色值0, 如图3-19(b)位置“3”所示。
(a)
(b)
(c)
(d)
(e)
图3-16 二值图像的膨胀运算
M、N、P、Q是4个算子,M是一个列向量,N是一个行向量。
P、Q都是[3 3] 矩阵,P、Q分别为: ?0 0 1?
P ? ??0
1
0
? ?
??0 0 0??
?0 0 1 ? Q ? ??0 0 0??
??1 0 0 ??
算子由0、1构成,有1的位置用来定义算子覆盖区域的邻域。 这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有 1的地方称为中心点处的邻域。
【例3-16】对二值图像实施膨胀运算。 设计如下程序,结果显示在图3-16中。 A = imread('C:\MATLAB6p5\work\bc.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(1,5,4); imshow(C3) subplot(1,5,5); imshow(C4)
1 1 1
z
?A
c
?
?
? ?
百度文库
?
其中,A为原图像,B为算子。Ac是A的补集。是移动覆 盖操作,是空集,是计算后的输出值。
在进行腐蚀运算时,算子移动一下,输出一个新值赋给 算子覆盖处的中心位置。计算输出值的方法是:如果算 子覆盖邻域内图像像素值有为0的,那么中心位置的输出 值为0,否则为1。
根据上面定义与说明,结合下面例3-17来理解图像腐蚀运 算规则。