二 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑( 二 )


文章插图
OK,我们开始讲解 。
1.1开运算( )
开运算( ),其实就是先腐蚀后膨胀的过程 。其数学表达式如下:
开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积 。效果图是这样的:

二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
实际效果图:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
1.2闭运算( )
先膨胀后腐蚀的过程称为闭运算( ),其数学表达式如下:
闭运算能够排除小型黑洞(黑色区域) 。效果图如下所示:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
实际效果图:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
1.3形态学梯度(t)
形态学梯度( )为膨胀图与腐蚀图之差,数学表达式如下:
对二值图像进行这一操作可以将团块(blob)的边缘突出出来 。我们可以用形态学梯度来保留物体的边缘轮廓,如下所示:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图

二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
实际素材效果图:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
1.4顶帽(Top Hat)
顶帽运算(Top Hat)又常常被译为”礼帽“运算 。为原图像与上文刚刚介绍的“开运算“的结果图之差,数学表达式如下:
因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关 。
顶帽运算往往用来分离比邻近点亮一些的斑块 。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取 。
如下所示:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
素材效果图:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
1.5黑帽(Black Hat)
黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差 。数学表达式为:
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关 。
所以,黑帽运算用来分离比邻近点暗一些的斑块 。非常完美的轮廓效果图:
实际素材效果图:
二  形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

文章插图
二、深入——源码分析溯源
本文的主角是中的函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算,形态学梯度,“顶帽”、“黑帽”等等 。这一节我们来一起看一下函数的源代码 。
[cpp] view plain copyprint ?
//-----------------------------------【erode()函数中文注释版源代码】---------------------------- //说明:以下代码为来自于计算机开源视觉库的官方源代码 //源代码版本:2 。4 。8 //源码路径:…\\\\\src\morph 。cpp //源文件中如下代码的起始行数:1369行 //中文注释by浅墨 //-------------------------------------------------------------------------------------------------------- ::(,,intop, ,,, ,&) { //拷贝Mat数据到临时变量 =_src 。
(),temp; _dst 。(src 。size(),src 。type()); =_dst 。();//一个大,根据不同的标识符取不同的操作 (op) { : erode(src,dst,,,,,); break; : (src,dst,,,,,); break; : erode(src,dst,,,,,); (dst,dst,,,,,); break; : (src,dst,,,,,); erode(dst,dst,,,,,); break; : erode(src,temp,,,,,); (src,dst,,,,,); dst-=temp; break; : if(src 。