![54e171fc4e2893aade4cc78e64b16fae.png](https://img-blog.csdnimg.cn/img_convert/54e171fc4e2893aade4cc78e64b16fae.png)
时间为友,记录点滴。
我们在《初始滤波之均值滤波》中有聊过滤波的本质,以及介绍了其中一种线性滤波(均值滤波)。对于常见的非线性滤波“中值滤波”也在《视频的读取和处理》中有介绍。今天我们来介绍另外两种滤波方式:
- 最大值滤波
- 最小值滤波
再了解这两种滤波之前,我们先来看一些概念。
啥是形态学?
简单来讲,形态学操作就是基于形状的一系列图像处理操作。通过将结构元素作用于输入图像来产生输出图像。
有啥作用?
常用的形态学处理方法包括:腐蚀、膨胀、开运算、闭运算、顶帽运算、底帽运算,其中膨胀与腐蚀是图像处理中最常用的形态学操作手段,其他方法是两者相互组合而产生的。
膨胀和腐蚀的运用广泛:
- 消除噪声
- 分割(isolate)独立的图像元素,以及连接(join)相邻的元素。
- 寻找图像中的明显的极大值区域或极小值区域。
如何实现?
我们可以想象跟卷积类似,首先选取一个结构元素(我们以3*3的矩形核为例),并且定义其锚定点(以重心为例),结构元素覆盖的部分。
以结构元素的最小值填充锚定点的做法为腐蚀
以结构元素的最大值填充锚定点的做法为膨胀
![92e5fcee3349ca0b2e3d644c43064774.png](https://img-blog.csdnimg.cn/img_convert/92e5fcee3349ca0b2e3d644c43064774.png)
OpenCV的大全,这种API肯定少不了啊。
膨胀:
CV_EXPORTS_W
- src 输入图像,任意通道的。深度可为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
- dst 输出图像,类型与通道数目必须跟输入保持一致
- kernel 结构元素, 如果kernel=Mat()则为设定的3×3矩形。
- anchor 锚定位置,默认中心位置。
- iterations 循环次数
- borderType 边缘填充类型(不用关心,使用默认值)
腐蚀:
CV_EXPORTS_W
- src 输入图像,任意通道的
- dst 输出图像,类型与通道数目必须跟输入保持一致
- kernel 结构元素
- anchor 中心位置锚定
- iterations 循环次数
- borderType 边缘填充类型(不用关心,使用默认值)
获取结构元素:
CV_EXPORTS_W
- shape:表示内核的形状,有三种形状可以选择。
- 矩形:MORPH_RECT;
- 交叉形:MORPH_CROSS;
- 椭圆形:MORPH_ELLIPSE;
- ksize 是指结构元素大小
- anchor 中心锚点的位置
看起来很简单,还是用代码来实践一下把。
C++
1. dilate和erode的后面几个参数都可以选用默认值
2. Kernel的选择要用getStructuringElement,参数选择有讲究
#include
![0ee15218cd1d09d322484a1703667f72.png](https://img-blog.csdnimg.cn/img_convert/0ee15218cd1d09d322484a1703667f72.png)
![739f19ec53ead1faafb5f5007d068256.png](https://img-blog.csdnimg.cn/img_convert/739f19ec53ead1faafb5f5007d068256.png)
Python:
#!/usr/bin/env python