【图像处理】腐蚀(erode)和膨胀(dilate)

原理

二值图像的处理方法,虽然基础,但在消除孔洞等任务中的效果非常好

腐蚀(erode)

腐蚀操作会把高亮(即值为255)的边界腐蚀掉。设定卷积核尺寸,卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是1,那么中心元素就保持原来的像素值,否则就变为0。
在这里插入图片描述

膨胀(dilate)

膨胀操作会把高亮(即值为255)的边界膨胀开。设定卷积核尺寸,卷积核沿着图像滑动,与卷积核对应的原图像的像素值中只要有一个是1,中心元素的像素值就是1。
在这里插入图片描述

OpenCV实现

某些场景下,先用腐蚀再用膨胀可以达到去除噪声的效果

C++实现

腐蚀:

Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
erode(src, dst, element)

膨胀:

Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
dilate(src, dst, element)
  • getStructuringElement:返回指定形状和尺寸的结构元素
  • src:输入图像
  • dst:腐蚀或膨胀操作后输出图像
  • element:自定义卷积核

关于函数getStructuringElement:

  • 第一个参数:矩形——MORPH_RECT,交叉形——MORPH_CROSS,椭圆形——MORPH_ELLIPSE
  • 第二个参数:卷积核的尺寸
  • 第三个参数:锚点的位置,默认值Point(-1, -1),表示锚点位于中心点

python实现

腐蚀:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 
dst = cv2.erode(src, kernel) 

膨胀:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 
dst = cv2.dilate(src, kernel)

开运算(Opening Operation)

先腐蚀后膨胀

开运算可以用来消除小物体在纤细点出分离物体平滑较大物体的边界同时并不明显改变其面积

闭运算(Closing Operation)

先膨胀后腐蚀

闭运算能够消除小型黑洞

形态学梯度(Morphological Gradient)

膨胀图与腐蚀图之差

对二值图像进行这一操作可以将团块(blob)的边缘突出来,可以用来保留物体的边缘轮廓

顶帽运算(Top Hat)

原图像与开运算的结果图之差

黑帽运算(Black Hat)

闭运算的结果图与原图像之差

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
如果我的文章对您有帮助,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值