美文网首页工作生活
形态学操作-腐蚀与膨胀

形态学操作-腐蚀与膨胀

作者: 思思入扣 | 来源:发表于2019-07-04 18:19 被阅读0次

    1.形态学操作
    形态学操作就是基于形状的一系列图像处理操作。一般情况下对二值化的图像进行操作。腐蚀与膨胀是最基本的形态学操作
    应用:
    (1)消除噪声
    (2)分割(isolate)独立的图像元素,以及连接(join)相邻的元素
    (3)寻找图像中的明显的极大值区域或者极小值区域
    2.膨胀(最大值dilate)
    此操作是将图像A与任意形状(通常为正方形或圆形)的内核B,,进行卷积。
    内核B有一个可定义的 锚点, 通常定义为内核中心点。
    进行膨胀操作时,将内核B划过图像,将内核B覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )

    void cv::dilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );  
    

    src——输入图像.
    dst——输出图像.
    element——用于膨胀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
    iterations——膨胀的次数
    3.腐蚀(erode)
    腐蚀提取的是内核覆盖下的相素最小值。进行腐蚀操作时,将内核B划过图像,将内核B覆盖区域的最小相素值提取,并代替锚点位置的相素。

    void cv::erode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 ); 
    

    src——输入图像.
    dst——输出图像.
    element——用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
    iterations——腐蚀的次数
    4.结构元素
    我们一般使用函数 getStructuringElement配合膨胀或腐蚀算法使用
    Mat strElement = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3), new Point(-1, -1));
    其中有三种内核形状可以选择:
    矩形: MORPH_RECT
    交叉形: MORPH_CROSS
    椭圆形: MORPH_ELLIPSE
    再指定内核大小,以及锚点位置。不指定锚点位置,则默认锚点在内核中心位置。
    5.图像的开运算
    开运算:先腐蚀后膨胀,移除小的对象时候很有用
    6.图像的闭运算
    闭运算:先膨胀后腐蚀,被用来填充前景物体中的小洞,或者抹去前景物体上的小黑点

    开闭运算直接的抹除小区域的体现如下.png

    7.梯度:膨胀与腐蚀图之差
    可以用来突出边缘,可以保留物体的边缘轮廓
    8.顶帽:原图与开运算结果之差
    开运算放大了裂缝或者局部低亮度的区域,所以,从原图中减去开运算后的图,得到的结果突出了比原图轮廓周围的区域更明亮的区域,这个操作与选择的核的大小有关。TopHat运算一般用来分离比邻近点亮一些的斑块,可以使用这个运算提取背景
    9.黑帽运算:闭运算的结果与原图之差
    黑帽运算的结果突出了比原图轮廓周围区域更暗的区域,所以黑帽运算用来分离比邻近点暗一些的斑块。

    参考:https://www.jianshu.com/p/6147d69c879f

    相关文章

      网友评论

        本文标题:形态学操作-腐蚀与膨胀

        本文链接:https://www.haomeiwen.com/subject/govchctx.html