开操作
开操作简单说就是先腐蚀再膨胀即:
A
∘
B
=
(
A
⊖
B
)
⊕
B
A \circ B = (A \ominus B) \oplus B
A∘B=(A⊖B)⊕B 开操作一般会平滑物体的轮廓、断开狭窄的狭颈并消除突出物。
开操作具有的性质:
(1).
A
A
A
∘
\circ
∘
B
B
B 是
A
A
A 的一个子集(子图像)。
(2).如果
C
C
C 是
D
D
D 的一个子集,那么
C
∘
B
C \circ B
C∘B,则
C
∘
B
C \circ B
C∘B 是
D
∘
B
D \circ B
D∘B 的一个子集。
(3).
(
A
∘
B
)
∘
B
=
A
∘
B
(A \circ B) \circ B = A \circ B
(A∘B)∘B=A∘B
第一个说的是经过开操作后,图像变成原来图像的子集了,第二个说的是图像的子集的开操作是父图像开操作的子集,第三个说的是你怎么开操作就等于进行一次开操作。
开操作的几何解释是用一个"转球"
B
B
B 在
A
A
A 的内侧边缘进行滚动,
B
B
B 所能到达的
A
A
A 的边界的最远点。我们可以认为是一种拟合处理,即:
A
∘
B
=
∪
{
(
B
)
z
∣
(
B
)
z
⊆
A
}
A \circ B = \cup \{(B)_z|(B)_z \subseteq A\}
A∘B=∪{(B)z∣(B)z⊆A}下面的图就是经过边缘提取和开闭操作的图 闭操作
闭操作简单说就是先膨胀再腐蚀即:
A
∙
B
=
(
A
⊕
B
)
⊖
B
A \bullet B = (A \oplus B) \ominus B
A∙B=(A⊕B)⊖B 闭操作也会平滑轮廓的一部分,但和开操作相反的是,它通常会弥合较窄的间断和细长的沟壑。
闭操作具有的性质:
(1).
A
A
A
∙
\bullet
∙
B
B
B 是
A
A
A 的一个子集(子图像)。
(2).如果
C
C
C 是
D
D
D 的一个子集,那么
C
∙
B
C \bullet B
C∙B,则
C
∙
B
C \bullet B
C∙B 是
D
∙
B
D \bullet B
D∙B 的一个子集。
(3).
(
A
∙
B
)
∘
B
=
A
∙
B
(A \bullet B) \circ B = A \bullet B
(A∙B)∘B=A∙B
第一个说的是经过闭操作后,图像变成原来图像的子集了,第二个说的是图像的子集的闭操作是父图像开操作的子集,第三个说的是你怎么开操作就等于进行一次闭操作。
这里对比上面开操作理解就行!
闭操作的几何解释利用对偶的性质,即和开操作相反就行了!就是
B
B
B 在
A
A
A 外边缘滚动。
上面是放大后的图,这是人的指纹,看同一个遍,可能区别不是特别明显,可能是因为结构元的问题,也可能是灰度图像的问题,MATLAB边缘edge和开闭操作后的图像会变成 2 2 2 值图像,本身前面的图像处理就是2值图像。在代码中我用的是先膨胀再腐蚀和先腐蚀再膨胀的用法,并没有用imclose和imopen的函数。就是想对比对比!
a = imread('test2.tif');
subplot(1,4,1);
imshow(a);
title('原始图像','fontsize',20)
b = edge(a,'canny');
subplot(1,4,2);
l = imdilate(b,strel);
imshow(b);
title('canny边缘提取后图像','fontsize',20);
stre = strel('square',5);
c = imdilate(a,stre); %膨胀
d = imerode(c,stre); %再腐蚀
subplot(1,4,3);
imshow(d);
title('开操作后图像','fontsize',20);
h = imerode(a,stre); %腐蚀
g = imdilate(h,stre); %再膨胀
subplot(1,4,4);
imshow(g);
title('闭操作后图像','fontsize',20);
上面说到开闭操作的对偶性,其实是和腐蚀和膨胀是一样的。即
(
A
∙
B
)
c
=
(
A
c
∘
B
^
)
(A \bullet B)^c = (A^c \circ \hat{B})
(A∙B)c=(Ac∘B^)
(
A
∘
B
)
c
=
(
A
c
∙
B
^
)
(A \circ B)^c = (A^c \bullet \hat{B})
(A∘B)c=(Ac∙B^)
不过我觉得,考试的话,不可能让你用集合理论去算东西,人手还是不如计算机的,还是实际应用为主,即如何结合这些操作进行实际的处理,即在数字图像处理后面的形态学处理。包括边界提取、凸壳、等等一系列操作。