【小白】Open-CV 学习笔记 -6.4 形态学滤波: 开运算、闭运算、形态学梯度、顶帽、黑帽

概述:形态学的高级形态,往往都是建立在腐蚀和膨胀这两个基本操作之上的,所以本篇主角是OpenCV的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开运算、闭运算、形态学梯度、“顶帽”、“黑帽” 等。
为了下面对比和演示以及理解的方便,浅墨自己制作了一张毛笔字图,这里先上原图:
在这里插入图片描述

4.1 开运算

开运算(Opening Operation)其实就是先腐蚀后膨胀的过程

dst = open(src,element) = dilate(erode(src,element));

开运算用来消除小物体,在纤细处分离物体并且在平滑较大的物体的边界不明显改变其体积
在这里插入图片描述

4.2 闭运算

先膨胀后腐蚀的过程(Closing Operation)
dst = cleose(src,element) = erode(dilate(src,element))
闭运算能够排除小型黑洞(黑色区域),如下所示:
在这里插入图片描述

4.3 形态学梯度

膨胀图与腐蚀图之差
dst = morph-grad(src,element) = dilate(sec,element-) - erode(src,element)

对二值图像进行这一操作可以将团块(blob)的边缘突出来。我们可以用形态学梯度来保留物体的边缘轮廓,如下所示:
在这里插入图片描述

4.4 顶帽

Top Hat(礼帽),是原图与开运算的结果图之差
dst = tophat(src, element) = src - open(src, element)

  • 因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原型轮廓周围的区域更明亮的区域。且这一操作和选择的核的大小有关

  • 顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的时候,可以用顶帽运算进行背景提取。
    在这里插入图片描述

4.5 黑帽

Black Hat 是闭运算与原图像之差
dst = blackhat(src, element) = close(src,element) -src

用来分离比邻近点暗一些的斑点,效果图有着非常完美的轮廓
在这里插入图片描述

4.6 morphologyEx()

morphologyEx函数利用基本的腐蚀核膨胀技术,来执行更加高级的形态学变换

void morphologyEx(InputArray src,OutputArray dst, int op, 
	InputArray kernel, Point anchor = Point(-1,-1),
	int iterations = 1, int borderType = BORDER_CONSTANT, 
	const Scalar & borderValue=morphologyDefaultBorderValue());

在这里插入图片描述

  • 第一个参数,输入图像

  • 第二个参数,输出图像

  • 第三个参数,使用的形态学方法即:
    MORPH_OPEN – 开运算(Opening operation)
    开运算是对图像先腐蚀再膨胀,可以排除小团的物体转换公式为:

                  MORPH_CLOSE – 闭运算(Closing operation)
    

    闭运算是对图像先膨胀再腐蚀,可以排除小型黑洞,变换的公式:

                  MORPH_GRADIENT -形态学梯度(Morphological gradient)
    

    返回图片为膨胀图与腐蚀图之差,可以保留物体的边缘轮廓,变换公式为:

                  MORPH_TOPHAT - “顶帽”(“Top hat”)
    

    返回图像为原图像与开运算结果图之差,变换公式:

                  MORPH_BLACKHAT - “黑帽”(“Black hat“)
    

    返回图片为闭运算结果图与原图像之差,变换公式为:

  • 第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。如果设置5*5的即:Mat(5, 5, CV_8U)

  • 第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。

  • 第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。

  • 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT。

  • 第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue()

发布了34 篇原创文章 · 获赞 8 · 访问量 1886

猜你喜欢

转载自blog.csdn.net/weixin_43583163/article/details/97175277