作者:FPGA入门到精通
图像腐蚀算法是形态学图像处理中的一种基本操作,类似于“领域被蚕食”的过程。这种操作可以将图像中的前景色区域进行缩减细化,其运行结果比原图的前景色区域更小,适用于二值化图像。
通过阅读本文,可与了解到
1、图像腐蚀算法的基本原理是什么?
2、图像腐蚀和图像膨胀怎么区分?
3、Python实现以及FPGA实现。
一、图像腐蚀算法
1、基本原理
腐蚀的运算符号是“−”,其运算规则是:A−B={x∣Bx⊆A},该公式表示图像A用卷积模板B来进行腐蚀处理。
注意这里有一个误区,网上有的白色区域腐蚀,也有的是黑色区域被腐蚀,这里怎么分的清楚?
一幅二值图像的前景色和背景色,前景色可以是黑色,也可以是白色,图像腐蚀和图像腐蚀处理是前景色,也就是前景色会缩小。
这里给一个通俗点的腐蚀过程解释:
(1)在执行腐蚀操作时,我们通常选择一个小的结构元素(例如3x3或5x5的窗口),然后遍历整个图像。
(2)对于图像中的每一个像素点,对应结构元素的中心点,检查原图像与结构元素覆盖区域中所有像素点,如果覆盖区域中有背景色像素点,则将这个中心点像素填入背景色,这样就会删除图形边界点,只有覆盖区域所有像素点的都是前景色,才能保持这个像素的值。
B结构元素是3*3窗口,示例如下:
通过上面这个分析解释,相信大家应该很容理解图像腐蚀了。
2、应用场景
在连续进行腐蚀操作时,可以观察到图像中对象的尺寸逐渐减小,最终可能会消失。这个过程对于去除图像中的小颗粒噪声、细化图像中的细节以及分离接触的物体非常有用。
在实际应用中,腐蚀算法常用于图像分割、边缘检测、特征提取等多种场景。它是形态学操作的基础,经常与其他形态学运算,如膨胀、开运算和闭运算等结合使用,以达到更复杂的图像处理目的。
二、Python实现
1、实现代码
import cv2 import numpy as np img = cv2.imread('1280_720.bmp') img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) erode_img = cv2.erode(img, kernel=np.ones((2, 2), np.uint8), iterations=3) cv2.namedWindow("orignal", 0) cv2.resizeWindow("orignal", 300, 180) # 设置窗口大小 cv2.namedWindow("erode", 0) cv2.resizeWindow("erode", 300, 180) # 设置窗口大小 cv2.imshow('orignal', img) cv2.imshow('erode', erode_img) cv2.waitKey(0) cv2.destroyAllWindows()
2、运行结果
前景色是白色,背景色是黑色,从图中可以看出,图像腐蚀后的图像,黑色区域有扩张,白色区域有明显减少。
三、FPGA实现
图像腐蚀的实现,需要多个算法模块才能实现,包括灰度二值化、3行缓存、图像腐蚀算法模块,具体的系统框架如下图:
大家可以将前面学习的算法模块,拿过来串联一起就行,可以实现流水线式的图像处理。
可以看看FPGA实现效果图:
前景色是黑色,背景色是白色,从图中可以看出,图像腐蚀后的图像,黑色区域有减少,白色区域有明显扩张。
文章来源:FPGA入门到精通