腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽、黑帽

2022-12-02,,,

一、腐蚀

粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。

 

二、膨胀

粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。

 

三、开运算

1、原理

开运算 = 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了)

腐蚀操作:cv2.erode(img,kernel,iterations=1)

膨胀操作:cv2.dilate(img,kernel,iterations=1)

图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:

开运算(img) = 膨胀( 腐蚀(img) )

开运算的效果图如下图所示:

 

2、函数原型

图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

参数dst表示处理的结果,src表示原图像,cv2.MORPH_OPEN表示开运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

运行结果如下图所示:

 

四、闭运算

1、原理

图像先膨胀,后腐蚀。

图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:

闭运算(img) = 腐蚀( 膨胀(img) )

 闭运算总结:

(1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
(2)闭运算是通过填充图像的凹角来滤波图像的。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。

 

2、函数原型

图像闭运算主要使用的函数morphologyEx,其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

参数dst表示处理的结果,src表示原图像, cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

 

五、梯度运算

1、原理

梯度运算(img) = 膨胀(img) - 腐蚀(img) 

图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。如下图所示:

2、函数原型

图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

参数dst表示处理的结果,src表示原图像, cv2.MORPH_GRADIENT表示梯度运算,kernel表示卷积核。5*5的卷积核可以采用函数 np.ones((5,5), np.uint8) 构建。

运行结果如下图所示:

 

我们可以使用opencv自带函数进行调试哦!
openCV里有一个很好的函数getStructuringElement,我们只要往这个函数传相应的处理参数,就可以进行相应的操作了,使用起来非常方便。下面我简单列举一下相应的操作宏定义:

 

六、顶帽

顶帽 = 原图 - 开运算结果

开运算放大了裂缝或者局部低亮度的区域,所以,从原图中减去开运算后的图,得到的结果突出了比原图轮廓周围的区域更明亮的区域,这个操作与选择的核的大小有关。TopHat运算一般用来分离比邻近点亮一些的斑块,可以使用这个运算提取背景。

 

七、黑帽

黑帽 = 闭运算结果 - 原图

黑帽运算的结果突出了比原图轮廓周围区域更暗的区域,所以黑帽运算用来分离比邻近点暗一些的斑块。

 

参考文章:

https://blog.csdn.net/eastmount/article/details/83651172

https://blog.csdn.net/Chaolei3/article/details/79618602

https://blog.csdn.net/qq_30263737/article/details/94625246