美文网首页
形态学操作

形态学操作

作者: 长歌行夜一 | 来源:发表于2020-07-03 08:30 被阅读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),是形状的中心。

    例如:

    运行结果:

    相关文章

      网友评论

          本文标题:形态学操作

          本文链接:https://www.haomeiwen.com/subject/vfkufktx.html