Python图像处理:图像腐蚀与图像膨胀
图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要⽤来寻图像中的极⼤区域和极⼩区域。其中膨胀类似于“领域扩张”,将图像中的⾼亮区域或⽩⾊部分进⾏扩张,其运⾏结果图⽐原图的⾼亮区域更⼤;腐蚀类似于“领域被蚕⾷”,将图像中的⾼亮区域或⽩⾊部分进⾏缩减细化,其运⾏结果图⽐原图的⾼亮区域更⼩。
1.图像膨胀
膨胀的运算符是“⊕”,其定义如下:
该公式表⽰⽤B来对图像A进⾏膨胀处理,其中B是⼀个卷积模板或卷积核,其形状可以为正⽅形或圆形,通过模板B与图像A进⾏卷积计算,扫描图像中的每⼀个像素点,⽤模板元素与⼆值图像元素做“与”运算,如果都为0,那么⽬标像素点为0,否则为1。从⽽计算B覆盖区域的像素点最⼤值,并⽤该值替换参考点的像素值实现膨胀。下图是将左边的原始图像A膨胀处理为右边的效果图A⊕B。
2.图像腐蚀
腐蚀的运算符是“-”,其定义如下:
该公式表⽰图像A⽤卷积模板B来进⾏腐蚀处理,通过模板B与图像A进⾏卷积计算,得出B覆盖区域的像素点最⼩值,并⽤这个最⼩值来替代参考点的像素值。如图所⽰,将左边的原始图像A腐蚀处理为右边的效果图A-B。
处理结果如下图所⽰:
⼆. 图像腐蚀代码实现
numpy库运行速度1.基础理论
形态学转换主要针对的是⼆值图像(0或1)。图像腐蚀类似于“领域被蚕⾷”,将图像中的⾼亮区域或⽩⾊部分进⾏缩减细化,其运⾏结果图⽐原图的⾼亮区域更⼩。其主要包括两个输⼊对象:
(1)⼆值图像
(2)卷积核
卷积核是腐蚀中的关键数组,采⽤numpy库可以⽣成。卷积核的中⼼点逐个像素扫描原始图像,如下图所⽰:
被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄⾊点位置,其周围全部是⽩⾊,保留⽩⾊,否则变为⿊⾊,图像腐蚀变⼩。
2.函数原型
图像腐蚀主要使⽤的函数为erode,其原型如下:
dst = de(src, kernel, iterations)
参数dst表⽰处理的结果,src表⽰原图像,kernel表⽰卷积核,iterations表⽰迭代次数。下图表⽰5*5的卷积核,可以采⽤函数np.ones((5,5), np.uint8) 构建。
注意:迭代次数默认是1,表⽰进⾏⼀次腐蚀,也可以根据需要进⾏多次迭代,进⾏多次腐蚀。
3.代码实现
完整代码如下所⽰:
输出结果如下图所⽰:
由图可见,⼲扰的细线被进⾏了清洗,但仍然有些轮廓,此时可设置迭代次数进⾏腐蚀。erosion = de(src, kernel,iterations=9)
输出结果如下图所⽰:
三. 图像膨胀代码实现
1.基础理论
图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的⾼亮区域或⽩⾊部分进⾏扩张,其运⾏结果图⽐原图的⾼亮区域更⼤,线条变粗了,主要⽤于去噪。
(1) 图像被腐蚀后,去除了噪声,但是会压缩图像。
(2) 对腐蚀过的图像,进⾏膨胀处理,可以去除噪声,并且保持原有形状。
它也包括两个输⼊对象:
(1)⼆值图像或原始图像
(2)卷积核
卷积核是腐蚀中的关键数组,采⽤numpy库可以⽣成。卷积核的中⼼点逐个像素扫描原始图像,如下图所⽰:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论