文章目录
Gonzalez R. C. and Woods R. E. Digital Image Processing (Forth Edition)
符号 | 即 | 操作 | 说明 |
---|---|---|---|
⊖ \ominus ⊖ | erosion | { z : ( B ) z ⊂ A } \{z:(B)_z \subset A\} {z:(B)z⊂A} | Erodes the boundary of A |
⊕ \oplus ⊕ | dilation | { z : ( B ^ ) z ⋂ A ≠ ∅ } \{z:(\hat{B})_z \bigcap A \not= \empty\} {z:(B^)z⋂A=∅} | Dilates the boundary of A |
∘ \circ ∘ | opening | ( A ⊖ B ) ⊕ B (A \ominus B) \oplus B (A⊖B)⊕B | Smoothes contours, breaks narrow isthmuses, and eliminates small islands and sharp peaks. |
∙ \bullet ∙ | closing | ( A ⊕ B ) ⊖ B (A\oplus B) \ominus B (A⊕B)⊖B | Smoothes contours, fuses narrow breaks and long thin gulfs, and eliminates small holes. |
⊛ \circledast ⊛ | hit-or-miss | { z : ( B ) z ⊂ I } \{z:(B)_z \subset I\} {z:(B)z⊂I} | Finds I. B contains instances both of foreground B in image and background elements. |
β ( A ) \beta(A) β(A) | boundary extraction | A − ( A ⊖ B ) A - (A \ominus B) A−(A⊖B) | Set of points on the boundary of set A |
- | hole filling | ( X k − 1 ⊕ B ) ⋂ I c (X_{k-1} \oplus B) \bigcap I^c (Xk−1⊕B)⋂Ic | Fills holes in A |
- | connected components | ( X k − 1 ⊕ B ) ⋂ I (X_{k-1} \oplus B) \bigcap I (Xk−1⊕B)⋂I | Finds connected components in I I I. |
C ( A ) C(A) C(A) | convex hull | ( X k − 1 i ⊛ B i ) ⋃ X k − 1 i (X_{k-1}^i \circledast B^i) \bigcup X_{k-1}^i (Xk−1i⊛Bi)⋃Xk−1i | Finds the convex hull |
⊗ \otimes ⊗ | thining | A − ( A ⊛ B ) A - (A \circledast B) A−(A⊛B) | Thins set A |
⊙ \odot ⊙ | thickening | A ⋃ ( A ⊛ B ) A\bigcup (A \circledast B) A⋃(A⊛B) | Thickens set A |
S ( A ) S(A) S(A) | skeleton | $(A \ominus kB) - (A \ominus kB) \circ B $ | Finds the skeleton of set A |
- | pruning | … | X 4 X_4 X4 is the result of pruning set A. |
D G ( 1 ) ( F ) D_G^{(1)}(F) DG(1)(F) | geodesic dilation | ( F ⊕ B ) ⋂ G (F \oplus B) \bigcap G (F⊕B)⋂G | - |
E G ( 1 ) ( F ) E_G^{(1)}(F) EG(1)(F) | geodesic erosion | ( F ⊖ B ) ⋃ G (F \ominus B) \bigcup G (F⊖B)⋃G | - |
R G D ( F ) R_G^D(F) RGD(F) | morphological reconstruction by dilation | R G D ( F ) = D G ( k ) ( F ) R_G^D (F) = D^{(k)}_G (F) RGD(F)=DG(k)(F) | - |
R G E ( F ) R_G^E(F) RGE(F) | morphological reconstruction by erosion | R G E ( F ) = E G ( k ) ( F ) R_G^E (F) = E^{(k)}_G (F) RGE(F)=EG(k)(F) | - |
O R ( n ) ( F ) O_R^{(n)}(F) OR(n)(F) | opening by reconstruction | R F D ( F ⊖ n B ) R_{F}^D (F \ominus nB) RFD(F⊖nB) | - |
C R ( n ) ( F ) C_R^{(n)}(F) CR(n)(F) | closing by reconstruction | $ R_{F}^E (F \oplus nB)$ | - |
- | hole filling | $H = [R_{Ic}D(F)]^c $ | Auto |
- | border clearing | I − R I D ( F ) I - R_I^D(F) I−RID(F) | - |
概
直接把整个章节都拿来是决定这个形态学的东西实在是有趣, 加之前后联系过于紧密, 感觉如果过于割裂会导致以后回忆不起来, 所以直接对整个章节做个笔记得了.
我觉得首先需要牢记的是, 本章节是在集合的基础上讨论的, 对于一个二元图中的物体, 我们可以通过如下集合表示:
{
(
x
1
,
y
1
)
,
⋯
,
(
x
N
,
y
N
)
}
,
\{(x_1, y_1), \cdots, (x_N, y_N)\},
{(x1,y1),⋯,(xN,yN)},
(
x
,
y
)
(x, y)
(x,y)表示值为
1
1
1的坐标(这里假设foreground pixel的值为1, 当然也可以假设其为0).
注: 个人觉得, 这里讨论的时候并非像之前的图片一样以左上角原点, 而是以目标中心为原点然后发散开去(只是单纯便于理解和书写, 实际处理是不受影响的). 也就意味着, x , y x, y x,y是可以为负的, 显然这种表示的好处是不需要确定整个图片的大小范围.
本章节会频繁涉及到objects和structuring elements (SE)的概念, 说实话其具体的定义不是很清楚, 我还是从任务的角度来给它们做个解释.
因为本章节讨论的transform, 通常都是通过SE经过一些集合操作使得objects发生某种改变, 所以objects就是对象. SE
如上图所示, 虽然objects是一个仅仅记录0值的集合, 我们通常将其置于一个矩形区域中, 便于图片的处理, SE也是类似的. 特别的是, SE整体除了0, 1外还可能有 × \times ×的属性, 其表示0或1, 即该位置的点不我们所关心的点, 其可以任意匹配.
reflection and translation
反射, 即
B
^
=
{
w
∣
w
=
−
b
,
for
b
∈
B
}
,
\hat{B} = \{w| w=-b, \text{for } b \in B\},
B^={w∣w=−b,for b∈B},
需要注意的是该反射是以
B
B
B的中心为原点的.
平移, 即
(
B
)
z
=
{
c
∣
c
=
b
+
z
,
for
b
∈
B
}
.
(B)_z = \{c| c= b+z, \text{for } b \in B\}.
(B)z={c∣c=b+z,for b∈B}.
Erosion and Dilation
Erosion
Erosion操作能够令图片中的元素’缩小’, 所以其在处理噪声的时候其实不错. 其定义为:
A
⊖
B
=
{
z
∣
(
B
)
z
⊂
A
}
=
{
w
∈
Z
2
∣
w
+
b
∈
A
for every
b
∈
B
}
=
⋂
b
∈
B
(
A
)
−
b
.
\begin{array}{ll} A \ominus B &= \{z| (B)_z \subset A\} \\ &= \{w \in Z^2 | w + b \in A \text{ for every } b \in B\} \\ &= \mathop{\bigcap} \limits_{b \in B} (A)_{-b}. \end{array}
A⊖B={z∣(B)z⊂A}={w∈Z2∣w+b∈A for every b∈B}=b∈B⋂(A)−b.
proof:
设上面三个定义分别为
C
1
,
C
2
,
C
3
C_1, C_2, C_3
C1,C2,C3.
C
1
⊂
C
2
C_1 \subset C_2
C1⊂C2:
∀
z
∈
C
1
\forall z \in C_1
∀z∈C1,
{
b
1
+
z
,
b
2
+
z
,
⋯
}
⊂
A
,
\{b_1+z, b_2 + z, \cdots\} \subset A,
{b1+z,b2+z,⋯}⊂A,
故
z
+
b
∈
A
,
for every
b
∈
B
⇒
C
1
⊂
C
2
.
z + b \in A, \text{ for every } b \in B \Rightarrow C_1 \subset C_2.
z+b∈A, for every b∈B⇒C1⊂C2.
C 2 = C 3 C_2 = C_3 C2=C3:
C 2 = { w ∈ Z 2 ∣ w + b ∈ A for every b ∈ B } = ⋂ b ∈ B { a − b ∈ Z 2 ∣ ∈ A } = ⋂ b ∈ B ( A ) − b . C_2 = \{w \in Z^2 | w + b \in A \text{ for every } b \in B\} =\bigcap_{b \in B} \{a-b \in Z^2 | \in A\} =\bigcap_{b \in B} (A)_{-b}. C2={w∈Z2∣w+b∈A for every b∈B}=b∈B⋂{a−b∈Z2∣∈A}=b∈B⋂(A)−b.
C 3 ⊂ C 1 C_3 \subset C_1 C3⊂C1:
∀
w
∈
C
2
\forall w \in C_2
∀w∈C2:
(
B
)
w
⊂
A
⇒
C
3
⊂
C
1
.
(B)_w \subset A \Rightarrow C_3 \subset C_1.
(B)w⊂A⇒C3⊂C1.
示例
如下图所示, 第一行第一幅图是object, 通过第二幅SE erosion后object缩小了, 而通过第二行的SE更是直接成了一条线.
skimage.morphology.erosion
[erosion](Module: morphology — skimage v0.19.0.dev0 docs (scikit-image.org))
import numpy as np
import matplotlib.pyplot as plt
from skimage.morphology import erosion, disk
def plot_comparison(original, filtered, filter_name):
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4), sharex=True,
sharey=True)
ax1.imshow(original, cmap=plt.cm.gray)
ax1.set_title('original')
ax1.axis('off')
ax2.imshow(filtered, cmap=plt.cm.gray)
ax2.set_title(filter_name)
ax2.axis('off')
img = np.ones((100, 100))
arow = np.zeros((10, 100))
img = np.vstack((arow, img, arow))
acol = np.zeros((120, 10))
img = np.hstack((acol, img, acol)).astype(np.uint8)
fig, ax = plt.subplots()
ax.imshow(img, cmap=plt.cm.gray)
footprint = disk(6) # {0, 1}, 半径为6的圆, 中心元素为1其余为0
eroded = erosion(img, footprint)
plot_comparison(img, eroded, 'erosion')
dilation
dilation的效果是令图中的元素进行扩张, 一些扫描的文本图像可能字符剑有断痕, 通过此可以修复.
其集合定义为:
A
⊕
B
=
{
z
∣
(
B
^
)
z
⋂
A
≠
∅
}
=
{
w
∈
Z
2
∣
w
=
a
+
b
,
for some
a
∈
A
and
b
∈
B
}
=
⋃
b
∈
B
(
A
)
b
=
⋃
a
∈
A
(
B
)
a
.
\begin{array}{ll} A \oplus B &= \{z| (\hat{B})_z \bigcap A \not= \empty\} \\ &= \{w \in Z^2| w = a+ b, \text{ for some } a \in A \text{ and } b \in B\}\\ &= \mathop{\bigcup}_{b \in B} (A)_b \\ &= \mathop{\bigcup}_{a \in A} (B)_a. \end{array}
A⊕B={z∣(B^)z⋂A=∅}={w∈Z2∣w=a+b, for some a∈A and b∈B}=⋃b∈B(A)b=⋃a∈A(B)a.
proof:
记上面四种定义各自为 C 1 , C 2 , C 3 , C 4 C_1, C_2, C_3, C_4 C1,C2,C3,C4:
C 1 = C 2 C_1 = C_2 C1=C2:
∀ z ∈ C 1 \forall z \in C_1 ∀z∈C1:
∃
a
∈
A
,
b
∈
B
,
s
.
t
.
−
b
+
z
=
a
→
z
=
a
+
b
→
z
∈
C
2
,
\exist a \in A, b \in B, \quad \mathrm{s.t.} \: -b + z = a \rightarrow z = a + b \rightarrow z \in C_2,
∃a∈A,b∈B,s.t.−b+z=a→z=a+b→z∈C2,
故
C
1
⊂
C
2
.
C_1 \subset C_2.
C1⊂C2.
∀ w ∈ C 2 \forall w \in C_2 ∀w∈C2:
∃
a
∈
A
,
b
∈
B
,
s
.
t
.
w
=
a
+
b
→
−
b
+
w
=
a
→
(
B
^
)
w
⋂
A
≠
∅
,
\exist a \in A, b \in B, \quad \mathrm{s.t.} \: w = a+b \rightarrow -b + w = a \rightarrow (\hat{B})_w \bigcap A \not= \empty,
∃a∈A,b∈B,s.t.w=a+b→−b+w=a→(B^)w⋂A=∅,
故
C
2
⊂
C
1
.
C_2 \subset C_1.
C2⊂C1.
C 2 = C 3 = C 4 C_2 = C_3 = C_4 C2=C3=C4:
显然.
最后两个定义是很直观的, C 3 C_3 C3相当于对于每一个点 b ∈ B b\in B b∈B为中心画一个 A A A, C 4 C_4 C4则是以每一个 a ∈ A a \in A a∈A为中心画一个 B B B.
示例
skimage.morphology.dilation
from skimage.morphology import dilation
footprint = disk(6) # {0, 1}, 半径为6的圆, 中心元素为1其余为0
dilated = dilation(eroded, footprint)
plot_comparison(eroded, dilated, 'dilation')
注: 圆角实际上是下一节的东西.
对偶性
( A ⊖ B ) c = { z ∣ ( B ) z ⊂ A } c = { z ∣ ( B ) z ⋂ A c ≠ ∅ } = A c ⊕ B ^ . \begin{array}{ll} (A\ominus B)^c &= \{z| (B)_z \subset A\}^c \\ &= \{z| (B)_z \bigcap A^c \not = \empty\} \\ &= A^c \oplus \hat{B}. \end{array} (A⊖B)c={z∣(B)z⊂A}c={z∣(B)z⋂Ac=∅}=Ac⊕B^.
( A ⊕ B ) c = { z ∣ ( B ^ ) z ⋂ A ≠ ∅ } c = { z ∣ ( B ^ ) z ⊂ A c } = A c ⊖ B ^ . \begin{array}{ll} (A\oplus B)^c &= \{z| (\hat{B})_z \bigcap A \not= \empty \}^c \\ &= \{z| (\hat{B})_z \subset A^c\} \\ &= A^c \ominus \hat{B}. \end{array} (A⊕B)c={z∣(B^)z⋂A=∅}c={z∣(B^)z⊂Ac}=Ac⊖B^.
Opening and Closing
二者都有一种将目标变圆滑的效果.
Opening
定义:
A ∘ B = ( A ⊖ B ) ⊕ B = ⋃ z { ( B ) z ∣ ( B ) z ⊂ A } . A \circ B = (A \ominus B) \oplus B = \mathop{\bigcup} \limits_{z} \{(B)_z | (B)_z \subset A\}. A∘B=(A⊖B)⊕B=z⋃{(B)z∣(B)z⊂A}.
proof:
( A ⊖ B ) ⊕ B = ⋃ z ∈ A ⊖ B ( B ) z = ⋃ z { ( B ) z ∣ ( B ) z ⊂ A } . \begin{array}{ll} (A \ominus B) \oplus B &= \bigcup_{z \in A \ominus B} (B)_z \\ &= \bigcup_{z} \{(B)_z| (B)_z \subset A\}. \end{array} (A⊖B)⊕B=⋃z∈A⊖B(B)z=⋃z{(B)z∣(B)z⊂A}.
示例
skimage.morphology.opening
from skimage.morphology import opening
footprint = disk(6)
opened = opening(img, footprint)
plot_comparison(img, opened, 'opening')
Closing
定义:
A ∙ B = ( A ⊕ B ) ⊖ B = [ ⋃ { ( B ^ ) z ∣ ( B ^ ) z ⋂ A = ∅ } ] c . A \bullet B = (A \oplus B) \ominus B = [\bigcup \{(\hat{B})_z| (\hat{B})_z \bigcap A = \empty\}]^c. A∙B=(A⊕B)⊖B=[⋃{(B^)z∣(B^)z⋂A=∅}]c.
注: 书中为:
A
∙
B
=
(
A
⊕
B
)
⊖
B
=
[
⋃
{
(
B
)
z
∣
(
B
)
z
⋂
A
=
∅
}
]
c
,
A \bullet B = (A \oplus B) \ominus B = [\bigcup \{(B)_z| (B)_z \bigcap A = \empty\}]^c,
A∙B=(A⊕B)⊖B=[⋃{(B)z∣(B)z⋂A=∅}]c,
但感觉不一样啊.
proof:
[ ( A ⊕ B ) ⊖ B ] c = ( A ⊕ B ) c ⊕ B ^ = ( A c ⊖ B ^ ) ⊕ B ^ = ⋃ z { ( B ^ ) z ∣ ( B ^ ) z ⊂ A c } = ⋃ z { ( B ^ ) z ∣ ( B ^ ) z ⋂ A = ∅ } \begin{array}{ll} [(A \oplus B) \ominus B]^c &= (A \oplus B)^c \oplus \hat{B} \\ &= (A^c \ominus \hat{B}) \oplus \hat{B} \\ &= \bigcup_z \{(\hat{B})_z | (\hat{B})_z \subset A^c\} \\ &= \bigcup_z \{(\hat{B})_z | (\hat{B})_z \bigcap A = \empty\} \\ \end{array} [(A⊕B)⊖B]c=(A⊕B)c⊕B^=(Ac⊖B^)⊕B^=⋃z{(B^)z∣(B^)z⊂Ac}=⋃z{(B^)z∣(B^)z⋂A=∅}
示例
skimage.morphology.closing
from skimage.morphology import closing
footprint = disk(6)
closed = opening(img, footprint)
plot_comparison(img, closed, 'closing')
对偶性
(
A
∘
B
)
c
=
(
A
c
∙
B
^
)
(
A
∙
B
)
c
=
(
A
c
∘
B
^
)
(A \circ B)^c = (A^c \bullet \hat{B}) \\ (A \bullet B)^c = (A^c \circ \hat{B})
(A∘B)c=(Ac∙B^)(A∙B)c=(Ac∘B^)
且
(
A
∘
B
)
∘
B
=
A
∘
B
(
A
∙
B
)
∙
B
=
A
∙
B
.
(A \circ B) \circ B = A \circ B \\ (A \bullet B) \bullet B = A \bullet B.
(A∘B)∘B=A∘B(A∙B)∙B=A∙B.
The Hit-or-Miss Transform
主要用于shape detection.
定义:
I
⊛
B
1
,
2
=
(
A
⊖
B
1
)
⋂
(
A
c
⊖
B
2
)
,
I \circledast B_{1,2} = (A \ominus B_1) \bigcap (A^c \ominus B_2),
I⊛B1,2=(A⊖B1)⋂(Ac⊖B2),
此为
B
1
,
B
2
B_1, B_2
B1,B2不包含
0
0
0元素的情形, 倘若允许
B
B
B包含0元素, 那么
I
⊛
B
=
I
⊖
B
,
I \circledast B = I \ominus B,
I⊛B=I⊖B,
只是我们
B
B
B通常需要一些特殊的性质来使其具有detection的作用.
具体怎么shape detection 还是请回看原文吧.
一些基本的操作
Boundary Extraction
定义:
β
(
A
)
=
A
−
(
A
⊖
B
)
\beta(A) = A - (A \ominus B)
β(A)=A−(A⊖B)
直观的感觉就是把object的中间部分挖掉.
Hole Filling
假设在我们想填的hole中已知一个点, 以这个点为基础出发(记为
X
0
X_0
X0):
X
k
=
(
X
k
−
1
⊕
B
)
⋂
I
c
,
k
=
1
,
2
,
3
,
⋯
,
X_k = (X_{k-1} \oplus B) \bigcap I^c, k=1,2,3,\cdots,
Xk=(Xk−1⊕B)⋂Ic,k=1,2,3,⋯,
停止准则为
X
k
=
X
k
+
1
.
X_k = X_{k+1}.
Xk=Xk+1.
不过需要注意的是, B B B应该选择下面类型的(如果是全满的话可能跳出hole了).
Extraction of Connected Components
抓取连通区域, 假设已知在我们想抓取的连通区域的一点, 从这个点出发(记为
X
0
X_0
X0):
X
k
=
(
X
k
−
1
⊕
B
)
⋂
I
,
k
=
1
,
2
,
⋯
,
X_k = (X_{k-1} \oplus B) \bigcap I, k=1,2,\cdots,
Xk=(Xk−1⊕B)⋂I,k=1,2,⋯,
直到
X
k
+
1
=
X
k
.
X_{k+1} = X_k.
Xk+1=Xk.
Convex Hull
将一个object填补成凸的, 这个说实话没怎么看明白.
X
k
i
=
(
X
k
−
1
i
⊛
B
i
)
⋃
X
k
−
1
i
,
i
=
1
,
2
,
3
,
4
,
k
=
1
,
2
,
⋯
X
0
i
=
I
.
X_k^i = (X_{k-1}^i \circledast B^i) \bigcup X_{k-1}^i, i=1,2,3,4, k=1,2,\cdots \\ X_0^i = I.
Xki=(Xk−1i⊛Bi)⋃Xk−1i,i=1,2,3,4,k=1,2,⋯X0i=I.
当
X
k
+
1
i
=
X
k
i
X_{k+1}^i = X_{k}^i
Xk+1i=Xki
时停止, 记其为
D
i
D^i
Di, 最后的convex hull 为
C
(
A
)
=
⋃
i
=
1
4
D
i
.
C(A) = \mathop{\bigcup}_{i=1}^4 D^i.
C(A)=⋃i=14Di.
总感觉这个不是最小的凸包啊.
skimage.morphology.convex_hull_image
Thinning
定义:
A
⊗
B
=
A
−
(
A
⊛
B
)
=
A
⋂
(
A
⊛
B
)
c
A \otimes B = A - (A \circledast B) = A \bigcap (A \circledast B)^c
A⊗B=A−(A⊛B)=A⋂(A⊛B)c
skimage.morphology.thin
Thickening
相反的操作:
A
⊙
B
=
A
⋃
(
A
⊛
B
)
.
A \odot B = A \bigcup (A \circledast B).
A⊙B=A⋃(A⊛B).
Skeletons
其严格的定义有些复杂, 感觉有点拓扑结构?
S ( A ) = ⋃ k = 0 K S k ( A ) , S k ( A ) = ( A ⊖ k B ) − ( A ⊖ k B ) ∘ B ( A ⊖ k B ) = ( ( … ( ( A ⊖ B ) ⊖ B ) ⊖ … ) ⊖ B ) K = max { k ∣ ( A ⊖ k B ) ≠ ∅ } . S(A) = \mathop{\bigcup} \limits_{k=0}^K S_k(A), \\ S_k(A) = (A \ominus kB) - (A \ominus kB) \circ B \\ (A \ominus kB) = ((\ldots ((A\ominus B) \ominus B)\ominus \ldots) \ominus B)\\ K = \max \{k| (A \ominus kB) \not = \empty \}. S(A)=k=0⋃KSk(A),Sk(A)=(A⊖kB)−(A⊖kB)∘B(A⊖kB)=((…((A⊖B)⊖B)⊖…)⊖B)K=max{k∣(A⊖kB)=∅}.
skimage.morphology.skeletonize
Pruning
pruning 方法用于去掉别的方法留下的一些spurs:
X 1 = A ⊗ { B } X 2 = ⋃ k = 1 8 ( X 1 ⊛ B k ) X 3 = ( X 2 ⊕ H ) ⋂ A X 4 = X 1 ⋃ X 3 . X_1 = A \otimes \{B\} \\ X_2 = \mathop{\bigcup} \limits_{k=1}^8 (X_1 \circledast B^k) \\ X_3 = (X_2 \oplus H) \bigcap A \\ X_4 = X_1 \bigcup X_3. X1=A⊗{B}X2=k=1⋃8(X1⊛Bk)X3=(X2⊕H)⋂AX4=X1⋃X3.
B k B^k Bk为下图的一系列(而 { B } \{B\} {B}为其中一部分不一定全部用到):
Morphological Reconstruction
Morphological Reconstruction除了之前用到的 F , B F, B F,B外, 还要额外用到一个图片(称为mask)作为一个reconstruction的limit.
Geodesic Dilation and Erosion
假设
F
⊂
G
F \subset G
F⊂G, geodesic dilation:
D
G
(
1
)
(
F
)
=
(
F
⊕
B
)
⋂
G
D
G
(
n
)
(
F
)
=
D
G
(
1
)
(
D
G
(
n
−
1
)
(
F
)
)
,
D
G
(
0
)
(
F
)
=
F
.
D_G^{(1)} (F) = (F \oplus B) \bigcap G \\ D_G^{(n)} (F) = D_G^{(1)} (D_G^{(n-1)} (F)), \quad D_G^{(0)} (F) = F.
DG(1)(F)=(F⊕B)⋂GDG(n)(F)=DG(1)(DG(n−1)(F)),DG(0)(F)=F.
geodesic erosion:
E
G
(
1
)
(
F
)
=
(
F
⊖
B
)
⋃
G
E
G
(
n
)
(
F
)
=
E
G
(
1
)
(
E
G
(
n
−
1
)
(
F
)
)
,
E
G
(
0
)
(
F
)
=
F
.
E_G^{(1)}(F) = (F \ominus B) \bigcup G \\ E_G^{(n)}(F) = E_G^{(1)}(E_G^{(n-1)}(F)), \quad E_G^{(0)}(F) = F.
EG(1)(F)=(F⊖B)⋃GEG(n)(F)=EG(1)(EG(n−1)(F)),EG(0)(F)=F.
直观上很好解释, 即geodesic dilation在扩张的时候不能超过 G G G, 而geodesic erosion在收缩的时候不会少于 G G G.
Morphological Reconstruction by Dilation and by Erosion
定义很简单, 即重复上述操作直到收敛:
R
G
D
(
F
)
=
D
G
(
k
)
(
F
)
,
if
D
G
(
k
)
(
F
)
=
D
G
(
k
−
1
)
(
F
)
,
R
G
E
(
F
)
=
E
G
(
k
)
(
F
)
,
if
E
G
(
k
)
(
F
)
=
E
G
(
k
−
1
)
(
F
)
.
R_G^D (F) = D^{(k)}_G (F), \quad \text{if } D^{(k)}_G (F) = D^{(k-1)}_G (F), \\ R_G^E (F) = E^{(k)}_G (F), \quad \text{if } E^{(k)}_G (F) = E^{(k-1)}_G (F).
RGD(F)=DG(k)(F),if DG(k)(F)=DG(k−1)(F),RGE(F)=EG(k)(F),if EG(k)(F)=EG(k−1)(F).
Opening|Closing by Reconstruction
O
R
(
n
)
(
F
)
=
R
F
D
(
F
⊖
n
B
)
,
O_R^{(n)}(F) = R_{F}^D (F \ominus nB),
OR(n)(F)=RFD(F⊖nB),
直观解释就是, 先erosion
n
n
n次, 再在此基础上不断扩张(受限于
F
F
F).
Closing by Reconstruction 就是:
C
R
(
n
)
(
F
)
=
R
F
E
(
F
⊕
n
B
)
.
C_R^{(n)}(F) = R_{F}^E (F \oplus nB).
CR(n)(F)=RFE(F⊕nB).
Automatic Algorithm for Filling Holes
之前介绍的hole filling需要一个点为基础, 这个算法是全自动的.
F
(
x
,
y
)
=
{
1
−
I
(
x
,
y
)
if
(
x
,
y
)
is on the border of
I
0
otherwise
.
F(x, y) = \left \{ \begin{array}{ll} 1 - I(x, y) & \text{if } (x, y) \text{ is on the border of } I \\ 0 & \text{otherwise}. \end{array} \right .
F(x,y)={1−I(x,y)0if (x,y) is on the border of Iotherwise.
H
=
[
R
I
c
D
(
F
)
]
c
H
⋂
I
c
H = [R_{I^c}^D(F)]^c \\ H \bigcap I^c
H=[RIcD(F)]cH⋂Ic
感觉还是挺好理解的, 就是从边边, 由于中间部分的hole一定会被包围起来, 所以
H
c
H^c
Hc一定不包含中间部分的hole.
Border Clearing
F
(
x
,
y
)
=
{
I
(
x
,
y
)
if
(
x
,
y
)
is on the border of
I
0
otherwise
.
F(x, y) = \left \{ \begin{array}{ll} I(x, y) & \text{if } (x, y) \text{ is on the border of } I \\ 0 & \text{otherwise}. \end{array} \right .
F(x,y)={I(x,y)0if (x,y) is on the border of Iotherwise.
X
=
I
−
R
I
D
(
F
)
.
X = I - R_{I}^D(F).
X=I−RID(F).
能够把边缘的一些部分给去了.