双边滤波器的定义

双边滤波器(Bilateral filter)为使图像平滑化的非线性滤波器,它除了使用像素之间几何上的靠近程度之外,还多考虑了像素之间的灰度差异, 使得双边滤波器能够有效的将图像上的噪声去除,同时保存图像上的边缘信息。

双边滤波器的好处是可以做边缘保护(edge preserving),一般用高斯滤波、均值滤波等滤波器去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。

双边滤波器的原理

空间距离:指的是邻域内某点与中心点的欧式距离。空间域高斯函数其数学形式为(这就是高斯滤波核):
                                   

其中(xi,yi)为邻域内某点位置,(xc,yc)为中心点的位置,sigma为空间域标准差。

灰度距离:指的是邻域内某点灰度与中心点灰度的差的绝对值。值域高斯函数其数学形式为:
                                   

其中gray(xi,yi)为邻域内某点灰度值,gray(xc,yc)为中心点灰度值,sigma为值域标准差。

对于高斯滤波,仅用空间距离的权值系数核与图像卷积后,确定中心点的灰度值。即认为离中心点越近的点,其权重系数越大。双边滤波中加入了对灰度信息的权重,即在邻域内,灰度值越接近中心点灰度值的点的权重更大,灰度值相差大的点权重越小。所以掩膜最终权重大小,则由空间域高斯核函数和值域高斯核函数共同确定。

双边滤波器的MATLAB代码实现

bftGrayImage.m文件

function J=bftGrayImage(I,G,sigma_d,sigma_r,filterRadius)
x=-filterRadius:filterRadius;
y=-filterRadius:filterRadius;
J=zeros(size(I));
[xx,yy]=meshgrid(x,y);
spatialCoeffs=exp(- (xx.^2+yy.^2)/(2*sigma_d^2));
[rows,cols]=size(I);
parfor y=filterRadius+1:rows-filterRadiusfor x=filterRadius+1:cols-filterRadiusroi= I(y-filterRadius:y+filterRadius,x-filterRadius:x+filterRadius);centerValue=G(y,x);roidif=roi-centerValue;tonalWeight =exp(- roidif.^2/(2*sigma_r^2));F=(tonalWeight.*spatialCoeffs);k=sum(F(:));weight=F.*roi;J(y,x)=sum(weight(:))/k;end
end
J=mat2gray(J);
J=J(filterRadius+1:end-filterRadius,filterRadius+1:end-filterRadius);
end

main.m文件调用:


g = double(imread('../xx图片/IR00040.jpg'))/255.0;
g = rgb2gray(g);
G=g;%guidance image
sigma_d=2;
sigma_r=0.3;
filterSize=double(uint8(3*sigma_d)*2+1);filterRadius=ceil((filterSize-1)/2);
I=padarray(g,[filterRadius,filterRadius],'replicate');
G=padarray(G,[filterRadius,filterRadius],'replicate');J=bftGrayImage(I,G,sigma_d,sigma_r,filterRadius);%figure;imshow([g,J]);title('input,output');
figure;
imshow(g,[]);
title('input');
figure;
imshow(J,[]);
title('output');

σ的意义及选取
1)空间域sigma-d选取:

sigma-d越大,图像越平滑,趋于无穷大时,每个权重都一样,类似均值滤波;

sigma-d越小,中心点权重越大,周围点权重越小,对图像的滤波作用越小,趋于零时,输出等同于原图。

2)值域sigma-r选取:

Sigma-r越大,边缘越模糊,极限情况为simga无穷大,值域系数近似相等(忽略常数时,将近为exp(0)= 1),与高斯模板(空间域模板)相乘后可认为等效于高斯滤波。

Sigma-r越小,边缘越清晰,极限情况为simga无限接近0,值域系数除了中心位置,其他近似为0(接近exp(-∞) =  0),与高斯模板(空间域模板)相乘进行滤波的结果等效于源图像。

双边滤波及MATLAB算法实现相关推荐

  1. 高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx

    . .. 快速中值滤波及c语言实现 学生姓名: 刘 勇 学 号: 6100410218 专业班级: 数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程 ...

  2. c语言用一维数组做中值滤波,快速中值滤波及c语言实现

    快速中值滤波及c语言实现 学生姓名:刘勇学号: 6100410218 专业班级:数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程序运行的时间复杂度和 ...

  3. MATLAB算法(函数)编译为C++动态库遇到的问题

    MATLAB算法(函数)编译为C++动态库遇到的问题 今天在编译MATLAB函数为C++的动态链接库时遇到了几个问题,在网上搜索了很多资料都没有解决我遇到的问题,特此分享出来供大家参考. 环境: Wi ...

  4. 图像锐化处理算法matlab,图像锐化matlab算法

    <图像锐化matlab算法>由会员分享,可在线阅读,更多相关<图像锐化matlab算法(2页珍藏版)>请在读根文库上搜索. 1.%常用图像锐化算法clcclearclose a ...

  5. LQR轨迹跟踪算法Python/Matlab算法实现_代码(2)

    本文根据LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导(2)使用代码实现,进行仿真: clc clear allKp = 1.0 ; dt =0.1 ;% [s] L = ...

  6. LQR轨迹跟踪算法Python/Matlab算法实现2

    这里对上一篇LQR轨迹跟踪算法Python/Matlab算法实现进行勘误: clc clear allKp = 1.0 ; dt = 0.1 ;% [s] L = 2.9 ;% [m] wheel b ...

  7. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导

    对于文章 LQR轨迹跟踪算法Python/Matlab算法实现中的LQR推导的问题,我简单写了一下手稿,不高兴做成公式了:

  8. MATLAB等额还款代码,matlab算法实现对等额本息和等额本金两种还款方式的计算

    matlab算法实现对等额本息和等额本金两种还款方式的计算 发布时间:2018-05-29 20:04, 浏览次数:1410 , 标签: matlab matlab算法实现对等额本息和等额本金两种还款 ...

  9. matlab 局部寻根,MATLAB算法の二分法全局寻根

    今天是二分法介绍的最后一个版本,在<MATLAB算法の二分法改进版>中提出通过matlab矢量化计算实现类并行二分法快速寻根.有读者指出二分法是不是只能用于函数单调的区间,对于非单调区间能 ...

最新文章

  1. 印象笔记html预览,7 个方法,把印象笔记打造成轻量级笔记工具
  2. 条形图坐标轴_手把手教你用Excel绘图 | 双轴簇状条形图
  3. 【测试基础】测试用例的设计方法
  4. 碰撞检测技术:kd tree
  5. datagrip将一个数据库中的数据_跨平台数据库管理神器DataGrip,用上就爱不释手...
  6. 木马藏身于系统进程中
  7. Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger...
  8. struts2 拦截器_Struts 2拦截器示例
  9. 触发器中的 Inserted表和Deleted表
  10. 树莓派摄像头,协议相关,人脸、车牌识别
  11. Visual Studio 2015的破解密钥
  12. 分享一个超酷创建互动文档的Javascript类库 - tangle
  13. 如何发布Flash ZXP/MXP扩展
  14. 远程计算机用户名win7,win7局域网远程控制的方法(图文)
  15. 计算机硬盘图标闪烁,电脑本地磁盘图标显示异常如何解决
  16. TWS耳机供应链,看看背后都有谁?
  17. Ubuntu根目录的各个文件夹的介绍
  18. esp8266 OTA 云远程更新固件 wifiupdate
  19. OneNote中英文格式不同,OneNote无法修改英文字体,OneNote默认英文字体为Calibri无法修改的问题。
  20. 计算机期末考试质量分析报告,信息技术期末考试质量分析

热门文章

  1. vsnprintf函数使用
  2. 阿里巴巴与淘宝网今日起帐号实现互通
  3. 常用的几种软件生命周期模型
  4. 软件开发的形式化方法(Formal Method)之前世今生~
  5. Java SE之IO
  6. pytorch自带网络_使用PyTorch Lightning自动训练你的深度神经网络
  7. Google浏览器 隐身模式 -incognito
  8. TCP 与 UDP的区别
  9. 打印1000到2000年之间的闰年
  10. PID算法模块(含常用改进算法和例程)--C源码