1.统计排序滤波
上节笔记中提到的
均值模糊、高斯模糊
两种图像模糊操作都属于图像的线性滤波
,
本文则首先将笔记OpenCV中存在的几种基于统计排序的滤波器
,
即
中值滤波
、最大值
与最小值滤波
,这几种滤波器在特定场合与应用场景下,也经常用来(
划重点,对应滤波的作用!!!
)消除图像噪声
(中值滤波
可以抑制椒盐噪声;
最大值滤波
可以填充小的闭合区域以及狭窄的间断;
最小值滤波
可以去除小的图像噪声或者图像元素对象的大小丝黏连)
;
或者抑制图像像素极小值与极大值
(最大值
与最小值滤波
)。
1.1.中值滤波
- 中值滤波同样也需要一个
卷积核
,
与卷积滤波不同的是,它不会用卷积核的每个系数与对应的像素值做算术计算
,
而是把对应的像素值做排序
,取中间值
作为输出。
- 具体说明如图所示:
![]()
线性滤波
是一个自带有/设置有
系数的“实”模板
;中值滤波
是有一个只有滤波特性,没有设置系数
的“空”模板
;- 运算逻辑顺序概况:
“空”模板
移动,套/捞
与模板重合的N×N个像素值上来,
对套上来的值排序,取中值;
置回模板核中心格子下重合的像素块;
中值滤波
的相关API函数处于Imgproc包
中,完整的说明如下:
-
medianBlur(Mat src, Mat dst, int ksize)
src
:表示输入图像,
当ksize
为3、5
的时候输入图像可以为浮点数
或者整数类型
,
当ksize大于5
的时候,则只能为字节类型图像
,即CV_8UC
。dst
:表示中值滤波以后输出的图像
,其类型与输入图像保持一致
。ksize
:表示上图中模板的大小,
常见为3、5
,注意模板大小
必须为奇数
而且必须大于1
。
调用此函数实现中值滤波的相关代码如下:
Mat src = Imgcodecs.imread(fileUri.getPath());
if(src.empty()){
return;
}
Mat dst = new Mat();
Imgproc.medianBlur(src, dst, 5);
划重点!!!
- 中值滤波对图像的
椒盐噪声
有很明显的抑制作用
,是一个很好的图像降噪的滤波函数
。
!!!