OpenCV2编程手册笔记之 5.2形态学滤波对图像进行腐蚀、膨胀运算

20170830

第一篇文章啦,写一下笔记记一下学到的东西,从这开始吧

ps:就是自己的学习笔记,随便写了一写

1.简介

    第五章的第一个内容是腐蚀和膨胀,腐蚀和膨胀都是对图像白色部分进行运算。也就是二值化之后的白色部分进行运算。最根本的原理就是用定义的核 kernel 进行卷积操作。

    腐蚀和膨胀是最基本的形态学运算。数学形态学中最基本的工具是结构工具,其简单地定义为像素的结构(形状)和一个原点(锚点)。使用形态学滤波涉及对图像的每个像素应用这个结构。方法即是将锚点与给定的元素对齐,并在相交的部分定义一组进行形态学运算的像素。

    原则上说,结构元素可以是任何形状,但以方形、圆形、菱形居多。

    同时,由于形态学滤波需要图像为二值图片,且由于形态学惯例用白色像素代表前景物体,用黑色表示背景,因此,我们需要对图像进行取反。在形态学术语中,这种图像称为之前图像的补。


灰度图像的补

2.实现方法

    在OpenCV中,腐蚀和膨胀由以下函数实现,用法很直接:

cv::erode
cv::dilate

    腐蚀和膨胀产生的效果分别为:


腐蚀操作


膨胀操作

3.作用原理

    当锚点与目标像素重合的时候,所有与其相交的元素都将被包括到当前的像素集合之中。腐蚀将用包围区域内最小值的像素代替锚点中的像素,而膨胀则取相反的操作。这就是为什么腐蚀和膨胀要求输入图像是只含两种像素的二值图像。

    在腐蚀运算中,物体的尺寸会减小,将会移除图像背景中的“噪声”;在膨胀运算中,物体的尺寸相对应的会增大,物体内的“空洞”会被填满。

    卷积操作:将核沿着图像移动,计算核所包围的面积,并将其最大(小)值赋值给参考点,这就是卷积

void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

    我们可以看到,腐蚀操作的第一个参数是输入图像,第二个参数则是输出图像,而第三个参数则是卷积核大小。

    在 OpenCV 中,如果我们将第三个参数设置为默认值(cv::Mat()),则将默认使用3 * 3结构的方形结构。但是我们也可以自定义这个卷积核,使用的便是以下的方法。

cv::Mat element(7, 7, CV_8U, cv::Scalar(1));
    当卷积核的大小增大时,腐蚀和膨胀的程度将会大大增加。这种方法形成的卷积核仍将会把锚点设置在正方形的中央。

    拓展:getStructuringElement 第一个参数表示内核形状,我们使用矩形MORPH_RECT, 在这里,opencv3中需要用数字代替英文,0代表着长方形。应用MorphShapes命令转到定义可以确定数字所代表的图形;第二个参数表示内核尺寸;第三个参数表示参考点位置

    继续拓展:对于腐蚀核膨胀的第三个参数,都是Mat类型的参数。因此,自定义的话,参考如下代码

cv::Mat element = cv::getStructuringElement(0,           这里使用0代表长方形
cv::Size(3, 3),                                                        这里使用从v::Size确定核的大小
cv::Point(1, 1));                                                      这里使用cv::Point确定参考点的位置

    这样,腐蚀的操作就完成了。

    getStructuringElement这个函数对腐蚀和膨胀都起作用

    对于膨胀之后图像变大,腐蚀之后图像变小。可以认为膨胀取最小值,也就是把背景(黑色0)赋值给参考点;腐蚀为相同道理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值