OpenCV教程——图像模糊。均值模糊,高斯模糊,中值模糊,双边模糊,高斯分布

news2025/2/28 21:43:20

1.图像模糊

图像模糊是图像处理中最简单和常用的操作之一。

⚠️使用该操作的原因之一是为了给图像预处理时降低噪声。

图像模糊操作背后是数学的卷积计算。

卷积操作的原理:

常用的图像模糊的方法:

  1. 均值模糊
  2. 高斯模糊
  3. 中值模糊
  4. 双边模糊

这四种模糊方式有时也被称为:均值滤波、高斯滤波、中值滤波和双边滤波。因为模糊属于一种滤波操作,具体关系可参照下图:

其中,均值滤波、高斯滤波和中值滤波属于线性滤波;而双边滤波属于非线性滤波

接下来我们结合OpenCV中的相关API来进一步了解这些图像模糊的方法。

2.均值模糊

均值模糊的卷积核为:

kernel=1kernelwidth×kernelheight⎡⎣⎢⎢1⋮1⋯⋱⋯1⋮1⎤⎦⎥⎥

卷积核亦称掩膜。

OpenCV中的API:

 
1
2
3
4
5
6
7
void blur(
	InputArray src,
	OutputArray dst,
	Size ksize,
	Point anchor=Point(-1,-1),
	int borderType = BORDER_DEFAULT
);

部分参数解释:

  1. 参数Size ksize表示卷积核的大小。Size(3,3)表示3×3

的核大小;Size(5,5)表示5×5

  1. 的核大小。边长必须是正奇数
  2. 参数Point anchor表示锚点(anchor)的位置,即被平滑的那个点。默认值Point(-1,-1)表示锚点位于核的中心。

现在我们看下原图进行均值模糊之后的结果(左侧为原图,右侧为均值模糊后的图):

 
1
blur(src,src_blur,Size(5,5),Point(-1,-1));

3.高斯模糊

3.1.高斯模糊的原理

高斯模糊所用的卷积核就是基于二维高斯分布生成的。

二维高斯分布见本文第6部分。

在高斯模糊中,二维高斯分布公式中的x1,x2

对应一个点的x,y坐标。因此可以假设x1,x2

是相互独立的,所以:

Cov(x1,x2)=Cov(x2,x1)=E(x1x2)−E(x1)E(x2)=E(x1)E(x2)−E(x1)E(x2)=0

并且:

Cov(x1,x1)=E(x21)−E2(x1)=σ21

同理:

Cov(x2,x2)=σ22

代入协方差矩阵∑

∑=[Cov(x1,x1)Cov(x2,x1)Cov(x1,x2)Cov(x2,x2)]=[σ2100σ22]

求其行列式:

∣∑∣=σ21σ22

则二维高斯分布公式可简化为:

f(x¯)=1(2π)(σ21σ22)1/2e−12[(x1−μ1σ1)2+(x2−μ2σ2)2]

假设我们要生成一个3×3

的高斯掩膜,锚点的坐标设置为(0,0),则周边点的坐标为:

将(x1,x2)

对应的值代入上述公式中即可求得高斯掩膜。

为了方便,我们这里假设μ1=μ2=0,σ1=σ2=1

,又因为系数12π

为常数,因此可以省略,将二维高斯分布公式简化为:

e−12(x21+x22)

据此可得到:

这9个点的权重总和不等于1,所以需要对其进行归一化处理:每个格子的数除以所有格子的数加起来的总和。这样即可得到一个3×3

的高斯掩膜:

3.2.高斯模糊的API

 
1
2
3
4
5
6
7
8
void GaussianBlur(
	InputArray src,
	OutputArray dst,
	Size ksize,
	double sigmaX,
	double sigmaY = 0,
	int borderType = BORDER_DEFAULT
);

其中,参数Size ksize表示卷积核的大小。sigmaX(高斯核在x方向的标准差)和sigmaY(高斯核在y方向的标准差)对应二维高斯分布公式中的σ1,σ2

如果σ

较小(其二维高斯分布概率密度函数图像见下图右),那么生成的掩膜的中心系数较大,而周围的系数较小,这样对图像的模糊效果就不是很明显;反之,σ

较大(其二维高斯分布概率密度函数图像见下图左),则生成的模版的各个系数相差就不是很大,比较类似均值模糊,对图像的模糊效果比较明显。

实际应用看下对比效果(左侧为原图,右侧为高斯模糊后的图):

 
1
GaussianBlur(src,src_gaussian_blur,Size(5,5),3,3);

4.中值模糊

中值模糊即用中位数填补中心像素。

中值滤波的扩展:最小值滤波最大值滤波

中值模糊对椒盐噪声有很好的抑制作用。

椒盐噪声:也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,也可能是亮的区域有黑色像素或是在暗的区域有白色像素(或者两者皆有)。

中值模糊的API:

 
1
2
3
4
5
void medianBlur(
	InputArray src,
	OutputArray dst,
	int ksize
);

参数int ksize表示核的大小,必须大于1而且必须是奇数。

结果对比见下(左侧为加了椒盐噪声的原图,右侧为中值模糊后的图):

 
1
medianBlur(src_salt,src_median_blur,3);

5.双边模糊

均值模糊无法克服边缘像素信息丢失缺陷,原因是均值滤波是基于平均权重。

高斯模糊部分克服了该缺陷,但是无法避免,因为没有考虑像素值的不同。

高斯双边模糊是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变(边缘指的是物体的边缘、轮廓)。

5.1.双边模糊的原理

⚠️双边滤波器综合了高斯滤波器和α

截尾均值滤波器的特点。高斯滤波器只考虑像素间的欧式距离,其使用的模版系数随着和窗口中心的距离增大而减小;α截尾均值滤波器则只考虑了像素灰度值之间的差值,去掉α

%的最小值和最大值后再计算均值。

‼️双边滤波器就等于空间距离与灰度距离的乘积。其使用二维高斯函数生成距离模版,使用一维高斯函数生成值域模版(以下公式都省去了前面的系数)。

👉距离模版系数的生成公式如下:

d(i,j,k,l)=exp(−(i−k)2+(j−l)22σ2d)

这个公式和3.1部分中的公式其实是一样的。只不过省去了系数,并且假定σ1=σ2=σd

。(k,l)为模版窗口的中心坐标,通常为(0,0),也就是(μ1,μ2)。(i,j)为模版窗口的其他系数的坐标,即(x1,x2)

👉值域模版系数的生成公式如下:

r(i,j,k,l)=exp(−∥f(i,j)−f(k,l)∥22σ2r)

其中,f(x,y)

表示图像在点(x,y)处的像素值;(k,l)为模版窗口的中心坐标;(i,j)为模版窗口的其他系数的坐标;σ2r

为高斯函数的方差。

将上述两个模版相乘就得到了双边滤波器的模版:

w(i,j,k,l)=d(i,j,k,l)∗r(i,j,k,l)=exp(−(i−k)2+(j−l)22σ2d−∥f(i,j)−f(k,l)∥22σ2r)

双边滤波也可以用下图表示,对P点进行模糊,Q点的距离虽然很近,但是像素值差距过大,所以Q点的权重很小,不会过多的考虑到Q点的信息,所以说双边滤波考虑到了边缘信息,避免了边缘信息的丢失。

5.2.双边模糊的API

 
1
2
3
4
5
6
7
8
void bilateralFilter(
	InputArray src,
	OutputArray dst,
	int d,
	double sigmaColor,
	double sigmaSpace,
	int borderType=BORDER_DEFAULT
);

部分参数解释:

  1. int d是计算直径,范围内的像素都会被纳入计算。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace来计算出它来。
  2. double sigmaColor即为公式中的σr
  • 。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起。
  • double sigmaSpace即为公式中的σd
  1. 。数值越大,意味着越远的像素会相互影响。

其效果见下(左侧为原图,右侧为双边模糊后的图):

 
1
bilateralFilter(src,src_bilateral,3,100,3);

6.高斯分布

高斯分布(Gaussian distribution)又名正态分布

👉一维高斯分布的概率密度函数为:

f(x)=12π−−√σe−(x−μ)22σ2

👉高维高斯分布的概率密度函数为:

f(x¯)=1(2π)D/21∣∑∣1/2e−12(x¯−μ¯)T∑−1(x¯−μ¯)

其中,x¯

表示维度为D的向量,μ¯则是这些向量的平均值,∑表示所有向量x¯的协方差矩阵,∣∑∣

表示协方差矩阵的行列式。

因此根据高维高斯分布的公式,我们可以得到二维高斯分布的概率密度函数为:

f(x¯)=1(2π)∣∑∣1/2e−12[(x1−μ1σ1)2+(x2−μ2σ2)2]

二维高斯分布的图像为:

7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商用密码应用安全性测评机构资质流程

商用密码应用安全性测评机构(简称密评机构)资质建设相关指导性材料包括: 1、《商用密码应用安全性测评机构能力要求》 2、《商用密码应用安全性测评机构能力评审实施细则(试行)》 3、《商用密码应用安全性测评机构管理…

【Rust】速度入门---打印个螃蟹先

参考: 菜鸟教程 1 输出到命令行 这不得打印个螃蟹 // 代码来自官方入门教程 // ferris_say需要另外安装 use ferris_says::say; use std::io::{stdout, BufWriter};fn main() {let stdout: std::io::Stdout stdout();let msg: String String::from("Hello fellow Rusta…

无线传感器网络的Z-SEP路由协议及对比(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 无线传感网络最早应用于军事领域,随着工业界和学术界的关注度提高和技术的成熟,现已广泛应用于军事侦查…

kubernetes❀集群环境搭建

kubernetes❀集群环境搭建 2. kubernetes集群环境搭建2.1 前置知识点2.2 kubeadm 部署方式介绍2.3 安装要求2.4 最终目标2.5 准备环境2.6 环境初始化2.6.1 检查操作系统的版本2.6.2 主机名解析2.6.3 时间同步2.6.4 禁用iptable和firewalld服务2.6.5 禁用selinux2.6.6 禁用swap分…

Rust Wasm Linux开发环境搭建

一、Linux 镜像版本 CentOS-7-x86_64-DVD-2009.iso,Virtual Box 7.0 选择 GNOME Desktop 版本, 配置远程连接(可选), nmtui 激活连接 enp0s3 ,查看 ip 地址, 绑定端口转发, 通过…

gateway与zuul的区别与联系

前言 zuul1.0与spring-cloud-gateway的区别 Zuul: zuul是netflix公司的项目,本质上是web servlet,基于JavaEE Servlet技术栈,使用阻塞API,处理的是http请求,没有提供异步支持,不支持任何长连接&#xff0c…

Linux——进程信号3

内核如何实现信号的捕捉 信号捕捉的方法出了我们之前的signal之外,还有其它方法 sigaction sigaction:检查或更改一个信号的动作即捕捉信号 第一个参数,要捕捉的信号对应的编号,第二个参数:结构体(这个结构…

4种整流电路、5种滤波电路

目录 基本电路变压电路整流电路半波整流电路全波整流电路桥式整流电路倍压整流电路 滤波电路电容滤波电路电感滤波电路RC滤波电路LC滤波电路有源滤波电路 整流滤波电路总结常用整流电路性能对照常用无源滤波电路性能对照电容滤波电路输出电流大小与滤波电容量的关系常用整流滤波…

nodejs+vue大学招聘求职网站

该系统的基本功能包括学生注册登录,企业注册登录,发布个人简历,发布企业招聘信息,新闻资讯,招聘信息,企业管理,学生信息管理,招聘信息管理,修改密码等功能。 系统首页 后台界面 1.…

【设计模式】设计模式简述及类图

设计模式的分类依据两个准则,第一个是目的准则,即模式是用来完成什么工作的。模式依据其目的可以分为创建型、结构型和行为型三种。创建型模式和对象的创建有关,结构型模式处理类或对象的组合。行为型模式对类或对象怎样交互和怎样分配职责进…

随机变量X,分布函数X~F(x)的理解。

1.随机变量X 1.通常认知的"x"与随机变量X 我们通常意义上的 x 是自变量,y f(x) 中的自变量。 但是 X 更多意义是 对应法则 " f " ,X完整写法是 X(ω) ω ∈ Ω。 X这个对应法则,可以将样本点映射到实数轴上。 那么X这…

初识linux之POSIX信号量

目录 一、信号量的概念 1. 信号量的作用 2. 信号量的PV操作 3. 信号量操作接口 3.1 初始化信号量 3.2 销毁信号量 3.3 等待信号量(P操作) 3.4 发布信号量(V操作) 二、循环队列 三、使用循环队列模拟实现生产消费模型 1…

Spring 组成及拓展

1. Spring 组成 1.1 Spring的七大模块 1.2拓展 在Spring官网有这个介绍:现代化的Java开发!说白了就是基于Spring的开发 - SpringBoot - 一个快速开发的脚手架 - 基于SpringBoot可以快速的开发单个微服务。 - 约定大于配置! - SpringC…

ENVI实现遥感图像的最小距离、最大似然、支持向量机分类

目录 1 分类需求 2 具体操作 2.1 ROI区域绘制 2.2 最小距离法 2.3 最大似然法 2.4 支持向量机 3 精度评定 4 分类后处理 4.1 小斑块处理 4.2 分类统计 4.3 修改类别颜色 5 结果对比 本文介绍基于ENVI软件,实现最小距离法、最大似然法与支持向量机三种遥…

达索的多领域系统级仿真软件Dymola 2023版本下载与安装配置教程

目录 前言一、Dymola 安装二、使用配置总结 前言 Dymola是由Dassault Systemes公司开发的一款基于物理建模的多领域系统级仿真软件。它包含了多个领域的建模和仿真工具,如机械、电气、液压、热力学、控制等,可以用于对各种系统进行建模和仿真&#xff0…

GcExcel for Java edition 6.1.0 Crack

高速 Java Excel 电子表格 API 库,在 Java 应用程序中以编程方式创建、编辑、导入和导出 Excel 电子表格。几乎可以在任何地方部署。 创建、加载、编辑和保存 Excel 电子表格 保存为 .XLSX、PDF、HTML、CSV 和 JSON 基于具有零 Excel 依赖性的 Excel 对象模型 在本地、内部或云…

利用Facebook群组和页面打造忠实粉丝基础

社交媒体的崛起改变了我们与世界互动的方式,而Facebook作为其中的佼佼者,不仅让我们能够与朋友、家人保持联系,还提供了许多机会用于商业营销。利用Facebook群组和页面来打造忠实粉丝基础是许多品牌成功的关键之一。 一、创建一个引人注目的F…

bat脚本

bat脚本 bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上。这个文件的每一行都是一条DOS命令 在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.…

Java每日一练(20230513) 输出最值、盛水容器、旋转数组II

目录 1. 输出最值 ※ 2. 盛最多水的容器 🌟🌟 3. 搜索旋转排序数组 II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 输出最值…

深度学习环境配置系列文章(二):Anaconda配置Python和PyTorch

深度学习环境配置系列文章目录 第一章 专业名称和配置方案介绍 第二章 Anaconda配置Python和PyTorch 第三章 配置VS Code和Jupyter的Python环境 第四章 配置Windows11和Linux双系统 第五章 配置Docker深度学习开发环境 第二章文章目录 深度学习环境配置系列文章目录前言一&…