在计算机视觉教程2-2:详解图像滤波算法(附Python实战)中我们将图像滤波进行了以下分类:
- 邻域滤波
- 线性滤波
- 非线性滤波
- 频域滤波
- 低通滤波
- 高通滤波
在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations)。
图像形态学运算是一类基于图像形状运算的非线性滤波技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。这里结构元素就相当于我们在滤波中所涉及到的模板——一个给定像素的矩阵,这个矩阵形状可以任意,但一般是正方形。
接下来,我们分析一下几种经典的图像形态学运算算法,再编程测试一下~
腐蚀就是用局部灰度最小值代替目标像素值实现对高亮区域的腐蚀。
举个例子,有这样一张图像和这样一个结构元素,其中结构元素的蓝色方块表示的是模板原点。
下面我们开始遍历这张图像,到下图这个位置的时候,模板内灰度最小值是灰色方格的像素,因此替换掉模板原点中蓝色方格处的像素为灰色(原本为白色,被腐蚀了)
膨胀就是用局部灰度最大值代替目标像素值实现对高亮区域的膨胀。
和腐蚀类似,遍历这张图像,到下图这个位置的时候,模板内灰度最大值是白色方格的像素,因此替换掉模板原点中蓝色方格处的像素为白色(原本为灰色,膨胀了)
理解了图像腐蚀与膨胀,那么开闭运算就很容易了
开运算能够除有效去除孤立点、毛刺和小桥;闭运算能够填平小孔,弥合缝隙。
顶帽运算与底帽运算是用于表征开闭运算与原图像间差异的运算,类似边缘检测的梯度差
先看看原图,一对可爱的猫咪
int eSize = 3; //结构元尺寸
int s = eSize * 2 + 1;
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
接着用结构元遍历原图,OpenCV
有封装好的API,直接调用即可
erode(src, dst, structureElement);
imshow("腐蚀操作后:", dst);
得到腐蚀后的图像如下所示,眼睛空洞洞的,有点恐怖片内味了,这还是原来那两只猫吗?
dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨胀操作后:", dstImg);
膨胀出来的小猫就显得轻松很多,感觉升华了。
今后要是想有一张照片创造光与影
、正与邪
、天使与恶魔
两种反差,可以考虑采用图像腐蚀和膨胀操作。
限于篇幅,无法再粘贴代码,完整的工程文件请关注下方二维码回复“CV006”领取,已经给你们打包好了哦~
计算机视觉基础教程说明
章号 内容
0 色彩空间与数字成像
1 计算机几何基础
2 图像增强、滤波、金字塔
3 图像特征提取
4 图像特征描述
5 图像特征匹配
6 立体视觉
7 项目实战
更多精彩专栏:
欢迎加入社区和更多志同道合的朋友交流:AI 技术社