【Emgu CV教程】6.8、图像平滑之BilateralFilter()双边滤波

文章目录

  • 一、介绍
    • 1.原理
    • 2.函数介绍
  • 二、举例
    • 1.原始素材
    • 2.代码
    • 3.运行结果


一、介绍

1.原理

BilateralFilter()双边滤波也是非线性滤波,之前介绍的滤波只考虑空间信息(滤波核或邻域),容易造成边缘模糊和细节丢失,相比来说双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)。

1、距离目标像素点越远,权重越小;距离目标像素点越近,权重越大。
2、与目标像素点值越远,权重值越小;与目标像素点值相近,权重值越大

由于双边滤波同时考虑距离和色彩,因此它在去除噪声同时,又能够较好地保护边缘信息。函数的具体数学原理和计算过程,读者们自己百度一下,下面只给出具体用法。

2.函数介绍

官方定义如下:

public static void BilateralFilter(IInputArray src,  // 输入图像IOutputArray dst, // 输出图像int d, // 滤波核的大小,也就是选取的邻域像素的高度和宽度。double sigmaColor, // 滤波核在颜色空间的方差,值越大就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,滤波核内的所有点都能够参与运算。double sigmaSpace, // 滤波核在距离空间的方差,值越大,意味着更远的像素影响越大。BorderType borderType = BorderType.Reflect101 // 边界样式,一般选默认。
)

二、举例

1.原始素材

原始素材定义为srcMat,如下:
在这里插入图片描述
还是这个有椒盐噪声的向日葵图片。

2.代码

Emgu CV双边滤波代码如下:

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
int d = 13;
double sigmaColor = 250.0;
double sigmaSpace = 20.5;
CvInvoke.BilateralFilter(tempMat, dstMat, d, sigmaColor, sigmaSpace);
CvInvoke.Imshow("BilateralFilter image, " + dstMat.Size.ToString(), dstMat);

3.运行结果

在这里插入图片描述
代码采用了还是采用13 * 13的滤波核,椒盐噪声已经没有了,花朵和绿叶上的纹理和边缘还是很清晰的。其实BilateralFilter()双边滤波最适合的用处是人脸美颜,下面看看美颜的效果:
在这里插入图片描述


原创不易,请勿抄袭。共同进步,相互学习。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Windows系统中执行DOS命令

目录 一、用菜单的形式进入DOS窗口 二、通过IE浏览器访问DOS窗口 三、复制、粘贴命令行 四、设置窗口风格 1.颜色 2.字体 3.布局 4.选项 五、Windows系统命令行 由于Windows系统彻底脱离了DOS操作系统,所以无法直接进入DOS环境,只能通过第三方软…

UE4学习笔记 FPS游戏制作3 添加武器

文章目录 章节目标为骨骼添加武器挂载点添加武器 章节目标 本章节为手部添加一个武器挂载点,并挂载一个武器 为骨骼添加武器挂载点 添加挂载点需要以一个动画片段为基础,为骨骼添加挂载点。 首先找到我们需要的动画片段,通常是idle 双击打…

c++设计模式之观察者模式(发布-订阅模式)

介绍 观察者模式主要关注于对象的一对多关系,其中多个对象都依赖于一个对象,当该对象的状态发生改变时,其余对象都能接收到相应的通知。 如,现在有 一个数据对象三个画图对象,分别wield曲线图、柱状图、饼状图三个对象…

草图导入3d后模型贴材质的步骤?---模大狮模型网

3D模型在导入草图大师后出现混乱可能有多种原因,以下是一些可能的原因和解决方法: 模型尺寸问题:如果3D模型的尺寸在导入草图大师时与画布尺寸不匹配,可能导致模型混乱。解决方法是在3D建模软件中调整模型的尺寸,使其适…

深入解剖指针篇(2)

目录 指针的使用 strlen的模拟实现 传值调用和传址调用 数组名的理解 使用指针访问数组 一维数组传参的本质 冒泡排序 个人主页(找往期文章):我要学编程(ಥ_ಥ)-CSDN博客 指针的使用 strlen的模拟实现 库函数strlen的功能是求字符串…

南京观海微电子---如何减少时序报告中的逻辑延迟

1. 引言 在FPGA逻辑电路设计中,FPGA设计能达到的最高性能往往由以下因素决定: ▪ 工作时钟偏移和时钟不确定性; ▪ 逻辑延迟:在一个时钟周期内信号经过的逻辑量; ▪ 网络或路径延迟:Vivado布局布线后引…

多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络…

C++模板:非类型模板参数、特化以及分离编译

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成…

Linux--Shell基础

学习笔记,记录以下课程中关于Linux的Shell基础知识。 黑马程序员linux入门到精通(下部分)_哔哩哔哩_bilibili 目录 1.编写规范 2.变量 2.1 变量的含义 2.2 变量的定义和使用 2.3 只读变量(了解) 2.4 接收用户输入…

Github 2024-02-02开源项目日报Top10

根据Github Trendings的统计,今日(2024-02-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6HTML项目2TypeScript项目2C#项目1JavaScript项目1 ChatGPT提示库 创建周期:424 天开…

用Python处理TDC激光测距数据并绘制为图片

用Python处理TDC激光测距数据并绘制为图片 说明一、定义全局变量变二、主函数入口三、处理原始文件数据四、将数据叠加统计生成图片五、额外的辅助函数六、将数据进行各种形式统计叠加七、原始数据形式八、 测试结果 说明 1. 主要是将TDC激光测距数据进行统计叠加并绘制为图片…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

C语言实现12种排序算法

1.冒泡排序 思路:比较相邻的两个数字,如果前一个数字大,那么就交换两个数字,直到有序。 时间复杂度:O(n^2),稳定性:这是一种稳定的算法。 代码实现: void bubble_sort(int arr[],…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点: 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点: 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…

【Jenkins】配置及使用|参数化|邮件|源码|报表|乱码

目录 一、Jenkins 二、Jenkins环境搭建 1、下载所需的软件包 2、部署步骤 3、其他 三、Jenkins全局设置 (一)Manage Jenkins——Tools系统管理->全局工具配置分别配置JDK、Maven、Allure、Git,可以配置路径或者直接选择版本安装 1…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

JUC并发编程01——进程,线程(详解),并发和并行

目录 1.进程和线程的概念及对比1.进程概述 2.线程3.对比 2.并行与并发1.并发2.并行 3.线程详解3.1.创建和运行线程3.1.1.Thread3.1.2.Runnable结合Thread 创建线程3.1.3.Callable 3.2线程方法APIrun startsleep yieldjoininterrupt打断线程打断 park终止模式 daemon不推荐使用的…

Kotlin 协程:用源码来理解 ‘viewModelScope‘

Kotlin 协程:用源码来理解 ‘viewModelScope’ Kotlin 协程是 Kotlin 语言的一大特色,它让异步编程变得更简单。在 Android 开发中,我们经常需要在后台线程执行耗时操作,例如网络请求或数据库查询,然后在主线程更新 UI…

坚持刷题 | 完全二叉树的节点个数

Hello,大家好,我是阿月!坚持刷题,老年痴呆追不上我,今天刷:完全二叉树的节点个数 题目 222.完全二叉树的节点个数 代码实现 class TreeNode {int val;TreeNode left, right;public TreeNode(int val) …

Android进阶之路 - ViewPager2 比 ViewPager 强在哪?

我记得前年(2022)面试的时候有被问到 ViewPager 和 ViewPager2 有什么区别?当时因为之前工作一直在开发售货机相关的项目,使用的技术要求并不高,所以一直没去了解过 ViewPager2~ 去年的时候正好有相关的功能需求&#…