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

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

双边滤波原理


  双边滤波(Bilateral filter)是一种非线性的滤波方法,本质是基于高斯滤波,目的是解决高斯滤波造成的边缘模糊。结合图像的空间邻近度和像素值相似度的一种折处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。

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

  双边滤波器的输出像素依赖于当前被卷积像素的邻域。i iij jj是当前被卷积像素的坐标点,k kkl ll是领域像素的坐标点。双边滤波公式如下所示:

image.png

  加权系数w ww由定义域核和值域核决定,是它们的乘积。定义域核是高斯核,如下公式所示:

image.png

  而值域核就是用于“推断”是否是边缘点的方法,如下公式所示:

image.png

  值域核的大小取决于被卷积像素的灰度值和邻域像素的灰度值的差。边缘有较大灰度变化时,则会生成较小的权值,与被卷积像素的灰度值类似的区域会生成较大的权值。

  相乘就得到加权系数w ww,如下公式所示:

image.png

  双边滤波的原理示意图如下图所示:

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');%显示滤波后的图像 

实验结果


20191122102301805.png

  完整实验代码,公众号后台回复:数字图像作业一。

我的微信公众号名称:深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

相关文章
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
halcon的灰度变换(图像增强)
halcon的灰度变换(图像增强)
1542 1
|
4月前
|
编解码 资源调度 算法
深度图与点云去噪实战:双边滤波+统计/半径滤波原理与Open3D全实现
本文系统讲解3D视觉中深度图与点云的工业级去噪方案:详解统计滤波(剔孤立点)、半径滤波(除稀疏噪点簇)及双边滤波(边缘保留平滑),提供Open3D+OpenCV全流程代码,支持深度图预处理→点云生成→联合去噪,兼顾精度、效率与鲁棒性。(239字)
931 6
|
10月前
|
机器学习/深度学习 资源调度 算法
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
381 2
|
机器学习/深度学习 存储 编解码
什么是图像噪声?是如何产生的?图像去噪技术都有哪些?
图像噪声是在图像采集、传输和处理过程中产生的像素值异常现象,主要由光子计数统计、电子偏移和放大器噪声等因素引起。噪声影响图像质量,降低信噪比,使特征难以识别。图像去噪技术包括传统方法(如空间域滤波、频域滤波、图像压缩和超糅合)和基于深度学习的方法(如卷积神经网络、残差网络和生成对抗网络),旨在有效去除噪声,提高图像质量。
|
缓存 算法 计算机视觉
OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
1.概念介绍 视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。
1130 0
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
计算机视觉
限制对比度自适应直方图均衡化
【6月更文挑战第12天】限制对比度自适应直方图均衡化。
525 1
|
算法 Java 计算机视觉
图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
358 0