Morphological Image Processing

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)zA}Erodes the boundary of A
⊕ \oplus dilation { z : ( B ^ ) z ⋂ A ≠ ∅ } \{z:(\hat{B})_z \bigcap A \not= \empty\} {z:(B^)zA=}Dilates the boundary of A
∘ \circ opening ( A ⊖ B ) ⊕ B (A \ominus B) \oplus B (AB)BSmoothes contours, breaks narrow isthmuses, and eliminates small islands and sharp peaks.
∙ \bullet closing ( A ⊕ B ) ⊖ B (A\oplus B) \ominus B (AB)BSmoothes 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)zI}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(AB)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 (Xk1B)IcFills holes in A
-connected components ( X k − 1 ⊕ B ) ⋂ I (X_{k-1} \oplus B) \bigcap I (Xk1B)IFinds 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 (Xk1iBi)Xk1iFinds the convex hull
⊗ \otimes thining A − ( A ⊛ B ) A - (A \circledast B) A(AB)Thins set A
⊙ \odot thickening A ⋃ ( A ⊛ B ) A\bigcup (A \circledast B) A(AB)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 (FB)G-
E G ( 1 ) ( F ) E_G^{(1)}(F) EG(1)(F)geodesic erosion ( F ⊖ B ) ⋃ G (F \ominus B) \bigcup G (FB)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(FnB)-
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) IRID(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^={ww=b,for bB},
需要注意的是该反射是以 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={cc=b+z,for bB}.

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} AB={z(B)zA}={wZ2w+bA for every bB}=bB(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 C1C2:

∀ z ∈ C 1 \forall z \in C_1 zC1,
{ 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+bA, for every bBC1C2.

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={wZ2w+bA for every bB}=bB{abZ2A}=bB(A)b.

C 3 ⊂ C 1 C_3 \subset C_1 C3C1:

∀ w ∈ C 2 \forall w \in C_2 wC2:
( B ) w ⊂ A ⇒ C 3 ⊂ C 1 . (B)_w \subset A \Rightarrow C_3 \subset C_1. (B)wAC3C1.

示例

如下图所示, 第一行第一幅图是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} AB={z(B^)zA=}={wZ2w=a+b, for some aA and bB}=bB(A)b=aA(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 zC1:

∃ 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, aA,bB,s.t.b+z=az=a+bzC2,

C 1 ⊂ C 2 . C_1 \subset C_2. C1C2.

∀ w ∈ C 2 \forall w \in C_2 wC2:

∃ 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, aA,bB,s.t.w=a+bb+w=a(B^)wA=,

C 2 ⊂ C 1 . C_2 \subset C_1. C2C1.

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 bB为中心画一个 A A A, C 4 C_4 C4则是以每一个 a ∈ A a \in A aA为中心画一个 B B B.

示例

skimage.morphology.dilation

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} (AB)c={z(B)zA}c={z(B)zAc=}=AcB^.

( 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} (AB)c={z(B^)zA=}c={z(B^)zAc}=AcB^.

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\}. AB=(AB)B=z{(B)z(B)zA}.

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} (AB)B=zAB(B)z=z{(B)z(B)zA}.

示例

skimage.morphology.opening

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. AB=(AB)B=[{(B^)z(B^)zA=}]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, AB=(AB)B=[{(B)z(B)zA=}]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} [(AB)B]c=(AB)cB^=(AcB^)B^=z{(B^)z(B^)zAc}=z{(B^)z(B^)zA=}

示例

skimage.morphology.closing

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}) (AB)c=(AcB^)(AB)c=(AcB^)

( 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. (AB)B=AB(AB)B=AB.

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), IB1,2=(AB1)(AcB2),
此为 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, IB=IB,
只是我们 B B B通常需要一些特殊的性质来使其具有detection的作用.

具体怎么shape detection 还是请回看原文吧.

一些基本的操作

Boundary Extraction

定义:
β ( A ) = A − ( A ⊖ B ) \beta(A) = A - (A \ominus B) β(A)=A(AB)

直观的感觉就是把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=(Xk1B)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=(Xk1B)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=(Xk1iBi)Xk1i,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

convex_hull

Thinning

定义:
A ⊗ B = A − ( A ⊛ B ) = A ⋂ ( A ⊛ B ) c A \otimes B = A - (A \circledast B) = A \bigcap (A \circledast B)^c AB=A(AB)=A(AB)c

skimage.morphology.thin

thin

Thickening

相反的操作:
A ⊙ B = A ⋃ ( A ⊛ B ) . A \odot B = A \bigcup (A \circledast B). AB=A(AB).

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=0KSk(A),Sk(A)=(AkB)(AkB)B(AkB)=((((AB)B))B)K=max{k(AkB)=}.

skimage.morphology.skeletonize

skeleton

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=18(X1Bk)X3=(X2H)AX4=X1X3.

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 FG, 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)=(FB)GDG(n)(F)=DG(1)(DG(n1)(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)=(FB)GEG(n)(F)=EG(1)(EG(n1)(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(k1)(F),RGE(F)=EG(k)(F),if EG(k)(F)=EG(k1)(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(FnB),
直观解释就是, 先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(FnB).

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)={1I(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)]cHIc
感觉还是挺好理解的, 就是从边边, 由于中间部分的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=IRID(F).

能够把边缘的一些部分给去了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值