OpenCV学习 7:图像形态学:腐蚀、膨胀

时间:2022-12-25 20:27:57

原创文章,欢迎转载,转载请注明出处

首先什么是图像形态学?额,这个抄下百度到的答案。
基本思想:
    用具有一定形态的结构元素去度量和提取图像中的对应形状已达到对图像分析和识别的目的,形态学图像处理表现为一种领域运算方式(这个和前面的模糊运算是一样的运算方式),效果取决于结构元素(就是前面smooth里面的核)的大小,内容以及逻辑运算的性质。
看了这些定义是不是很晕,对很晕。。。我比较关心的是它的用途和怎么计算。
    用途是:简化图像数据,保持他们基本的形状特性,并出去不相干的结构。
    基本运算包括:二值腐蚀和膨胀、二值开闭运算。其实开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。
    具体可以参看:http://wenku.baidu.com/link?url=CerKo-2R4zjP8RrmAmIkZ5YnQcJWbew0TNYBgBUnXd0NZ1djhN6nP6DXxU_b4fE1ITT4dsXB1tl3-3RTZNGcd0KGge89Ms72clAPq5Oj0ae
   简单的说,膨胀就是在选定的核下计算像素的最大数值,腐蚀和膨胀是相反的,就是在选定的核下计算像素的最小值。
    可以通过下图来看得形象写,数学渣表示只会看这种图
膨胀示意图如下:

OpenCV学习 7:图像形态学:腐蚀、膨胀

腐蚀示意图如下:

OpenCV学习 7:图像形态学:腐蚀、膨胀

后面我们的运算全部用默认的3*3的核,数值全为1,如上图所示的核。

那他们主要用来干嘛呢?效果又怎样呢?这个我们先进行下运算,然后把结果现实出来再说。
   先准备素材,准备两幅图片,两幅图片的拍摄位置略有不同,然后我们将他们相减再求绝对值,就可以看到大致轮廓了,如果是拍摄位置完全相同的图像,相减再求绝对值就是全黑了。

下面左边为其中一张原图,右边为相减再求绝对值后的图,记为diff图。

OpenCV学习 7:图像形态学:腐蚀、膨胀

另外一张原图就没放上,他们看上去一样,指示拍摄位置稍有不同,上面已经讲过了。
后面我们在diff图的基础上进行膨胀、腐蚀、开和闭运算。

运算结果如下:
从左到右从上到下依次为:  腐蚀(erode)                                     膨胀(dilate)
                                          开运算(先腐蚀再膨胀 cleandiff)        闭运算(先膨胀再腐蚀 dirtydiff)

OpenCV学习 7:图像形态学:腐蚀、膨胀

效果已经看到了,现在可以总结下这些运算的作用了。
闭运算可以使物体的轮廓线变得光滑,闭运算具有磨光物体内边界的作用,而开运算具有磨光图像边界的作用。
说起来还是有点绕口,不知道是用来干嘛的?我们百度下来个总结:
开操作作用:
  使轮廓平滑,抑制物体边界的小离散点或尖峰,用来消除小物体、在纤细点出分离物体、平滑较大物体边界的同时并不明显改变其面积。
闭操作的总用:

  用来填充物体内细小空洞、连接临近物体、平滑其边界的同时并不明显改变其面积。
 感觉上面的图看起来和结论比起来不是那么的明显对应啊。。因为我们不是二值图,如果用二值图的画效果就会和结论比较对应了。哈