双边滤波方法原理与代码实践(附完整代码)
双边滤波原理
双边滤波(Bilateral filter)是一种非线性的滤波方法,本质是基于高斯滤波,目的是解决高斯滤波造成的边缘模糊。结合图像的空间邻近度和像素值相似度的一种折处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。
双边滤波器的好处是可以做边缘保存(edge preserving),一般用高斯滤波去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。
双边滤波器的输出像素依赖于当前被卷积像素的邻域。iii和jjj是当前被卷积像素的坐标点,kkk和lll是领域像素的坐标点。双边滤波公式如下所示:
g(i,j)=∑k,lf(k,l)w(i,j,k,l)∑k,lw(i,j,k.l)g(i,j) = \frac{\sum_{k,l}f(k,l)w(i,j,k,l)}{\sum_{k,l}w(i,j,k.l)} g(i,j)=∑k,lw(i,j,k.l)∑k,lf(k,l)w(i,j,k,l)
加权系数www由定义域核和值域核决定,是它们的乘积。定义域核是高斯核,如下公式所示:
d(i,j,k,l)=exp(−(i−k)2+(j−l)22σd2)d(i,j,k,l)=exp(-\frac{(i-k)^{2}+(j-l)^{2}}{2\sigma^{2}_{d}}) d(i,j,k,l)=exp(−2σd2(i−k)2+(j−l)2)
而值域核就是用于“推断”是否是边缘点的方法,如下公式所示:
r(i,j,k,l)=exp(−∣∣f(i,j)−f(k,l)∣∣22σr2)r(i,j,k,l)=exp(-\frac{||f(i,j)-f(k,l)||^{2}}{2\sigma^{2}_{r}}) r(i,j,k,l)=exp(−2σr2∣∣f(i,j)−f(k,l)∣∣2)
值域核的大小取决于被卷积像素的灰度值和邻域像素的灰度值的差。边缘有较大灰度变化时,则会生成较小的权值,与被卷积像素的灰度值类似的区域会生成较大的权值。
相乘就得到加权系数www,如下公式所示:
w(i,j,k,l)=exp(−(i−k)2+(j−l)22σd2−∣∣f(i,j)−f(k,l)∣∣22σr2)w(i,j,k,l)=exp(-\frac{(i-k)^{2}+(j-l)^{2}}{2\sigma^{2}_{d}}-\frac{||f(i,j)-f(k,l)||^{2}}{2\sigma^{2}_{r}}) w(i,j,k,l)=exp(−2σd2(i−k)2+(j−l)2−2σr2∣∣f(i,j)−f(k,l)∣∣2)
双边滤波的原理示意图如下图所示:
MatLab代码
clear all;close all;clc;
img=imread('boy_noisy.gif');
img=mat2gray(img);
[m n]=size(img);
r=15; %模板半径
imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;
imgn(1:r,r+1:n+r)=img(1:r,1:n); %扩展上边界
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r); %扩展右边界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1); %扩展下边界
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r); %扩展左边界
sigma_d=7; sigma_r=0.2;
[x,y] = meshgrid(-r:r,-r:r);
w1=exp(-(x.^2+y.^2)/(2*sigma_d^2)); %以距离作为自变量高斯滤波器
for i=r+1:m+r for j=r+1:n+r w2=exp(-(imgn(i-r:i+r,j-r:j+r)-imgn(i,j)).^2/(2*sigma_r^2)); %以周围和当前像素灰度差值作为自变量的高斯滤波器 w=w1.*w2; s=imgn(i-r:i+r,j-r:j+r).*w; imgn(i,j)=sum(sum(s))/sum(sum(w)); end
end
subplot(1,2,1);imshow(img);title('Origin image'); %显示原始图像
subplot(1,2,2);imshow(mat2gray(imgn(r+1:m+r,r+1:n+r)));title('Bilateral_filter');%显示滤波后的图像
实验结果
完整实验代码,公众号后台回复:数字图像作业一。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!
双边滤波方法原理与代码实践(附完整代码)相关推荐
- OpenCV使用Shi-Tomasi方法检测拐角的实例(附完整代码)
OpenCV使用Shi-Tomasi方法检测拐角的实例 OpenCV使用Shi-Tomasi方法检测拐角的实例 OpenCV使用Shi-Tomasi方法检测拐角的实例 #include "o ...
- 深度:震惊世间的惊人代码(附完整代码)
一战封神的 0x5f375a86 雷神之锤3是一款九十年代非常经典的游戏,内容画面都相当不错,作者是大名鼎鼎的约翰卡马克.由于当时游戏背景原因,如果想要高效运行游戏优化必须做的非常好,否则普通人的配置 ...
- html加js倒计时代码,分享最简单的JavaScript倒计时代码(附完整代码)
工作中经常需要在页面中设置倒计时,那你知道JS倒计时代码怎么写吗?这篇文章就给大家分享一个最简单的JS倒计时代码,以及详细的倒计时JS代码的思路,,有一定的参考价值,感兴趣的朋友可以看看. 举例:设定 ...
- 【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码
el-table合并单元格 1.固定合并 官方挺提供的合并具体某行列的方法:el-table合并行或列 通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含 ...
- 数学分析模型(一):数据的无量纲处理方法及示例(附完整代码)
数据的无量纲处理方法及示例(附完整代码) (1)极值化方法 (2)标准化方法 (3)均值化方法 示例 要求 建模步骤 程序 结果 备注 在对实际问题建模过程中,特别是在建立指标评价体系时,常常会面临不 ...
- 计算机辅助药物设计的一般原理,朱瑞新着--_计算机辅助药物设计(Ⅰ)--基本方法原理概要与实践详解.pdf...
文档介绍: 计算机辅助药物设计 ------ 基本方法原理概要与实践详解作者朱瑞新 2011 年 1 月目录序前言第一章"计算机辅助药物设计"与 M OE 概貌一.导言二.&quo ...
- Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...
- Python数据可视化:2018年北上广深空气质量分析(附完整代码)
♚ 法纳斯特,Python爱好者,喜欢爬虫,数据分析以及可视化. 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的日子. 无图无真相,下图为证. 左边的图是去年2月份的时候,这 ...
- python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)
引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这里作了模糊处理. 是不是很炫,而且这还是独一无二的,毕竟 ...
- 怎么在html中加入特效文字,如何使用HTML5+css3实现粒子效果文字动画特效(附完整代码)...
我们在浏览web网页的时候会发现现在的网页做的越来越美观,很多动画特效做的越来越炫酷,这离不开HTML5和css3的深入开发.今天我们要来分享一款基于HTML5和css3的文字特效--粒子效果文字动画 ...
最新文章
- Android 4.4(KitKat)表格管理子系统 - 骨架
- 利用spi发送接收信息c语言,SPI接收发送函数程序
- 我的计算机专业作文800字,我家的电脑作文800字
- gentry同态加密算法_基于Gentry全同态加密算法公钥个数优化的研究
- DocumentHelper用法
- Java 集合深入理解(15):AbstractMap
- 顺序队列为空的条件_C语言实现顺序队列
- java调用用友eai_U811.1接口EAI系列之二--生成销售出库单调用U8的EAI通用处理方法--PowerBuilder语言...
- php树递归算法,PHP二叉树递归算法
- php记录sql语句,sql语句记录
- 访问阿里云服务器配置的ftp后,报错227 entering passive mode
- mac 安装commitizen插件报错Parsing JSON at /Users/lin/.czrc for commitizen config failed
- 差分数组:PIPI的区间操作Ⅰ
- QT中自定义控件和插件大致方法
- 分享一个开源免费、目前最好的API接口管理平台----eoLinker
- 程序员最爱用的8个代码编辑器,你用哪款?
- 前端编程中,如何消除浏览器缓存
- 浙江大学PAT考试基础知识整理
- Python 当当网数据分析
- c语言调用dll实例 结构体传参,Matlab调用Dll,对于自定义结构体数组如何传参? - 程序语言 - 小木虫 - 学术 科研 互动社区...