形态学操作

2020-07-03  本文已影响0人  长歌行夜一

数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征。

形态处理在视觉检测、文字识别、医学图像处理、图像压缩编码等领域都有非常重要的应用。

形态学操作主要包含:腐蚀、膨胀、开运算、闭运算、形态学梯度运算、顶帽运算(礼帽运算)、黑帽运算等操作。腐蚀操作和膨胀操作是形态学运算的基础,二者结合就可以实现开运算、闭运算、形态学梯度运算、顶帽运算、黑帽运算、击中击不中等不同形式的运算。

1.腐蚀

腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩。也可以将小于指定结构体元素的部分去除。

腐蚀用来“收缩”或者“细化”二值图像中的前景,借此实现去除噪声、元素分割等功能。在腐蚀过程中,通常使用一个结构元来逐个像素地扫描要被腐蚀的图像,并根据结构元和被腐蚀图像的关系来确定腐蚀结果。

腐蚀操作等形态学操作是逐个元素地来决定值的,每次判定的点都是与结构元中心点所对应的点。

在OpenCV中,使用函数cv2.erode()来实现腐蚀操作。

dst=cv2.erode(src,kernel,anchor=None,iterations=None,borderType=None,borderValue=None)

src: 是需要处理的图像。可以有任意数量的通道。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种。

kernel: 代表腐蚀操作时所采用的结构类型,它可以自定义,也可以通过cv2.getStructuringElement()生成。

anchor: 锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。

iterations: 是腐蚀操作迭代次数,默认是1.

borderType: 边界样式,决定了以何种方式处理边界。一般用默认值是BORDER_CONSTANT。

borderValue: 是边界值,一般采用默认值。


多通道腐蚀


单通道腐蚀

2.膨胀

膨胀操作是形态学中另外一种基本操作。膨胀操作和腐蚀操作是相反的,膨胀操作能对图像的边缘进行扩张。膨胀操作将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像的边界点向外扩张。

如果图像内两个对象的距离较近,那么在膨胀的过程中,两个对象可能会连通在一起。膨胀操作对填补图像分割后图像内所存在的空白很有帮助。

在OpenCV内,采用cv2.dilate()实现膨胀操作:

dst  = cv2.dilate(src,kernel[,anchor[,iterations[,borderType[,borderValue]]]])

3.通用形态学函数

腐蚀操作和膨胀操作是形态学运算的基础,二者结合就可以实现开运算、闭运算、形态学梯度运算、顶帽运算、黑帽运算、击中击不中等不同形式的运算

OpenCV提供了函数cv2.morphologyEX()来实现上述形态学运算。

dst = cv2.morphologyEx(src,op,kernel[,anchor[,iterations[,borderType[,borderValue]]]])

dst: 经形态学处理后得到的图像和原始图像有相同的大小和类型。

src: 是需要处理的图像。可以有任意数量的通道。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种。

op: 代表操作类型,如下说明:

4.开运算

开运算进行的操作是先将图像腐蚀,在对腐蚀的结果进行膨胀。开运算可以用于去噪、计数等等。

5.闭运算

闭运算是先膨胀后腐蚀的运算。它有助于关闭前景物体内部的小孔,或去除物体上的小黑点。还可以将不同的前景图像进行连接。

运行结果:

6.形态学梯度运算

形态学运算是用图像的膨胀运算减去图像的腐蚀运算的操作,该操作可以获取图像中前景图像的边缘。设置op=cv2.MORPH_GRADIENT

运行结果:可以看到几乎得到了j的边缘。

7.礼帽运算

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息。通过设置op=cv2.MORPH_TOPHAT实现。

例如:

运行结果:

运行结果

8.黑帽运算

黑帽运算是用闭运算减去原始图像的操作。黑帽运算能够获取图像内部的小孔,或者前景色中的小黑点,或者得到比原始图像的边缘更暗的边缘部分。

例如:

黑帽运算、、、、

运行结果:

9.核函数

在进行形态学操作时,必须使用一个特定的核(结构元)。该核可以自定义生成,也可以通过函数构造:

retval = cv2.getStructuringElement(shape,ksize [,anchor])

该函数返回一个用于形态学操作的结构元素,其中参数shape来指定核的形状(矩形、十字形、椭圆形);ksize指定核的大小;anchor代表核中的锚定点位置,默认值是(-1,-1),是形状的中心。

例如:

运行结果:

上一篇下一篇

猜你喜欢

热点阅读