形态学滤波:腐蚀与膨胀(一)

来源:互联网 发布:怎么恢复数据 编辑:程序博客网 时间:2024/05/16 18:56

一、自己使用过的关于二值化、膨胀、腐蚀以及拟合椭圆中心的代码如下:

 bool  detectEllipse(const Mat  &img, vector<RotatedRect> &data){    vector<vector<Point>>  contours;    vector<Vec4i> hierarchy;    ///////STEP1:图像二值化处理    Mat thresholdImg;    threshold(img, thresholdImg, 100, 255, 0);///此处阈值的设定如果较小的话,如果噪声添加较大,将影响最终结果。    //////STEP2:图像的形态学处理(腐蚀和膨胀)(开运算:先腐蚀再膨胀)    /////STEP2.1:先腐蚀;    int dilateKernelSize = 1;///定义膨胀的内核大小    Mat element = getStructuringElement(MORPH_RECT, Size(2 * dilateKernelSize + 1, 2 * dilateKernelSize + 1), Point(-1, -1));///此处的Point(-1,-1)表示锚位于中心,为默认值,可以不写。    Mat erodeImg;    erode(thresholdImg, erodeImg, element);    //////STEP2.2:再膨胀;    Mat dilateImg;    dilate(erodeImg, dilateImg, element);    //////STEP3:寻找椭圆轮廓    findContours(dilateImg, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));    if (!contours.size())    {        return false;    }    else    {        ///////STEP4:用椭圆拟合二维点集        for (int i = 0; i < contours.size(); i++)        {            data.push_back(fitEllipse(contours[i]));        }    }    return true;}

二、关于腐蚀和膨胀,在此做一些浅显的总结。
形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有两种,分别是:膨胀与腐蚀。
膨胀与腐蚀能实现多种多样的功能,主要如下:
1)消除噪声;
2)分割出独立的图像元素,在图像中连接相邻的元素;
3)寻找图像中的明显的极大值区域或极小值区域;
4)求出图像的梯度。


三、 对于上述代码中所生成的图片,进行一些说明。
二值化后的图片(thresholdImg):
这里写图片描述
使用imageWatch插件放大后可见其边缘:
这里写图片描述
内核大小为:
这里写图片描述
腐蚀后的图片为:
这里写图片描述
膨胀后的图片为:
这里写图片描述
注:此处经过二值化后,图像的边缘比较特殊,腐蚀膨胀操作对它影响不大。、


四、接下来谈谈自己对腐蚀膨胀的理解与认知
1) 膨胀与腐蚀是对白色部分(高亮部分)而言的。
膨胀——>膨胀后的图比原图有更大的高亮区域。
腐蚀——>与上述相反。
2)膨胀就是求局部最大值的操作。从数学角度来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。
而腐蚀与膨胀是相反的一对操作,所以腐蚀就是求局部最小值的操作。
核(element )可以是任何形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点。多数情况下,核是一个小的,中间带有参考点和实心正方形或者圆盘。其实,可以把核视为模板或者掩码。

五、关于OPENCV中的膨胀和腐蚀函数
膨胀:dilate()函数;腐蚀函数:erode()。可以参考opencv documentation中的函数参数进行调用。
值得说一下的是:我们一般使用函数getStructuringElement配合这个参数的使用。
getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。其中,getStructuringElement函数的第一个参数表示内核的形状,有如下三种形状可以选择:
1、矩形:MORPH_RECT;
2、交叉形:MORPH_CROSS;
3、椭圆形:MORPH_ELLIPSE。

0 0
原创粉丝点击