双边滤波器的原理及实现

图像算法--基于fpga的双边滤波算法 双边滤波器是用于图像的非线性、边缘保持和降噪平滑滤波器。它将每个像素的强度替换为附近像素的强度值的加权平均值。该权重不仅取决于像素的欧几里德距离,还取决于辐射差异(例如颜色强度、深度距离等)。这样可以保留锐利的边缘。 阅读详情

转载:http://blog.youkuaiyun.com/abcjennifer/article/details/7616663

双边滤波器是什么?

双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器(http://en.wikipedia.org/wiki/Gaussian_filter)和α-截尾均值滤波器(去掉百分率为α的最小值和最大之后剩下像素的均值作为滤波器),后文中将结合公式做详细介绍。


双边滤波器中,输出像素的值依赖于邻域像素的值的加权组合,


权重系数w(i,j,k,l)取决于定义域核


和值域核

的乘积


同时考虑了空间域与值域的差别,而Gaussian Filter和α均值滤波分别只考虑了空间域和值域差别。


=======================================================================

双边滤波器的实现(MATLAB):function B = bfilter2(A,w,sigma)

CopyRight:

% Douglas R. Lanman, Brown University, September 2006.
% dlanman@brown.edu, http://mesh.brown.edu/dlanman


具体请见function B = bfltGray(A,w,sigma_d,sigma_r)函数说明。


[cpp]  view plain copy
  1. %简单地说:  
  2. %A为给定图像,归一化到[0,1]的矩阵  
  3. %W为双边滤波器(核)的边长/2  
  4. %定义域方差σd记为SIGMA(1),值域方差σr记为SIGMA(2)  
  5.   
  6. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  7. % Pre-process input and select appropriate filter.  
  8. function B = bfilter2(A,w,sigma)  
  9.   
  10. % Verify that the input image exists and is valid.  
  11. if ~exist('A','var') || isempty(A)  
  12.    error('Input image A is undefined or invalid.');  
  13. end  
  14. if ~isfloat(A) || ~sum([1,3] == size(A,3)) || ...  
  15.       min(A(:)) < 0 || max(A(:)) > 1  
  16.    error(['Input image A must be a double precision ',...  
  17.           'matrix of size NxMx1 or NxMx3 on the closed ',...  
  18.           'interval [0,1].']);        
  19. end  
  20.   
  21. % Verify bilateral filter window size.  
  22. if ~exist('w','var') || isempty(w) || ...  
  23.       numel(w) ~= 1 || w < 1  
  24.    w = 5;  
  25. end  
  26. w = ceil(w);  
  27.   
  28. % Verify bilateral filter standard deviations.  
  29. if ~exist('sigma','var') || isempty(sigma) || ...  
  30.       numel(sigma) ~= 2 || sigma(1) <= 0 || sigma(2) <= 0  
  31.    sigma = [3 0.1];  
  32. end  
  33.   
  34. % Apply either grayscale or color bilateral filtering.  
  35. if size(A,3) == 1  
  36.    B = bfltGray(A,w,sigma(1),sigma(2));  
  37. else  
  38.    B = bfltColor(A,w,sigma(1),sigma(2));  
  39. end  
  40.   
  41.   
  42. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  43. % Implements bilateral filtering for grayscale images.  
  44. function B = bfltGray(A,w,sigma_d,sigma_r)  
  45.   
  46. % Pre-compute Gaussian distance weights.  
  47. [X,Y] = meshgrid(-w:w,-w:w);  
  48. %创建核距离矩阵,e.g.  
  49. %  [x,y]=meshgrid(-1:1,-1:1)  
  50. %   
  51. % x =  
  52. %   
  53. %     -1     0     1  
  54. %     -1     0     1  
  55. %     -1     0     1  
  56. %   
  57. %   
  58. % y =  
  59. %   
  60. %     -1    -1    -1  
  61. %      0     0     0  
  62. %      1     1     1  
  63. %计算定义域核  
  64. G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));  
  65.   
  66. % Create waitbar.  
  67. h = waitbar(0,'Applying bilateral filter...');  
  68. set(h,'Name','Bilateral Filter Progress');  
  69.   
  70. % Apply bilateral filter.  
  71. %计算值域核H 并与定义域核G 乘积得到双边权重函数F  
  72. dim = size(A);  
  73. B = zeros(dim);  
  74. for i = 1:dim(1)  
  75.    for j = 1:dim(2)  
  76.         
  77.          % Extract local region.  
  78.          iMin = max(i-w,1);  
  79.          iMax = min(i+w,dim(1));  
  80.          jMin = max(j-w,1);  
  81.          jMax = min(j+w,dim(2));  
  82.          %定义当前核所作用的区域为(iMin:iMax,jMin:jMax)  
  83.          I = A(iMin:iMax,jMin:jMax);%提取该区域的源图像值赋给I  
  84.         
  85.          % Compute Gaussian intensity weights.  
  86.          H = exp(-(I-A(i,j)).^2/(2*sigma_r^2));  
  87.         
  88.          % Calculate bilateral filter response.  
  89.          F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);  
  90.          B(i,j) = sum(F(:).*I(:))/sum(F(:));  
  91.                  
  92.    end  
  93.    waitbar(i/dim(1));  
  94. end  
  95.   
  96. % Close waitbar.  
  97. close(h);  
  98.   
  99.   
  100. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  101. % Implements bilateral filter for color images.  
  102. function B = bfltColor(A,w,sigma_d,sigma_r)  
  103.   
  104. % Convert input sRGB image to CIELab color space.  
  105. if exist('applycform','file')  
  106.    A = applycform(A,makecform('srgb2lab'));  
  107. else  
  108.    A = colorspace('Lab<-RGB',A);  
  109. end  
  110.   
  111. % Pre-compute Gaussian domain weights.  
  112. [X,Y] = meshgrid(-w:w,-w:w);  
  113. G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));  
  114.   
  115. % Rescale range variance (using maximum luminance).  
  116. sigma_r = 100*sigma_r;  
  117.   
  118. % Create waitbar.  
  119. h = waitbar(0,'Applying bilateral filter...');  
  120. set(h,'Name','Bilateral Filter Progress');  
  121.   
  122. % Apply bilateral filter.  
  123. dim = size(A);  
  124. B = zeros(dim);  
  125. for i = 1:dim(1)  
  126.    for j = 1:dim(2)  
  127.         
  128.          % Extract local region.  
  129.          iMin = max(i-w,1);  
  130.          iMax = min(i+w,dim(1));  
  131.          jMin = max(j-w,1);  
  132.          jMax = min(j+w,dim(2));  
  133.          I = A(iMin:iMax,jMin:jMax,:);  
  134.         
  135.          % Compute Gaussian range weights.  
  136.          dL = I(:,:,1)-A(i,j,1);  
  137.          da = I(:,:,2)-A(i,j,2);  
  138.          db = I(:,:,3)-A(i,j,3);  
  139.          H = exp(-(dL.^2+da.^2+db.^2)/(2*sigma_r^2));  
  140.         
  141.          % Calculate bilateral filter response.  
  142.          F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);  
  143.          norm_F = sum(F(:));  
  144.          B(i,j,1) = sum(sum(F.*I(:,:,1)))/norm_F;  
  145.          B(i,j,2) = sum(sum(F.*I(:,:,2)))/norm_F;  
  146.          B(i,j,3) = sum(sum(F.*I(:,:,3)))/norm_F;  
  147.                   
  148.    end  
  149.    waitbar(i/dim(1));  
  150. end  
  151.   
  152. % Convert filtered image back to sRGB color space.  
  153. if exist('applycform','file')  
  154.    B = applycform(B,makecform('lab2srgb'));  
  155. else    
  156.    B = colorspace('RGB<-Lab',B);  
  157. end  
  158.   
  159. % Close waitbar.  
  160. close(h);  


调用方法:

[cpp]  view plain copy
  1. I=imread('einstein.jpg');  
  2. I=double(I)/255;  
  3.   
  4. w     = 5;       % bilateral filter half-width  
  5. sigma = [3 0.1]; % bilateral filter standard deviations  
  6.   
  7. I1=bfilter2(I,w,sigma);  
  8.   
  9. subplot(1,2,1);  
  10. imshow(I);  
  11. subplot(1,2,2);  
  12. imshow(I1)  

实验结果:

双边滤波(Bilateral filter)原理介绍及matlab程序实现 双边滤波(Bilateral filter)原理介绍及matlab程序实现、空间域、值域 阅读详情

相关推荐

双边滤波器原理简述及C++实现

本文主要简述双边滤波器原理,尽可能通俗易懂,最后用C++实现双边滤波器,加深对原理及公式的理解。

puqian13的博客 553

双边滤波原理和实现

双边滤波,c语言实现,与opencv对比

qq_53349978的博客 6454

fpga进阶--时序约束

1、基础概念 1.1 建立(setup)/保持(hold)时间 上述的锁存沿会将数据保存下来,但是必须要满足一定的条件: 建立时间Tsu:在时钟有效沿之前,数据必须保持稳定的最小时间; 保持时间Th:在时钟有效沿之后,数据必须保持稳定的最小时间; 1.2 亚稳态(Metastability) 亚稳态是由于违背了触发器的建立和保持时间而产生的,设计中任何一个触发器都有特定的建立和保持时间,在时钟上升沿前后的这段时间窗口内,数据输入信号必须保持稳定。如果信号在这段时间内发生了变化,那么输...

HHH的博客 2443

双边滤波

双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布[1]。最重要的是,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等),在...

weixin_41484240的博客 2196

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 673

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 308

双边滤波方法原理与代码实践(附完整代码)

本文首发于公众微信号-AI研究订阅号。 双边滤波原理   双边滤波(Bilateral filter)是一种非线性的滤波方法,本质是基于高斯滤波,目的是解决高斯滤波造成的边缘模糊。结合图像的空间邻近度和像素值相似度的一种折处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。   双边滤波器的好处是可以做边缘保存(edge preserving),一般用高斯滤波...

小小何先生的学习之旅 4224

视频倍速 - 在线调倍速的加速器APP工具

一刀工具箱APP提供一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!视频倍速-在线调倍速的加速器-一刀工具箱APP。...

无涯教程 7553

双边滤波器原理及Matlab实现

双边滤波器是什么? 双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器(http://en.wikipedia.org/wiki/Gaussian_filter)和α-截尾均值滤波器(去掉百分率为α的最小

蘇丶的博客 1万+

Python中的join函数的用法

从语法、实例、应用三方面详尽地介绍join函数

阿黎逸阳的博客 2万+

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

双边滤波器原理及实现

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。双边滤波器的好处是可以做边缘保存(edge preserving),一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显

图像研究猿的专栏 1万+

GaussDB本地安装手册(主备模式)

如果实例状态是Normal,则安装成功。三节点集中式配置文件。

Sebastien23的博客 2633

双边滤波原理和matlab,双边滤波器的原理及实现

优快云如何转载别人文章啊?!!!悲剧只能复制黏贴了双边滤波器是什么?双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器(http://en.wikipedia.org/wiki/Gaussian_fi...

weixin_30260621的博客 606

QT使用libssh2库通过密匙实现sftp协议上传文件

qt下使用libssh2通过密匙连接sftp服务器端

小米的修行之路 940

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

能使曲线变平滑的一维滤波器_双边滤波器的原理及实现

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。双边滤波器之所以能够做到在平滑去噪的同时还能够很好的保存边缘(Edge Preserve),是由于其滤波器的核由两个函数生成:一个函数由像素欧式距离决定滤波器模板的系数另一个函数由像素的灰度差值决定滤波器的系数其综合了高...

weixin_35043331的博客 933

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
下一篇: SIFT算法详解
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值