当前位置: 首页 > news >正文

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

相关文章:

  • OpenCV第五讲: 形态学滤波
  • OpenCV第六讲: 漫水填充、图像金字塔
  • OpenCV第七讲:阈值的作用
  • OpenCV第八讲:图像变换之边缘检测(Canny+Sobel算子)
  • V-SLAM 回环检测与后端优化重读
  • OpenCV第九讲:图像变换之边缘检测(Laplacian +Scharr 算子)
  • OpenCV第十讲:图像几何形状识别之霍夫变换
  • OpenCV 第十一讲: 重映射、仿射变换、直方图均衡化
  • OpenCV第十二讲:角点检测与亚像素精度
  • OpenCV第十三讲:SURF特征点的检测与匹配详解
  • OpenCV第十四讲: Fast特征点与ORB特征点原理详解
  • DAVIS第一课: 事件相机的工作原理和相关核心功能简介
  • DAVIS第二课:基于事件相机的视觉里程计
  • Rtab-Map学习之rtabmap_ros源代码剖析
  • DAVIS前言:事件相机资料调研
  • Angularjs之国际化
  • C# 免费离线人脸识别 2.0 Demo
  • C++类中的特殊成员函数
  • FastReport在线报表设计器工作原理
  • Leetcode 27 Remove Element
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • PAT A1120
  • spring学习第二天
  • 多线程事务回滚
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 力扣(LeetCode)357
  • 你不可错过的前端面试题(一)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 在weex里面使用chart图表
  • 正则学习笔记
  • ​卜东波研究员:高观点下的少儿计算思维
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (0)Nginx 功能特性
  • (2022 CVPR) Unbiased Teacher v2
  • (C#)获取字符编码的类
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (南京观海微电子)——I3C协议介绍
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)appium-desktop定位元素原理
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .gitignore
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 反射的使用
  • .net 简单实现MD5
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 无限分类
  • .Net(C#)自定义WinForm控件之小结篇
  • .net6Api后台+uniapp导出Excel
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @RequestParam,@RequestBody和@PathVariable 区别