一、基本的形态学操作
简单来讲,形态学操作就是基于形状的一系列图像处理操作。通过将 结构元素 作用于输入图像来产生输出图像。
最典型的两种操作,是腐蚀及其膨胀操作。
膨胀: 它是取每一个位置的矩形领域内值的最大值作为该位置的输出灰度值,注意白色的灰度值最大,故使白色区域变大
腐蚀: 它是取每一个位置的矩形领域内值的最小值作为该位置的输出灰度值,故其使灰色区域最大
Mat element = getStructuringElement( dilation_type,
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
Point( dilation_size, dilation_size ) );
dilate( src, dilation_dst, element ); // 膨胀操作
erode( src, dilation_dst, element );//腐蚀操作
二、复合的形态学操作
下面是开和闭运算:
开运算:dilate(erode());白色面积先变小,再增大白色
闭运算: erode(dilate());白色面积先变大,再变小,
当图像的前景更亮,背景更暗时:
开运算是去除细小孤立点,断开连接桥(当噪声强度高,发白);闭运算是指连接两者中微小的间隙(可以去除黑色噪点)。
形态学梯度:膨胀-腐蚀,去掉填充部分,得到轮廓线(这里是指基本梯度,内部梯度为原图-腐蚀,外部梯度为膨胀-原图)
顶帽:原图像-开运算,突出原图轮廓区域附近更亮的区域。让亮的更亮;
黑帽:闭运算-原图像 通过与原图做差,突出原图轮廓区域附近更暗的区域。让暗的更亮。
(所谓突出,就是被突出者均以白色进行显示。)
二、相关代码
使用扩展的形态学函数
运行指定形态学操作:
morphologyEx( src, dst, operation, element );
imshow( window_name, dst );
}
运行形态学操作的核心函数是 morphologyEx 。在本例中,我们使用了4个参数(其余使用默认值):
src : 原 (输入) 图像
dst: 输出图像
operation: 需要运行的形态学操作。 我们有5个选项:
Opening: MORPH_OPEN : 2
Closing: MORPH_CLOSE: 3
Gradient: MORPH_GRADIENT: 4
Top Hat: MORPH_TOPHAT: 5
Black Hat: MORPH_BLACKHAT: 6