1、基本概念
腐蚀与膨胀是一对相反的操作,所以腐蚀就是求全局最小值的操作。
腐蚀(erode)是求局部最小值的操作。从数学角度讲,膨胀或腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。核B与图形卷积,即计算核B覆盖的区域的像素点的最小值,并把这个最小值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐减小,如图所示,这就是膨胀操作的初衷。
核可以是任何形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点(anchorpoint)。多数情况下,核是一个小的,中间带有参考点和实心正方形或者圆盘。其实可以将核看作模板或者掩码。
公式为:
2、API函数讲解
C++:void erode(InputArray src,OutputArray dst,InputArray kernel,
Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue());
参数1:输入图像
参数2:目标图像,和原图像有相同的尺寸和类型
参数3:腐蚀操作核。当为NULL时,表示使用参考点位于中心3*3的核
我们一般使用函数getStructuringElement配合这个参数使用。getStructuringElement函数会返回指定形状和尺寸的结构原始(内核矩阵)。其中getStructuringElement函数的第一个参数表示内核的形状,有如下三种形状可以选择(MORPH_RECT:矩形 MORPH_CROSS:交叉形 MORPH_ELLIPSE:椭圆形)
而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调研erode或dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。
参数4:锚点的位置,有默认值(-1,-1),表示锚点位于中心。
参数5:迭代使用erode()函数的次数,默认值为1.
参数6:用于推断图像外部像素的某种边界模式。
参数7:当边界为常数是的边界值,有默认值morphologyDefaultBorderValue(),一般不去管它。需要用到它时,可以查看官方文档。
3、案例
void erodeFun()
{
Mat src = imread("img.jpg");
namedWindow("原图", 0);
imshow("原图", src);
//获取自定义核
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dst;
//进行腐蚀操作
erode(src, dst, element);
namedWindow("腐蚀", 0);
imshow("腐蚀", dst);
}
}
来源:CSDN
作者:忘·月
链接:https://blog.csdn.net/ETNthrough/article/details/104010342