图像腐蚀的原理
腐蚀和膨胀是计算机视觉任务中两种最基本也是最重要的形态学运算, 它们是后续要介绍的很多高级形态学处理的基础,很多其他的形态学算法都是由这两种基本运算复合而成。
首先,先明确什么是结构元素。设有两幅图像p1, p2,若用p2用来处理p1, 则称p2为结构元素,它们的关系类似于滤波中图像和模板的关系。
该公式可以这样理解:让原本位于图像原点的结构元素B在整个Z
2
平面上移动,如果当B的原点平移至z点时B能够完全包含于A中,则所有这样的z点构成的集合即为B对A的腐蚀图像,如图1所示。
图像腐蚀的理解与实践
图像腐蚀的原理其实就是求局部最大值的过程。举个例子:
1) 首先定义一个卷积核,核可以是任何形状和大小,如图2中B,且拥有一个单独定义出来的参考点(即B中间的星星,称为锚点)。B就是处理图像A的结构元素;
通常情况下,类似于B的结构元素是一个带参考点的正方形或者圆形,可将其称为模板或掩膜。
2) 然后将结构元素B与图像A进行卷积,计算核B覆盖区域的像素点最小值;
3) 将这个最小值赋值给参考点指定的像素。
经过以上步骤的处理,图像A中的高亮区域逐渐减小,如图2中的AΘB。
Python-OpenCV 图像腐蚀
在OpenCV中,腐蚀主要就是调用erode()函数。函数原型为:
cv2.erode(img, kernel, iterations)
该函数的参数具体位置:
img:指需要腐蚀的图像,这个图像是二值化的图像;
kernel:指腐蚀操作的核,默认是一个简单的3X3矩阵,也可以利用getStructuringElement()函数指明它的形状;
iterations:指的是腐蚀次数,默认为1。
图像腐蚀的核心就是定义结构元素,即卷积核。在 OpenCV-Python 中,可以使用其自带的getStructuringElement()函数,也可以直接使用NumPy的ndarray来定义一个结构元素。
getStructuringElement()函数原型为:
getStructuringElement(shape, ksize, anchor)
该函数返回一个mat类型的矩阵,函数参数为:
shape: 表示内核的形状。有矩形MORPH_RECT、十字形MORPH_CORSS 和椭圆形MORPH_ELLIPSE三个值选择;
ksize: 是内核的尺寸(n,n);
anchor