1 图像形态学运算
在计算机视觉教程2-2:详解图像滤波算法(附Python实战)中我们将图像滤波进行了以下分类:
- 邻域过滤
- 线性过滤
- 非线性滤波
- 频域滤波
- 低通滤波
- 高通滤波器
在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations)。
图像形态运算是一种基于图像形状运算的非线性滤波技术。其基本思想是利用一些特殊的结构元素来测量或提取图像中相应的形状和特征,用于进一步的图像分析和处理。这里的结构元素相当于我们在过滤中涉及的模板——给定像素的矩阵,这个矩阵的形状可以是任意的,但一般是正方形。
下面我们来分析几个经典的图像形态运算算法,然后进行编程测试~
2 腐蚀
侵蚀是将目标像素值替换为局部灰度最小值,以实现对高亮区域的侵蚀。
例如,有一个图像和一个结构元素,其中结构元素的蓝色方块代表模板原点。
接下来,我们开始遍历这个图像。当我们到达下图中的位置时,模板中的最小灰度值就是灰色方块的像素,所以将模板原点蓝色方块中的像素替换为灰色(原来是白色,替换为灰色)腐蚀)
遍历这张图片后,我们得到
3 膨胀
扩展是用局部灰度值最大值替换目标像素值,实现高亮区域的扩展。
与腐蚀类似,遍历这张图,当到达下图中的位置时,模板中的最大灰度值为白色方块的像素,所以将模板原点蓝色方块处的像素替换为白色(原为灰色) , 展开)
这样遍历完这张图,最终展开的结果是
最后一张实物图感受腐蚀膨胀的效果
4 开运算与闭运算
了解图像腐蚀和膨胀,然后打开和关闭操作很容易
- 开运算(Opening):先腐蚀再膨胀
- 闭运算(Closing):先膨胀再腐蚀
开放式操作可有效去除孤立点、毛刺和小桥;封闭式操作可以填补小孔和桥接间隙。
上图假设灰色区域被突出显示。
5 顶帽运算与底帽运算
顶帽操作和底帽操作是用来表征开闭操作与原始图像之间差异的操作,类似于边缘检测的梯度差异。
- 图像顶帽运算:表征原始图像与开运算得到的图像之间的差异
- 图像底帽操作:表征原始图像与闭合操作得到的图像之间的差异
6 恶魔与天使
先看原图,一对可爱的猫咪
要执行腐蚀操作,首先创建结构元素
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);
腐蚀的图像如下所示。眼睛是空洞的,有点恐怖片的感觉。这是原来的两只猫吗?
膨胀操作类似于腐蚀,也有OpenCV
封装好的API
dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨胀操作后:", dstImg);
膨胀的小猫看起来轻松多了,感觉升华了。
以后如果想让一张照片产生光与影
、正与邪
、天使与恶魔
两种对比,可以考虑使用图像腐蚀和膨胀操作。
限于篇幅,无法再粘贴代码,完整的工程文件请关注下方二维码回复“CV006”领取,已经给你们打包好了哦~
🚀 计算机视觉基础教程说明
章号 内容
0 色彩空间与数字成像
1 计算机几何基础
2 图像增强、滤波、金字塔
3 图像特征提取
4 图像特征描述
5 图像特征匹配
6 立体视觉
7 项目实战
🔥更多精彩专栏:
- 《机器人原理与技术》
- 计算机视觉教程
- “机器学习”
- “嵌入式系统”
- “数值优化方法”
- …
🏠欢迎加入社区和更多志同道合的朋友交流:AI 技术社
文章出处登录后可见!