讨论的对象是二值图像中白色像素的集合,每一个元素是像素的坐标
B B B对 A A A的腐蚀表示为:
A ⊖ B = { z ∣ ( B ) z ⊆ A } A\ominus B = \{z|(B)_z\subseteq A\} A⊖B={z∣(B)z⊆A}
也就是一个用 z z z平移的 B B B,使得 B B B包含在 A A A中的 z z z的集合,假定 B B B是一个结构元,因为 B B B包含在 A A A中等价于 B B B不和背景共享任何公共元素,所以也可以表示为:
A ⊖ B = { z ∣ ( B ) z ∩ A c = ∅ } A\ominus B = \{z|(B)_z\cap A^c = \emptyset\} A⊖B={z∣(B)z∩Ac=∅}
腐蚀操作可以看做是形态学滤波操作,这种操作将小于结构元的图像细节从图像中滤除,主要过程是用结构元素0、1构成的模板与图像做卷积,结果等于模板和的值的点就是腐蚀的结果
用 3 × 3 3\times 3 3×3的结构元的时候,物体的边界沿周边减少一个像素,可以消除掉图像中小于结构元大小的目标物体,平滑物体边界,如果物体之间有细小的连通,选择适当的结构元可以将物体分开,断开狭长的连接,去除细长的突出物,不同的结构元及其不同的原点产生不同的结果
B B B对 A A A的膨胀定义为:
A ⊕ B = { z ∣ ( B ^ ) z ∩ A ≠ ∅ } A\oplus B = \{z|(\hat{B})z \cap A \neq \emptyset\} A⊕B={z∣(B^)z∩A=∅}
也就是使得 B ^ \hat B B^的平移和 A A A至少有一个交集的 z z z的集合,上式可以等价为:
A ⊕ B = { z ∣ [ ( B ^ ) z ∩ A ] ⊆ A } A\oplus B = \{z|[(\hat B)_z \cap A] \subseteq A\} A⊕B={z∣[(B^)z∩A]⊆A}
上式和卷积操作类似,但是需要注意的是膨胀是一个非线性操作,因为是以集合操作为基础的,但是卷积操作是一个线性操作,主要过程是用结构元素0、1构成的模板与图像做卷积,所有大于0的地方就是膨胀结果
膨胀的作用是当使用 3 × 3 3\times3 3×3的结构元的时候,在物体的边界沿周边增加一个像素、将目标周围的背景点合并到目标中,平滑物体边界,将不同的目标连通到一起,填补分割后物体的孔洞
腐蚀和膨胀运算对于求补运算和反射运算是对偶的:
( A ⊖ B ) c = A c ⊕ B ^ ( A ⊕ B ) c = A c ⊖ B ^ (A\ominus B)^c = A^c\oplus \hat B \\ (A \oplus B)^c = A^c \ominus \hat B (A⊖B)c=Ac⊕B^(A⊕B)c=Ac⊖B^
上述性质对于 B B B是对称的时候非常有效,此时先求补再膨胀等价于先腐蚀再求补
之前的腐蚀和膨胀操作存在改变图像大小的问题,但是开操作和闭操作则不会,开操作和闭操作都会平滑物体的轮廓,但是开操作会断开窄桥,消除细的突出物,但是闭操作会消除小空洞连接窄桥
先开运算后闭运算构成噪声滤波器,首先开运算消除背景噪声但是图片产生间断,之后开运算消除噪声斑点,连接间断
如上图所示,集合 A A A由 X , Y , Z X,Y,Z X,Y,Z三个子集构成,现在的目的是找到 X X X的位置,方法就是击中操作,令 B = ( B 1 , B 2 ) , B 1 = X , B 2 = ( W − X ) B = (B_1,B_2),B_1 = X,B_2 = (W - X) B=(B1,B2),B1=X,B2=(W−X),最后得到 X X X的位置的集合操作公式就是:
A o ∗ B = ( A ⊖ X ) ∩ [ A c ⊖ ( W − X ) ] A\ o* B = (A\ominus X)\cap [A^c \ominus (W - X)] A o∗B=(A⊖X)∩[Ac⊖(W−X)]
根据对偶性,可以将上式写为:
A o ∗ B = ( A ⊖ B 1 ) ∩ ( A ⊕ B ^ 2 ) A\ o* B = (A\ominus B_1)\cap(A\oplus \hat B_2) A o∗B=(A⊖B1)∩(A⊕B^2)
上面两个式子就称为形态学击中或击不中变换,上面的式子基于一个假设,也就是当物体之间是断开的,且物体至少被一个像素宽的背景围绕,物体才可分
先腐蚀然后减去得到的就是边界
β ( A ) = A − ( A ⊖ B ) \beta(A) = A - (A\ominus B) β(A)=A−(A⊖B)
X k = ( X k − 1 ⊕ B ) ⋂ A c , k = 1 , 2 , 3 X_k = (X_{k - 1} \oplus B)\bigcap A^c,k = 1,2,3 Xk=(Xk−1⊕B)⋂Ac,k=1,2,3,当 X k = X k − 1 X_k = X_{k - 1} Xk=Xk−1的时候迭代终止, X 0 X_0 X0是要填充的区域的内部的任意一点
X k = ( X k − 1 ⊕ B ) ⋂ A , k = 1 , 2 , 3 , ⋯ X_k = (X_{k - 1} \oplus B)\bigcap A,k = 1,2,3,\cdots Xk=(Xk−1⊕B)⋂A,k=1,2,3,⋯,当 X k = X k − 1 X_k = X_{k - 1} Xk=Xk−1的时候迭代终止, X 0 X_0 X0是物体内部的任意一点
一个孔洞被定义为由前景像素相连接的边界所包围的一个背景区域:
X k = ( X k − 1 ⊕ B ) ∩ A c , k = 1 , 2 , 3 ⋯ X_k = (X_{k - 1}\oplus B)\cap A^c,k = 1,2,3\cdots Xk=(Xk−1⊕B)∩Ac,k=1,2,3⋯
当 X k = X k − 1 X_k = X_{k - 1} Xk=Xk−1的时候算法迭代停止, A A A表示的是一个集合,元素是包含一个孔洞的边界,集合 X k X_k Xk包含所有被填充的孔洞, X 0 X_0 X0表示的是初始的孔洞集合的原点位置
A A A是包含一个或多个连通分量的集合:
X k = ( X k − 1 ⊕ B ) ∩ A X_k = (X_{k - 1}\oplus B)\cap A Xk=(Xk−1⊕B)∩A
如果在集合 A A A内连接任意两个点的直线段都在 A A A的内部,就称集合 A A A是凸形的,任意集合 S S S的凸壳 H H H是包含 S S S的最小凸集,集合差 H − S H - S H−S称为 S S S的凸块,求解凸壳过程如下:
首先反复对 B 1 B^1 B1进行击中或击不中变换直到没有变化然后与 A A A求并得到一个集合,这个过程同样对 B i B^i Bi重复(应用于 A A A)于是得到4个集合,得到的四个集合求并即为 A A A的凸壳。
粗化和细化是形态学上的对偶过程,为了将集合粗化,先求集合的补,通过对集合补的细化后,对细化结果求补,最后消除间断即获得集合的粗化
集合 A A A的骨架表示为 S ( A ) S(A) S(A),可以通过下式计算:
S ( A ) = ⋃ k = 0 K S k ( A ) S k ( A ) = ( A ⊖ k B ) − ( A ⊖ k B ) ∘ B S(A) = \bigcup_{k = 0}^KS_k(A) \\ S_k(A) = (A\ominus kB) - (A\ominus kB)\circ B S(A)=k=0⋃KSk(A)Sk(A)=(A⊖kB)−(A⊖kB)∘B
其中 B B B表示一个结构元, ( A ⊖ k B ) (A\ominus kB) (A⊖kB)表示对 A A A进行连续 k k k次腐蚀, K K K是 A A A被腐蚀为空集之前的最后一次腐蚀:
K = m a x { k ∣ ( A ⊖ k B ) ≠ ∅ } K = max\{k|(A\ominus kB)\neq \emptyset\} K=max{k∣(A⊖kB)=∅}
在不破坏连通性的背景下细化图像
距离变换图算法把二值图像变换为灰度图像,其中每个像素的灰度值等于0到他最近的1的距离
算法流程:
对细化和骨架绘制算法的补充,清除这些算法产生的一些不必要的附加成分
( f ⊕ b ) = m a x { f ( s − x , t − y ) + b ( x , y ) ∣ ( s − x ) , ( t − y ) ∈ D f , ( x , y ) ∈ D b } (f\oplus b) = max\{f(s-x,t-y)+b(x,y)|(s - x),(t - y)\in D_f,(x,y)\in D_b\} (f⊕b)=max{f(s−x,t−y)+b(x,y)∣(s−x),(t−y)∈Df,(x,y)∈Db}
膨胀图像明亮且暗小的细节减弱或消除
( f ⊖ b ) = m i n { f ( s + x , t + y ) − b ( x , y ) ∣ ( s + x ) , ( t + y ) ∈ D f , ( x , y ) ∈ D b } (f\ominus b) = min\{f(s+x,t+y)-b(x,y)|(s + x),(t + y)\in D_f,(x,y)\in D_b\} (f⊖b)=min{f(s+x,t+y)−b(x,y)∣(s+x),(t+y)∈Df,(x,y)∈Db}
腐蚀图像变暗且尺寸小的明亮细节减弱或消除
开运算:先腐蚀后膨胀,小的明亮的细节变小,而暗的细节没有明显变化
闭运算:先膨胀后腐蚀,小的暗的细节变小,但明亮部分没有明显变化
先开运算后闭运算,减少或除去人为明和暗的因素和噪声
膨胀减去腐蚀图像
g = ( f ⊕ b ) − ( f ⊖ b ) g = (f\oplus b)-(f\ominus b) g=(f⊕b)−(f⊖b)
原图减去开运算结果,增强阴影的细节