文章目录
- 1、开运算
- 2、闭运算
- 3、形态学梯度
- 4、顶帽
- 5、黑帽
- 6、核心API函数:morphologyEx()
- 7、综合示例:形态学滤波
1、开运算
开运算(Opening Operation),其实就是先腐蚀后膨胀的过程,其数学表达式如下:
作用:开运算可以消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
示例代码:
2、闭运算
先膨胀后腐蚀的过程称为闭运算(Closing Operation),其数学表达式如下:
作用:闭运算能够排除小型黑洞(黑色区域)
3、形态学梯度
形态学梯度(Morphological Gradient)是膨胀土与腐蚀图之差,数学表达式如下:
作用:二值图像进行这一操作可以将团块(blob)的边缘突出出来,利用形态学梯度来保留物体的边缘轮廓。
4、顶帽
顶帽运算(Top Hat)又常常被译为“礼帽”运算,是原图像与上文刚刚介绍的“开运算”的结果图之差。
因为开运算带来的结果是放大了裂缝或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作与选择的核的大小相关。
作用:顶帽运算往往用来分离比邻近点亮一些的斑块。在一副图像具有大幅的背景,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提前。
5、黑帽
黑帽(Black Hat)运算是闭运算的结果图与原图像之差,数学表达式为:
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小有关。
作用:黑帽运算用来分离比邻近点暗一些的斑块,效果图有着非常完美的轮廓。
6、核心API函数:morphologyEx()
- 第一个参数:输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下5种之一:CV_8U、CV_16U、CV_16S、CV_32F和CV_64F
- 第二个参数:即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型
- 第三个参数:int类型的op,表示形态学运算的类型,可以是如下表中的任意之一的标识符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G93BBVtQ-1656987857859)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220705095322440.png)] - 第四个参数:InputArray 类型的kernel,形态学运算的内核。若为NULL,表示的是使用参考点位于中心3x3的核。一般使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定的形状和尺寸的结构元素(内核矩阵)
getStructuringElement函数的第一个参数表示内核的形状:
- (1)矩形——MORPH_RECT
- (2)交叉形——MORPH_CROSS
- (3)椭圆形——MORPH_ELLIPSE
而getStructuringElement函数的第二个参数和第三个参数分别是内核的尺寸以及锚点的位置
一般在调用erode和dilate函数之前,要先定义一个Mat类型的变量来获得getStructuringElement函数的返回值,对于锚点的位置,有默认值(-1,-1),表示锚点位于中心。另外注意:十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响形态学运算结果的偏移
//getStructuringElement函数相关调用如下: int g_nStructuringElement(MORPH_RECT,Size(2*g_nStructuringElement+1, 2*g_nStructuringElement+1),Point(g_nStructuringElement,g_nStructuringElement));
之后便可以调用erode、dilate或morphologyEx函数时,由kernel参数填保存getStructuringElement返回值的Mat类型变量。
- 第五个参数:锚点的位置,默认值(-1,-1),锚点位于中心
- 第六个参数:迭代使用函数的次数,默认值为1.
- 第七个参数:用于推断图像外部像素的某种边界模式。有默认值BORDER_CONSTANT
- 第八个参数:当边界为常数时的边界值,有默认值morphologyDEfaultBorderValue(),一般不需要考虑。这些操作都是可以进行就地(in-place)操作,且对于多通道图像,每一个通道都单独进行操作。
7、综合示例:形态学滤波
说明:下面的程序运行示例一共会出现4个显示图像的窗口,包含原始图一个、开\闭运算一个,膨胀\腐蚀一个,顶帽\黑帽运算一个。它们分别使用滚动条,来控制得到形态学效果,且迭代值为10的时候为中间点。此外,还可以通过键盘1、2、3以及空格键来调节称不同的元素结构
原图像:
开运算、腐蚀、顶帽图像
闭运算、膨胀、黑帽图像