【OpenCV(C++)】图像处理:形态学滤波
- 形态学(morphology)
- 膨胀与腐蚀
- 膨胀
- 腐蚀
- 其它形态学滤波
- 开运算(Opening Operation)
- 闭运算(Closing Operation)
- 形态学梯度(Morphological Gradient)
- 顶帽(Top Hat)
- 黑帽(Black Hat)
- element
形态学(morphology)
图像处理中的形态学指的是数学形态学(Mathmatical morphology),它是一门建立在格论和拓扑学基础之上的图像分析学科。形态学操作就是基于形状的一系列图像处理操作。
膨胀与腐蚀
膨胀(dilate)与腐蚀(erode)是最基本的形态学操作,能实现多种多样的功能:
- 消除噪声
- 分割出独立的图像元素,在图像中连接相邻的元素
- 寻找图像中明显的极大值区域或极小值区域
- 求出图像的梯度
注:腐蚀和膨胀是对高亮部分而言的
膨胀
膨胀是求局部最大值的操作。
dilate函数使用像素邻域内的局部极大运算符来膨胀一张图片。
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("fg.jpg");
namedWindow("【原图】膨胀操作");
namedWindow("【处理图】膨胀操作");
imshow("【原图】膨胀操作", srcImage);
Mat element = getStructuringElement(MORPH_BLACKHAT, Size(100, 100));
Mat dstImage;
dilate(srcImage, dstImage, element);
imshow("【处理图】膨胀操作", dstImage);
waitKey(0);
return 0;
}
运行效果如下:
腐蚀
腐蚀是求局部最小值的操作。
erode函数使用像素邻域内的局部极小运算符来腐蚀一张图片。
erode(g_srcImage, g_dstImage, element);
其它形态学滤波
开运算(Opening Operation)
开运算即先腐蚀后膨胀的过程。可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
闭运算(Closing Operation)
闭运算即先膨胀后腐蚀的过程。能够排除小型黑洞(黑色区域)。
形态学梯度(Morphological Gradient)
即膨胀图与腐蚀图之差。对二值图像进行这一操作可以将blob的边缘突出出来。
顶帽(Top Hat)
即原图与开运算之差,突出比原图轮廓周围更明亮的区域。
黑帽(Black Hat)
即原图与闭运算之差,突出比原图轮廓周围更暗的区域。
element
下面分别为使用十字形、矩形、椭圆作为元素element的运行效果:
- 十字形
- 矩形
- 椭圆