OpenCV第四讲: 非线性滤波

上一两节讲的是线性滤波,即每个像素的输出值是一些输入像素的加权和,线性滤波器易于构造,并且易于从频率响应角度来进行分析。

然而, 在很多情况下,使用邻域的非线性滤波会得到更好的效果,比如噪声是散粒噪声而不是高斯噪声, 用高斯滤波器对图像进行模糊时不会去除噪声,它们只是转换了更为柔软但仍然可见的散粒。( --> 中值滤波 show Time)

1. 中值滤波

它是一种典型的非线性滤波技术,原理是用像素点邻域灰度值的中值来代替该像素点的灰度值。 该方法在去除脉冲噪声椒盐噪声的同时又能保留图像的边缘细节

  • 中值滤波与均值滤波比较
/*
 优势:中值滤波几乎不受噪声影响,均值滤波会将噪声成分当做数据进行计算,输出会受到一定程度上的影响。所以中值滤波消除噪声能力更胜一筹。
		
 劣势: 中值滤波花费的时间是均值滤波的5倍以上。
*/

2. 双边滤波

结合图像的空间邻域度像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的(即,边缘保存较好),具有简单、非迭代、局部的特点。

在这里插入图片描述

  • 双边滤波与高斯滤波
//前者比后者多一个高斯方差,双边滤波的加权系数(w(i,j,k,l))取决于定义域核和值域核的乘积,就会产生一个依赖于数据的双边滤波权重函数。

3. OpenCV中非线性滤波器相关函数

/*
	medianBlur  ## 中值滤波
	bilateralFilter  ## 双边滤波
*/
	/*******************************************************************
	 * void bilateralFilter( InputArray src, OutputArray dst, int d,
	 *                                 double sigmaColor, double sigmaSpace,
	 *                                 int borderType = BORDER_DEFAULT );
	 * 
	 * d: 滤波邻域直径
	 * sigmaColor: 颜色空间滤波器的sigma值
	 * sigmaSpace: 坐标空间的标注方差 它的数值越大, 意味着越远的像素会相互影响, 
	 * 
	 *******************************************************************/
		Mat medImage, doubImage; 
		medianBlur(srcImage, medImage, 5);  // ksize Must > 1 odd.(3, 5, 7)
		imshow("medianBlur", medImage);
	
		bilateralFilter(srcImage, doubImage, 25, 25*2, 25/2);
		imshow("bilateralFilter", doubImage);

4. 实现结果

在这里插入图片描述
在上图中,从左到右,从上到下,依次为blur、boxFilter、GaussianBlur、medianBlur、bilateralFilter

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱发呆de白菜头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值