预备知识
在二值图像中,集合是二维整数空间
Z
2
Z^{2}
Z2的元素,在该空间中,集合的每个元素都是一个多元组,这些多元组的坐标是图像中某个像素的坐标(x,y).
一个集合
B
B
B的反射表示为
B
^
\hat{B}
B^,定义如下:
B
^
=
{
w
∣
w
=
−
b
,
b
∈
B
}
\widehat{B} = \{ w \mid w = - b,b \in B\}
B
={w∣w=−b,b∈B}
如果
B
B
B是描述图像中物体的像素集合,则
B
^
\hat{B}
B^是
B
B
B中坐标(x,y)被(-x,-y)代替的点的集合。下图显示了一个集合及其反射。
腐蚀和膨胀
腐蚀
表示为
A
⊖
B
A \ominus B
A⊖B的B对A的腐蚀定义为
A
⊖
B
=
{
z
∣
(
B
)
z
⊆
A
}
A \ominus B = \left\{ {z \mid {\left( B\right) }_{z} \subseteq A}\right\}
A⊖B={z∣(B)z⊆A}
上式表明B对A的腐蚀是一个用z平移的B包含在A中的所有点z的集合。
腐蚀操作的数学表达通常是对图像和结构元素进行卷积运算,结构元素是一个小的形状(如矩形、圆形等),用于定义腐蚀的效果。
腐蚀操作可以理解为将图像中的物体边缘向内侵蚀,使得物体的边界变得更加平滑。它通常用于消除图像中小于结构元素的物体或者细小的细节,从而可以减少噪声或分离物体。
应用
如果有一个二值图像,表示一组白色的圆形在黑色背景上,应用一个5x5的矩形结构元素进行腐蚀操作,结果会是所有白色圆形缩小了。在实际应用中,腐蚀可用于去除图像中的小物体或连接体。
膨胀
A
A
A 和
B
B
B 是
Z
2
Z^{2}
Z2中的集合,表示为
A
⊕
B
A \oplus B
A⊕B的B对A的膨胀定义为
A
⊕
B
=
{
z
∣
(
B
^
)
z
∩
A
≠
∅
}
A \oplus B = \left\{ {z \mid {\left( \widehat{B}\right) }_{z} \cap A \neq \varnothing }\right\}
A⊕B={z∣(B
)z∩A=∅}
上式是以B关于它的原点的映像,并且以z对映像进行平移为基础。
膨胀操作与腐蚀相反,它用来增加图像中物体的边界或大小。通过结构元素的卷积,膨胀可以扩展物体的边界,使其更加明显或者填充物体内部的空隙。
膨胀操作通常用于连接物体的间隙或者增强物体的大小,使其更容易检测或识别。
应用
如果有一个二值图像,表示一组白色的圆形在黑色背景上,应用一个5x5的矩形结构元素进行膨胀操作,结果会是所有白色圆形变大或者合并。在实际应用中,膨胀可以用于填充图像中的空洞或连接相邻物体。
对偶性
腐蚀与膨胀关于集合求补运算和反射运算是对偶的,即
(
A
⊖
B
)
c
=
A
c
⊕
B
^
{\left( A \ominus B\right) }^{c} = {A}^{c} \oplus \widehat{B}
(A⊖B)c=Ac⊕B
和
(
A
⊕
B
)
c
=
A
c
⊖
B
^
{\left( A \oplus B\right) }^{c} = {A}^{c} \ominus \widehat{B}
(A⊕B)c=Ac⊖B
上面式子说明,B对A的腐蚀是
B
^
\hat{B}
B^对
A
c
A^{c}
Ac的膨胀的补,反之亦然。
开操作与闭操作
开操作一般会平滑物体的轮廓、断开较窄的狭颈并消除较细的突出物。闭操作同样能平滑物体轮廓的一部分,但与开操作相反,它通常会弥合较窄狭颈的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂。
B对A的开操作,定义如下
A
∘
B
=
(
A
⊖
B
)
⊕
B
A \circ B = \left( {A \ominus B}\right) \oplus B
A∘B=(A⊖B)⊕B
因此,B对A的开操作就是B对A的腐蚀,紧接着用B对结果进行膨胀。
类似,B对A的闭操作定义如下
A
⋅
B
=
(
A
⊕
B
)
⊖
B
A \cdot B = \left( {A \oplus B}\right) \ominus B
A⋅B=(A⊕B)⊖B
说明B对A的闭操作就是简单用B对A膨胀,紧接着用B对结果进行腐蚀。
击中或击不中变换
击中变换是一种形态学操作,用于检测图像中与给定模式完全匹配的像素。相反,不击中变换用于检测图像中与给定模式不匹配的像素。
击中变换:
击中变换旨在检测图像中与两种模式完全匹配的像素点。这两种模式分别被称为前景模式和背景模式。这种操作通常用于二值图像中,其中前景模式和背景模式都是由二值像素(通常是黑色和白色)组成的小区域。
工作原理:
1.对于给定的二值图像,击中变换需要两个结构元素:一个表示前景模式(P),一个表示背景模式(M)。
2.当且仅当图像中某一位置处的像素能够与前景模式P匹配,并且与背景模式M也匹配时,该位置的像素才会被保留(设为前景)。否则,该位置的像素将被设为背景。
示例:
假设有一个二值图像,如下所示:
0 0 0 0 0 0 0
0 1 1 1 0 0 0
0 1 1 1 1 0 0
0 1 1 1 1 0 0
0 0 0 0 0 0 0
我们定义两个结构元素:
前景模式P:
1 1 1
1 1 1
背景模式M:
0 0 0
0 0 0
应用击中变换时,只有当图像中存在完全由1组成的3x3区域(前景模式P)时,该区域中心的像素才会被保留,其他位置被设为背景。在上述示例中,只有中间的3x3区域符合前景模式P,因此击中变换后的结果会是:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 0 0 0
0 0 1 1 0 0 0
0 0 0 0 0 0 0
不击中变换:
不击中变换用于检测图像中与给定的模式不匹配的像素点。也需要两个结构元素:前景模式(P)和背景模式(M)。不击中变换的结果与击中变换相反,只有当图像中某一位置的像素与前景模式P不匹配,或者与背景模式M匹配时,该位置的像素才会被保留(设为前景)。
示例:
继续以上示例,假设我们定义的前景模式P和背景模式M分别为:
前景模式P:
1 0 1
0 1 0
背景模式M:
0 0 0
0 0 0
应用不击中变换时,只有当图像中存在与前景模式P不完全匹配的3x3区域时,该区域中心的像素才会被保留,其他位置被设为背景。在上述示例中,只有中间的3x3区域不完全符合前景模式P,因此不击中变换后的结果会是:
0 0 0 0 0 0 0
0 1 1 1 0 0 0
0 1 1 1 1 0 0
0 1 1 1 1 0 0
0 0 0 0 0 0 0
总结来说,击中变换和不击中变换是形态学操作中的重要概念,它们可以帮助检测图像中特定的模式或者反模式,从而用于图像分割、特征提取等应用中。
一些基本的形态学算法
边界提取
表示为$\beta \left( A\right) $的集合A的边界可以通过先用B对A腐蚀,然后用A与腐蚀结果集合之差得到,即
β
(
A
)
=
A
−
(
A
⊖
B
)
\beta \left( A\right) = A - \left( {A \ominus B}\right)
β(A)=A−(A⊖B)
下图显示了相关操作流程
孔洞填充
该算法旨在识别并填充图像中的空洞或孔洞,使其成为连通的区域。
工作原理:
1.孔洞识别:
首先,算法会识别图像中的孔洞。孔洞通常指的是由于对象内部或者对象间隙导致的非连通区域,这些区域被视为背景。
2.连通性分析:
一旦识别出孔洞,算法会分析孔洞的形状、大小和位置。通常,孔洞被描述为由背景像素包围的前景区域(对象的一部分),但是内部没有前景像素。
3.填充孔洞:
填充孔洞的方法可以是基于像素的方法或者基于形态学操作:
基于像素的方法:简单的方法是扫描整个图像,找到与背景相连但是内部没有前景像素的区域,并将这些像素设为前景。这种方法可以直接修改图像的像素值。
形态学操作:形态学操作如闭运算(closing)通常用于填充孔洞。闭运算先进行膨胀(dilation),然后进行腐蚀(erosion),可以有效地填充小孔洞和裂缝。
示例:
考虑以下简单的二值图像示例:
0 0 0 0 0 0
0 1 1 1 1 0
0 1 0 0 1 0
0 1 0 0 1 0
0 1 1 1 1 0
0 0 0 0 0 0
在这个图像中,中间有一个正方形的孔洞(被0包围的1组成的区域)。孔洞填充的过程可以如下进行:
1.孔洞识别:确定孔洞的位置和边界。
2.填充操作:
使用形态学闭运算来填充孔洞。闭运算的步骤是先进行膨胀操作,使孔洞区域的边界向外扩展,然后进行腐蚀操作,使边界重新回到原始位置,但孔洞内部被填充。在上述图像中,应用闭运算可以将孔洞填充,得到如下结果:
0 0 0 0 0 0
0 1 1 1 1 0
0 1 1 1 1 0
0 1 1 1 1 0
0 1 1 1 1 0
0 0 0 0 0 0
孔洞被成功填充,使得图像中的前景区域成为一个连通的整体。
连通分量的提取
连通分量的提取是指将图像中具有相同性质(如灰度值、颜色或其他特征)且彼此相互连接的像素点组成的区域提取出来的过程。具体操作流程参考下图
凸壳
如果在集合A内连接任意两个点的直线段都在A的内部,则称A是凸行的。任意集合S的凸壳H是包含于S的最小凸集。集合差H-S称为S的凸缺。
凸壳指的是包围一组点集的最小凸多边形或凸多面体,其中每个顶点都是点集中的某个点或点集的边界上的点。
应用
1.图像分割:将图像中的每一个像素点看作一个点,通过对这些点进行凸包计算来得到图像的边界。
2.形态学处理:例如删除或扩展图像边缘等操作,以改善图像的形状或轮廓。
3.图形识别:在每个图形中提取出边缘点、角点等信息,然后对这些信息进行凸包计算,从而得到图形的信息,进一步进行模式识别等操作。
细化
结构元B对集合A的细化定义如下
A
⊗
B
=
A
−
(
A
⊛
B
)
=
A
∩
(
A
⊛
B
)
c
A \otimes B=A-(A \circledast B)=A \cap(A \circledast B)^{c}
A⊗B=A−(A⊛B)=A∩(A⊛B)c具体操作流程如下图所示
粗化
定义:粗化是减少图像细节的过程,旨在消除噪声、减少图像复杂度或提取大尺度特征。
公式表示为
A
⋅
B
=
A
⋃
(
A
⊛
B
)
A \cdot B=A \bigcup(A \circledast B)
A⋅B=A⋃(A⊛B)
目的:通过减少图像中的不必要细节,粗化有助于突出图像的主要结构或特征,便于后续的图像分析和处理。
实现方法
1.腐蚀操作:使用一个小结构元素(SE)扫描图像,移除边界内的所有像素,从而减小物体的尺寸。这一操作减少了图像的细节,使图像变得更为粗糙。
2.闭运算:闭运算是先腐蚀后膨胀的操作,它可以在连接小的断开部分的同时,保留大物体的形状。虽然闭运算本身不完全等同于粗化,但它可以在一定程度上实现粗化的效果。
下图说明了粗化的过程:
灰度级形态学
灰度级形态学中的结构元与二值形态学中对于功能相同:它们负责检验一幅给定的图像。其中有两类,分别是非平坦的和平坦的结构元。下图显示了每一类的一个例子。
a图显示了一个半球状的灰度级结构元。b图显示其平坦结构元。c图是一个通过其中心的水平灰度剖面。d图是其对应的灰度剖面。
一些基本的灰度级形态学算法
形态学平滑
形态学平滑主要用于去除图像中的噪声,同时保持图像边缘的平滑性。基本思想是将图像与结构元素进行形态学操作,如膨胀和腐蚀。常见的平滑方法包括:
开运算:先腐蚀后膨胀。这一过程可以消除小的物体(噪声)而保留较大物体的形状。
闭运算:先膨胀后腐蚀。它有助于填补图像中小的空洞或间隙。
通过组合开运算和闭运算,可以实现不同程度的平滑效果。
形态学梯度
形态学梯度用于检测图像的边缘。它的计算由膨胀和腐蚀两个操作构成。形态学梯度突出显示了图像的边缘部分,因为边缘通常在膨胀和腐蚀之间会表现出显著的差异。
具体案例参考下图
顶帽变换和底帽变换
图像相减与开操作和闭操作相结合,会产生顶帽与底帽变换。主要应用之一是用一个结构元通过开、闭操作从一幅图像中删除物体,也可用于校正不均匀光照的影响。
粒度测定
粒度测定是一种分析图像中颗粒的大小和形状分布的技术。它涉及使用不同大小的结构元素对图像进行多次闭运算(或开运算),并统计每个结构元素的响应结果。通过研究目标物体的形态特征,得出颗粒的大小分布信息。粒度测定广泛应用于材料科学、医学图像分析等领域。
纹理分割
纹理分割涉及根据图像的纹理特征将图像分成有意义的区域。一般方法包括使用形态学操作,如形态学梯度、开闭运算等,提取纹理特征,然后通过聚类或分类算法将不同的纹理区域分开。形态学操作有助于增强图像的局部结构,从而使纹理分割更加准确和有效。
灰度级形态学重建
灰度级形态学重建是一种基于形态学的图像处理技术,主要用于恢复或增强图像中的结构。在图像分析和处理领域,形态学重建通常应用于噪声去除、图像分割、目标提取和特征增强等任务。这项技术尤其适合于处理带有噪声或缺失部分的图像。
基本概念
灰度级形态学重建的基本思想是使用形态学操作(如膨胀和腐蚀)来重建一个基础图像(重建目标),通常基于一个标记图像(重建种子)。重建过程通过不断膨胀种子图像,直到其达到源图像的特征为止。
主要步骤
形态学重建通常包括以下几个步骤:
种子图像的选择:种子图像是我们用来指导重建过程的图像,通常可以是经过处理后的二值图像或灰度图像。它表示了希望恢复的图像区域或结构。
源图像的准备:源图像是我们用来限制重建过程的图像,包含待恢复的图像信息。我们希望重建的图像不会超出这个源图像的灰度值。
重建过程:
重建过程通过以下的结构性迭代进行。
膨胀(Dilation):对种子图像进行膨胀,将其扩展到邻域的像素。
保持(Keep):对膨胀后得到的图像与源图像进行比较,只保留那些在源图像中仍然存在的区域。
将这个过程重复进行,直至重建的图像不再变化(即达到稳定状态)。