加性噪声和乘性噪声、均值滤波器、方框滤波器、中值滤波器、高斯滤波器、双边滤波器

article/2025/9/25 15:33:37

1.滤波器的作用

滤波,也称平滑或者模糊,主要是为了减小图像噪声和伪影,同时在降低图像分辨率的时候,平滑也是必要的。

2.认识两种噪声

首先我们来认识两种常见噪声:

椒盐噪声,也就是夹杂在图像中的黑色和白色噪音像素,这是一种非线性噪声,也称为乘性噪声,之所以称为乘性是因为这种噪声和源图像是伴随存在的,图像产生该噪声也就产生,图像消失该图像也就消失,这是一种非线性噪声,可以将图片看做一个系统 ,而椒盐噪声就是因为图片的时变性和非线性造成的。

高斯噪声,一种噪声强度满足正态分布的图像噪声,这是一种线性噪声,也称为加性噪声,它和图像是相加的关系,没有图像高斯噪声也存在,这种噪声不因为原图像的变化而变化,对于图片这个系统是时不变的,也称为线性的。

其它的诸如泊松噪声,就是满足泊松分布的噪声。

一般的我们使用不同滤波器用于对不同噪声处理,均值滤波,方框滤波,高斯滤波,双边滤波一般用于处理线性噪声,也就是高斯噪声,而非线性噪声我们一般使用中值滤波器。

3.方框滤波器和均值滤波器

我们把这两种滤波器放在一起学习是因为,均值滤波是方框滤波的特殊形式,两者的区别在于方框滤波器可以选择是否进行归一化,而均值滤波器则一定归一化,我们用图片来展示什么是归一化

当这个normalize属性为TRUE时,方框滤波和均值滤波相同,滤波器K*1/25归一化处理。而normalize属性为FALSE时,方框滤波器不进行归一化,也就是对高斯核直接求和作为中心像素点的灰度,这样子做很容易发生溢出,超出255范围。

OpenCV提供了现成的方框滤波函数去操作normalize属性

void boxfilter(
InputArray src,   //输入图像
OutputArray dst,  //输出图像
int ddepth,       //输出图像深度也就是数据类型
Size k size,      //滤波器大小,必须为奇数
Point anchor,     //设置锚点,对齐方式一般中心对齐给(-1,-1)
bool normalize    //是否归一化
);

我们再来看一看均值滤波器有什么不同

void blur(
InputArray src,   //输入图像
OutputArray dst,  //输出图像
Size ksize,       //盒状核大小
Point anchor,     //一般取(-1,-1),中心像素对齐
int borderType    //边缘平滑类型传入参数BORDER_DEFAULT
);

均值滤波器无法指定输出图像的数据类型。多了边缘平滑,其它和方框滤波一样。

4.中值滤波器

中值滤波就是将盒状盒中的像素按照顺序排列,取中间像素作为结果,这种滤波器相较于线性滤波器有一个较大的好处是不受极端点的影响,比如椒盐噪声非黑即白,而线性滤波器需要对盒状核中每个像素加权求和,受偏差较大的点影响较大。

来看看中值滤波器长什么样

 中值滤波函数

void midianBlur(
InputArray src,   //输入图像
OutputArray dst,  //输出图像
Size ksize        //核大小
);

5.高斯滤波器

高斯噪声作为最常见的噪声,我们一般使用高斯滤波器进行滤波,可以有效去除高斯噪声

高斯公式:左边为一维高斯公式 右边为二纬高斯公式

 我们在用高斯公式获得权重一般用的是一纬的高斯公式,同时获得两个高斯核,分别进行卷积运算,(x,y)对应的是高斯核各个像素的到中心像素的x,y坐标,分别带入一维高斯公式,中心像素为(0,0),\sigma反应的是方差,越大越接近均值滤波,越小中心像素加权越大。

高斯滤波器函数

void GaussianBlur(
InputArray src,    //输入图像
OutputArray dst,   //输出图像
Size ksize,        //高斯核大小
double sigmaX,     //沿X轴方差
double sigmaY,     //沿Y轴方差
int borderType     //边缘平滑方式
)

常见高斯核大小有5*3、3*3、5*5、7*7

对于X轴和Y轴上的\sigma取值,只给了x的值,y为0,那么y和x将相同,如果都设置为0,那么将使用以下公式获得方差

sigma X= 0.3*((ksize.width-1)*0.5-1)+0.8

sigma Y = 0.3*((ksize.height-1)*0.5-1)+0.8

高斯滤波器的边缘平滑参数一般传入RORDER_DEFAULT,默认平滑方式。

6.双边滤波

双边滤波是对高斯滤波的改进,由于高斯滤波是对一个一个矩形内所有元素加权求和,所以会淡化边界损失特征值,因此引入双边滤波来保证边界受影响较小。

我们先来看双边滤波器函数

void bilateralFilter(
InputArray src,     //输入图像
OutputArray dst,    //输出图像
int d,              //像素临域的直径
double sigmacolor,  //颜色空间滤波器的sigma值
double sigmaSpace,  //坐标空间滤波器中的sigma值
int borderType      //边缘平滑类型BORDER_DEFAULT
);

这个函数中参数d的作用和高斯滤波器中Size的作用类似 ,也可以直接给d=-1,函数将自动计算sigmaSpace的值,sigmaColor越大图像的边界感越强,sigmaSpace越大图像边界敢越弱,同时图像越模糊。


http://chatgpt.dhexx.cn/article/MXZU97IO.shtml

相关文章

java 抽奖 高并发处理_如何设计高并发下的抽奖?

关于抽奖,需要考虑的点有很多,这里稍微整理了下主要需要考虑以下三点: 用户抽奖次数限制 奖品数量限制 奖品发放的分布 中奖的概率的可控性 用户抽象次数限制 一个用户必须限制抽奖的次数,而同一个用户的并发几率其实是很小的,所以这里可以用悲观锁来控制用户的抽奖次数。 奖品…

使用Lua脚本实现高并发处理方案

我们使用 Lua 脚本可以很轻松构建出百万并发的应用系统。 由于 Tomcat 并发处理能力弱,nginx 并发处理能力强,我们可以在 nginx 上结合 Lua 脚本来高效处理业务逻辑,不用经过 Tomcat,就能够通过 Lua 脚本来操作 Redis、Kafka、My…

Android上实现高并发,可延迟处理

目录 1.Thread和线程池优缺点对比 1.1使用Thread 1.2使用线程池 2.实现Android高并发,可延迟处理的解决方案 2.1为什么不推荐无限制创建Thread执行 2.2实现多线程并发处理解决方案 2.3具体实现如下: 2.4模拟测试多线程并发及延迟执行 1.Thread和线…

01 Nginx的高并发处理

文章目录 Nginx的高并发处理1.为什么需要Nginx?2.Nginx概述2.1 Nginx介绍2.2 Nginx和apache的优缺点2.2.1 Nginx相对于apache的优点2.2.2 apache相对于Nginx的优点2.2.3 Tengine介绍 3. Nginx的下载与安装3.1 Nginx下载3.2 Nginx的源码安装3.2.1 安装前的准备工作3.…

浅谈 高并发 处理方案

愿打开此篇对你有所帮助。 文章目录 高性能开发十大必须掌握的核心技术I/O优化:零拷贝技术I/O优化:多路复用技术线程池技术无锁编程技术进程间通信技术 Scale-out(横向拓展)缓存异步高性能、高可用、高拓展 解决方案❇ 高性能的实…

分布式架构 高并发处理

分布式架构 高并发处理 高并发介绍 在同时或者极短时间内,有大量请求到达服务端,每个请求都需要服务端耗费资源进行处理,并做出相应反馈服务端比如同时开启进程数,能同时运行的线程数、网络连接数、CPU运算、I/O、内存都是有限&am…

iis高并发处理三

使用.NET开发的Web应用程序部署到IIS上后,当有大量用户并发访问,用户在访问的时候可能会出现页面打开慢或无法打开的情况,那么从服务器上的IIS上我们可以做以下调整,让应用支持10万级以内的并发访问。 1、调整IIS 应用程序池队列…

前端优化之高并发处理

大部分的高并发处理基本都是在后端处理,但是在部分特殊情况下,后端无法阻止用户行为,需要前端做配合。例如在抢购、秒杀等场景。 高并发是什么? 对此,我们首先需要简单的去了解一下,高并发是什么&#xff1…

机器学习中的核函数与核方法(是什么?为什么?怎么做?)

我们在学习机器学习的时候,总是会看到一个概念——核,然后看到一堆公式。但是为什么要核呢?核到底是啥玩意?云里雾里。接下来,我们将要把“核”这个东西的神秘面纱一点点揭开。 一、什么是“核函数” 我们都知道&…

【Kernel Method】Kernel Method核方法介绍

引言 核方法是20世纪90年代模式识别与机器学习领域兴起的一场技术性革命。其优势在于允许研究者在原始数据对应的高维空间使用线性方法来分析和解决问题,且能有效地规避“ 维数灾难”。在模式识别的特征抽取领域,核方法最具特色之处在于其虽等价于先将原…

通俗理解核方法(kernel function)

最近对核方法比较有兴趣,想了解一下,在网上查阅了很多资料,感觉说的很晦涩,没有理解,于是查看了李政轩老师的课程,对其有了一定程度上的理解,本博客目的为了记录,也为了加深理解。 …

电机选型及校核方法总结

序:原先最初是没打算写电机选型总结的,而是准备写一些关于数字信号处理相关的东西,但是我的一个朋友提醒了我。他说,现在网上关于数字信号处理的东西写的太多了,特别是基础的知识都写烂了,你再写也没人看&a…

核方法与核技巧

本文对核方法(kernel method)进行简要的介绍。 核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的” ,例如下图 左图的两类数据…

机器学习中的核方法(Kernel Method)

说到机器学习中的核方法(Kernel Method),大部分人应该是在学习SVM的时候认识到它或者听说它。它的基本思想是说,普通的SVM分类超平面只能应对线性可分的情况,而对于线性不可分的情况我们则需要引入一个Kernel,这个Kernel可以把数据集从低维映射到高维,使得原来线性不可分…

支持向量机原理小结(3)——核方法和非线性支持向量机

前面两篇博客对线性支持向量机进行了详细的讲解,但线性SVM对于非线性的数据是无可奈何的。这篇博客将讲一下非线性支持向量机。 1. 核方法 对SVM有过一定耳闻的人,一定听说过“核技巧”、“核方法”这些名词,其实核方法并不是只能应用于SVM&…

核方法以及核函数讲解

核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的” ,例如下图 左图的两类数据要想在一维空间上线性分开是不可能的,然而通过F(x)(x-a)(x-…

MLAPP————第十四章 核方法

第十四章 核方法 14.1 简介 到目前为止,我们书上提到的各种方法,包括分类,聚类或者是其它的一些处理手段,我们的特征都是固定大小的一个向量,一般具有如下的形式,。然而,对于某些类型的对象&a…

核方法的理解

核方法在非线性分类问题上有很好的解决思路,应用于学习器SVM以及降维KPCA上,当然二者路径也不同,SVM就是从低维不可分映射到高维可分,而KPCA是从低维不可分映射到高维后再降维到低维可分,但都脱离不来这个核方法。 核…

核方法原理

核方法原理 1.无力的线性分类器 一般情况下,我们考虑构造一个线性分类器来解决问题。但是实际中,线性分类器的效果达不到要求,因为大部分数据都不是线性可分的,如下面这幅图。一种改进的方法是把多个弱的线性分类器组合得到一个强…

核方法(kernel method)的主要思想

kernel method是针对低维线性不可分而提出的一种解决方法,在PRML中有一章节的介绍,对其理解,也是迭代更进的过程。 简单来说,kernel method是一种低维和高维特征空间映射的方法,利用低维内积的函数来表征高维内积&…