开闭运算是二值形态学的重要部分,是对腐蚀和膨胀算法的扩展应用,在图像的去噪方面也是十分的常用。
二值开运算
定义
用结构元素B(即模板核)对图像A进行开运算,可以用符号$A\circ B$来表示,其定义式为:
$A\circ B=(A\Theta B)\bigoplus B$
所以开运算实际上就是A先被B腐蚀,再被B膨胀。
作用
很明显,开运算可以消除一些很小的背景噪点(椒盐噪声),平滑较大物体的边界而不明显改变其体积。也会磨光矩形的内边缘,以及分离一些粘连目标。
(这里所说的背景噪点是指以黑色为背景色,白色为前景色)
OpenCV调用
1 | #coding:utf-8 |
这里调用的是cv2.morphologyEx函数,这是专门用于处理形态学问题的,传入适当参数即可。
由于图像本身是以白色为背景,因此将他的像素取个反,使他符合约定俗称的黑色背景。
(写的时候发现一个问题,就是imread好像并不直接支持gif图像格式的读取,因此本来是test.gif的图片还得事先进行convert,转化为test.png然后才好使用)
效果图
二值闭运算
定义
用结构元素B(即模板核)对图像A进行闭运算,可以用符号$A\cdot B$来表示,其定义式为:
$A\cdot B=[A\bigoplus (-B)]\Theta (-B)$
所以闭运算实际上就是A先被B膨胀,再被B腐蚀。
作用
闭运算在去除图像的前景噪声方面具有很好的应用,通过闭运算之后,图像原有目标的间断可以得到连接、目标内部的孔洞可以得到填充而基本不改变原图的大小以及形态。同时也会磨光凸向图像内部的边角。
OpenCV调用
1 | #coding:utf-8 |
没啥好说的了,对着开操作改下参数就好了。