图像的形态学处理
二值的形态学图像处理
首先先看两种不同的数学集合操作
- 取反操作
A c = { x ∣ x ∉ A } A^c = \lbrace x | x\notin A\rbrace Ac={x∣x∈/A} - 位移操作
A x = { y ∣ y = a + x , a ∈ A } A_x = \lbrace y|y=a+x,a\in A \rbrace Ax={y∣y=a+x,a∈A}
形态学处理图像操作
在了解形态学基本处理操作前,先了解几个概念
1,结构化要素(Structure Element),通常简称为SE,这个概念理解起来很简单,可以类比卷积运算中的Kernel,也就是卷积核,这个东西和卷积核不同点在于kernel默认了kernel center在正中心,而SE的center不一定在正中间,这样就使得SE具有一定的方向性
而且,下面的内容全部都是基于二值化图像进行的操作。
1,膨胀 Binary Dilation
D
(
F
,
K
)
=
F
⊕
K
=
⋃
b
∈
K
(
{
a
+
b
∣
a
∈
F
}
)
D(F,K) = F \oplus K = \bigcup_{b \in K }(\lbrace a+b|a\in F\rbrace)
D(F,K)=F⊕K=b∈K⋃({a+b∣a∈F})
这个公式看起来很复杂,表述的是对于任意属于原图像F的点a和属于一个结构化要素的K中的任意一个点进行平移操作,得到一系列的新的图像集合,然后将这些图像集合取交集,就得到了Dilation之后的图像
2,腐蚀 Binary Erosion
E
(
F
,
K
)
=
F
⊖
K
=
⋂
b
∈
K
(
{
a
−
b
∣
a
∈
F
}
)
E(F,K) = F \ominus K = \bigcap_{b \in K}(\lbrace a-b|a \in F \rbrace)
E(F,K)=F⊖K=b∈K⋂({a−b∣a∈F})
Dilation and Erosion 是不可逆的操作
3,开操作 Binary Opening
O
(
F
,
K
)
=
F
∘
K
=
(
F
⊖
K
)
⊕
K
O(F,K) = F \circ K = (F \ominus K)\oplus K
O(F,K)=F∘K=(F⊖K)⊕K
清除比SE小的区域
4,闭操作 Binary Closeing
C
(
F
,
K
)
=
F
⋅
K
=
(
F
⊕
K
)
⊖
K
C(F,K) = F \cdot K = (F \oplus K) \ominus K
C(F,K)=F⋅K=(F⊕K)⊖K
类似于填海造田
5,细化
6,粗化
7,对偶性
二值形态学的相关算法
1,Hit-and-Miss
F
⊗
K
=
(
F
⊖
K
1
)
⋂
(
F
c
⊖
K
2
)
c
F \otimes K = (F \ominus K_1) \bigcap (F^c \ominus K_2 )^c
F⊗K=(F⊖K1)⋂(Fc⊖K2)c
K
1
⋃
K
2
=
Φ
K_1 \bigcup K_2 = \Phi
K1⋃K2=Φ and
K
1
∈
K
,
K
2
∈
K
K_1 \in K , K_2 \in K
K1∈K,K2∈K
Pattern Spectrum
这个概念类似于histogram,可以分割出来图像中不同大小的目标
P
S
r
i
k
(
F
)
PSrik(F)
PSrik(F)
Recursive Dilation
F ⨁ i K = { F i=0 ( F ⨁ i − 1 K ) ⨁ K i>=1 F \bigoplus^i K =\begin{cases} F& \text{i=0}\\ (F\bigoplus^{i-1}K)\bigoplus K& \text{i>=1} \end{cases} F⨁iK={F(F⨁i−1K)⨁Ki=0i>=1
Recursive Erosion
F ⊖ i K = { F i=0 ( F ⊖ i − 1 K ) ⊖ K i>=1 F \ominus^i K =\begin{cases} F& \text{i=0}\\ (F\ominus^{i-1}K)\ominus K& \text{i>=1} \end{cases} F⊖iK={F(F⊖i−1K)⊖Ki=0i>=1
Distance Transfrom
根据连续的腐蚀操作就可以得到关于形态学中距离的概念,第一次使用SE腐蚀掉的距离设置成为1,第二次经过SE腐蚀掉的像素的距离设置为2,以此迭代,直到所有的像素被腐蚀完毕。所得到的就是原图像在形态学中的距离矩阵
r
i
k
r_ik
rik是SE的尺寸
Skeleton
骨架,骨架就是距离边缘最远的像素的集合,与距离矩阵联系起来就是,距离矩阵中的每一个元素i,取一个i^2的矩阵,若这个矩阵中没有比它大的距离,则保留,反之,舍弃。
Skeleton Subset
i表示正在使用的SE的尺寸
K:SE
S
i
(
F
)
=
(
F
⊖
r
i
K
−
[
(
F
⊖
r
i
K
)
]
∘
K
)
S_i(F) = (F\ominus r_iK - [(F\ominus r_iK)] \circ K)
Si(F)=(F⊖riK−[(F⊖riK)]∘K)
Skeleton
S ( F ) = ⋃ i = 0 n ( S i ( F ) ) S(F) = \bigcup_{i=0}^n(S_i(F)) S(F)=i=0⋃n(Si(F))
Skeleton Reconstruction
F = ⋃ i = 0 n ( S i ( F ) ⊕ r i K ) F = \bigcup_{i=0}^n (S_i(F)\oplus r_iK) F=i=0⋃n(Si(F)⊕riK)
灰度的形态学图像处理
F:原图像。K:SE
GrayScale Dilation
D
g
(
F
,
K
)
=
F
⊕
g
K
=
m
a
x
[
a
,
b
∈
K
]
{
F
(
m
+
a
,
n
+
b
)
+
K
(
a
,
b
)
}
D_g(F,K) = F \oplus_g K = max_{[a,b \in K]}\ \lbrace F(m+a,n+b) + K(a,b) \rbrace
Dg(F,K)=F⊕gK=max[a,b∈K] {F(m+a,n+b)+K(a,b)}
例子:一个简短的直线在histogram图上进行平移操作,取最大值
GrayScale Erosion
E
g
(
F
,
K
)
=
F
⊖
g
K
=
m
i
n
[
a
,
b
∈
K
]
{
F
(
m
−
a
,
n
−
b
)
−
K
(
a
,
b
)
}
E_g(F,K) = F \ominus_g K = min_{[a,b \in K]}\ \lbrace F(m-a,n-b) - K(a,b) \rbrace
Eg(F,K)=F⊖gK=min[a,b∈K] {F(m−a,n−b)−K(a,b)}
例子:一个简短的直线在histogram图上进行平移操作,取最小值
GrayScale Opening
O
g
(
F
,
K
)
=
F
∘
g
K
=
(
F
⊖
g
K
)
⊕
g
K
O_g(F,K) = F \circ_g K = (F \ominus_g K)\oplus_g K
Og(F,K)=F∘gK=(F⊖gK)⊕gK
例子:一个矩形从一个直方图下面进行向上匹配,能进入的保留,不能进入的删除。就像是雪人融化。
GrayScale Closing
C
g
(
F
,
K
)
=
F
⋅
g
K
=
(
F
⊕
g
K
)
⊖
g
K
C_g(F,K) = F \cdot_g K = (F \oplus_g K)\ominus_g K
Cg(F,K)=F⋅gK=(F⊕gK)⊖gK
例子:一个矩形从一个直方图上面进行向下匹配,能进入的保留,不能进入的删除。就像是沙漠中的风沙填埋凹区
分水岭算法
受限制的膨胀
原图像:M
限制图像:V
SE:K
提出的背景:一般而言,我们在对一个图像进行降噪处理的时候,往往也会模糊掉一些需要保留的细节,这时候,就需要对处理过后的图像进行相关的一些操作,去得到和原图像中真实内容最接近的那个图像。这就提出了受限制的膨胀算法。算法思想如下:
原图像假设用膨胀操作进行降噪,得到处理过后的图像G
G
=
M
⊕
K
1
G = M \oplus K_1
G=M⊕K1
然后利用SE K 进行i次的膨胀操作,但是膨胀的时候又可能膨胀之后的图像的内容会超过原始图像中内容的边界,这时候,就要用V对他做限制,一般是用处理后的图像与原图像做交集,知道不在变化。