双边滤波Matlab实现<The Bilateral Filter>

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

双边滤波与一般的高斯滤波的不同就是:双边滤波既利用了位置信息<or 几何信息——高斯滤波只用了位置信息>又利用了像素信息来定义滤波窗口的权重。


像素值越接近,权重越大。双边滤波会去除图像的细节信息,又能保持边界。


对于彩色图像,像素值的接近与否不能使用RGB空间值,双边滤波的原始文献建议使用CIE颜色空间。

代码如下:

function resultI = BilateralFilt2(I,d,sigma)
%%%
%Author:LiFeiteng
%Version:1.0——灰色图像  Time:2013/05/01
%Version:1.1——灰色/彩色图像  Time:2013/05/02  2013/05/05
%d 半窗口宽度
I = double(I);
if size(I,3)==1
    resultI = BilateralFiltGray(I,d,sigma);
elseif size(I,3)==3
    resultI = BilateralFiltColor(I,d,sigma);
else 
    error('Incorrect image size')    
end
end

function resultI = BilateralFiltGray(I,d,sigma)

[m n] = size(I);
newI = ReflectEdge(I,d);
resultI = zeros(m,n);
width = 2*d+1;
%Distance
D = fspecial('gaussian',[width,width],sigma(1));
S = zeros(width,width);%pix Similarity
h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');
for i=1+d:m+d
    for j=1+d:n+d
        pixValue = newI(i-d:i+d,j-d:j+d);
        subValue = pixValue-newI(i,j);
        S = exp(-subValue.^2/(2*sigma(2)^2));
        H = S.*D;
        resultI(i-d,j-d) = sum(pixValue(:).*H(:))/sum(H(:)); 
    end
    waitbar(i/m);
end
close(h);
end

function resultI = BilateralFiltColor(I,d,sigma)
I = applycform(I,makecform('srgb2lab'));
[m n ~] = size(I);
newI = ReflectEdge(I,d);
resultI = zeros(m,n,3);
width = 2*d+1;
%Distance
D = fspecial('gaussian',[width,width],sigma(1));
% [X,Y] = meshgrid(-d:d,-d:d);
% D = exp(-(X.^2+Y.^2)/(2*sigma(1)^2));
S = zeros(width,width);%pix Similarity
h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');
sigma_r = 100*sigma(2);
for i=1+d:m+d
    for j=1+d:n+d
        pixValue = newI(i-d:i+d,j-d:j+d,1:3);
        %subValue = pixValue-repmat(newI(i,j,1:3),width,width);
        dL = pixValue(:,:,1)-newI(i,j,1);
        da = pixValue(:,:,2)-newI(i,j,2);
        db = pixValue(:,:,3)-newI(i,j,3);
        S = exp(-(dL.^2+da.^2+db.^2)/(2*sigma_r^2));
        H = S.*D;
        H = H./sum(H(:));
        resultI(i-d,j-d,1) = sum(sum(pixValue(:,:,1).*H)); 
        resultI(i-d,j-d,2) = sum(sum(pixValue(:,:,2).*H));    
        resultI(i-d,j-d,3) = sum(sum(pixValue(:,:,3).*H));    
    end
    waitbar(i/m);
end
close(h);
resultI = applycform(resultI,makecform('lab2srgb'));
end

其中newI = ReflectEdge(I,d); %对称地扩展边界,在原始图像I的边界处镜像映射像素值 

function newI = ReflectEdge(I,d)
%Version:1.0——灰色图像  Time:2013/05/01
%Version:1.1——灰色/彩色图像  Time:2013/05/02
%考虑到实用性,决定不添加更多的边界处理选择,统一使用:reflect across edge

if size(I,3)==1
    newI = ReflectEdgeGray(I,d);
elseif size(I,3)==3
    newI = ReflectEdgeColor(I,d);
else 
    error('Incorrect image size')    
end
end

function newI = ReflectEdgeGray(I,d)
[m n] = size(I);
newI = zeros(m+2*d,n+2*d);
%中间部分
newI(d+1:d+m,d+1:d+n) = I;
%上
newI(1:d,d+1:d+n) = I(d:-1:1,:);
%下
newI(end-d:end,d+1:d+n) = I(end:-1:end-d,:);
%左
newI(:,1:d) = newI(:,2*d:-1:d+1);
%右
newI(:,m+d+1:m+2*d) = newI(:,m+d:-1:m+1);
end

function newI = ReflectEdgeColor(I,d)
%扩展图像边界
[m n ~] = size(I);
newI = zeros(m+2*d,n+2*d,3);
%中间部分
newI(d+1:d+m,d+1:d+n,1:3) = I;
%上
newI(1:d,d+1:d+n,1:3) = I(d:-1:1,:,1:3);
%下
newI(end-d:end,d+1:d+n,1:3) = I(end:-1:end-d,:,1:3);
%左
newI(:,1:d,1:3) = newI(:,2*d:-1:d+1,1:3);
%右
newI(:,m+d+1:m+2*d,1:3) = newI(:,m+d:-1:m+1,1:3);
end

测试用例:

img = imread('.\lena.tif');
%%img = imread('.\images\lena_gray.tif');
img = double(img)/255;
img = img+0.05*randn(size(img));
img(img<0) = 0; img(img>1) = 1;
%img = imnoise(img,'gaussian');
figure, imshow(img,[])
title('原始图像')
d = 6;
sigma = [3 0.1];
resultI = BilateralFilt2(double(img), d, sigma);

figure, imshow(resultI,[])
title('双边滤波后的图像')

结果:



Reference:

1.C Tomasi, R Manduchi.Bilateral Filtering for Gray and Color Images, - Computer Vision, 1998.



Matlab 双边滤波函数imbilatfilt用法 发现上述图对条纹状伪影去除效果不明显。基于高斯核得双边滤波算法(一种边缘保持降噪算法)摘自mathwork,记录以便查阅。支持对RGB和灰度图的滤波。及以上版本支持该函数。 阅读详情

相关推荐

快速双边滤波实现代码(Matlab)

双边滤波的原理是基于像素的空间距离和像素值之间的相似性来进行滤波。具体而言,它通过计算像素之间的空间距离和像素值差异的加权平均来调整像素的值。然后,通过两个嵌套的循环遍历输入图像的每个像素,对于每个像素,计算滤波器窗口内的像素值加权平均。最后,将滤波后的像素值更新到输出图像中。通过以上步骤,您可以使用Matlab编写的代码实现快速双边滤波,并将其应用于图像处理任务中。双边滤波是一种常用的图像滤波方法,它能够在保持边缘信息的同时,有效地去除噪声。函数,传入灰度图像和参数,得到滤波后的图像。

COWizard的博客 440

【图像处理】【Matlab】双边滤波Matlab代码(速度很快)

网上的介绍太多了,但绝大多数Matlab代码应用了较多的循环,速度较慢。本代码充分应用矩阵运算,循环次数少,速度极快。 归一化到0到1之间以后,加入零均值,标准差为0.01的高斯白噪声,得到下图 设置σs=5,σr=0.2\sigma_s=5,\sigma_r=0.2σs​=5,σr​=0.2,邻域边长k=9,k=9,k=9,得到滤波效果 笔记本CPU为i7-4710HQ,0.1秒,速度很快 代码: clear all close all f = imread('滤波原始图.jpg'); [row,

【原创】【论文复现】【Matlab】【图像处理】基于三维直方图降维重建与高斯分布拟合的Otsu全局阈值分割算法的优化 4699

双边滤波原理及MATLAB实现

其中,w(i, j)表示像素i和像素j之间的权重,p(i)和p(j)分别表示像素i和像素j的空间位置,q(i)和q(j)分别表示像素i和像素j的灰度值。双边滤波(Bilateral Filtering)是一种常用的图像滤波技术,能够在保持边缘信息的同时对图像进行平滑处理。作为输入,并返回滤波后的图像。在函数内部,我们使用嵌套的循环遍历每个像素,并根据双边滤波的权重计算公式计算权重和归一化因子。对于每个像素,双边滤波器计算其周围像素与其之间的权重,并根据这些权重进行加权平均得到最终的输出像素值。

CyberLynxO的博客 954

双边滤波原理与参数的理解+双边滤波matlab实现

个人对双边滤波的理解与matlab实现

qq_54066857的博客 5998

双边滤波(bilateral filter) matlab代码

双边滤波(bilateral filter)matlab源代码,可以直接运行

双边滤波matlab代码讲解-crfasrnn:crfasrnn

初步过滤matlab代码讲解CRF-RNN用于语义图像分割 实时演示:更新:此版本的代码与最新的caffe未来版本集成在一起。 该软件包包含ICCV 2015论文中发布的“ CRF-RNN”语义图像分割方法的代码。 本文最初在NET中进行了描述。 我们的软件基于深度学习库构建。 当前版本由以下人员开发: ,,,和Suzhizhong。 导师: 我们的工作允许计算机识别图像中的对象,而我们的工作的与众不同之处在于,我们还可以恢复对象的2D轮廓。 目前,我们已经训练了该模型以识别20个班级。 该软件可以让您在自己的图像上测试我们的算法–试试看是否可以欺骗它,如果您得到一些好的示例,可以将其发送给我们。 我们为什么这样做? 这项工作是为弱视者打造增强现实眼镜项目的一部分。 请在此处阅读有关内容。 有关演示和有关CRF-RNN的更多信息,请访问项目网站。 如果您使用此代码/模型进行研究,请考虑引用以下论文: @inproceedings{crfasrnn_ICCV2015, author = {Shuai Zheng and Sadeep Jayasumana and Bernardino R

双边滤波器—— Matlab实现

例:先用双边滤波器(BF)对原图像进行滤波得到低频部分,原图和低频作差后得到高频分量,高频分量和低频分量分别增强后再进行合成。 双边滤波的特点是保边去噪,相较于高斯滤波,在平滑图像的同时,增加了对图像边缘的保护,其主要原因是由于该滤波器由两部分组成,一部分与像素空间距离相关,另一部分与像素点的像素差值相关。 下面结合公式来说说为什么双边滤波在模糊图像的时候具有保边功能,双边滤波器公式为: ...

WeisongZhao 1万+

双边滤波的MATLAB仿真程序

双边滤波的MATLAB仿真程序 %对每个sigma_r进行双边滤波 for i=1:number_of_space sigma_r=0.1+step*(i-1); img1 = bilateral(f,N,2,sigma_r); ENL(i)=enl(img1); EPI(i) = epi(f,img1); end

双边滤波matlab

直接上代码 function img = myBilateralFilter(Image, kerSize, delta) % Image 待滤波图像 % kerSize 滤波核大小 % delta 标准差 % img 输出图像 %% % c,r分别为核kerSize的垂直半径和水平半径 c = floor(kerSize(1)/2); r = floor(kerSize(2)/2); % 镜像填充边界 padImage = padarray(Image, [c, r], 'symmetric');

feelingjun的博客 1263

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2178

AD9371 官方例程构建及单音信号收发

项目构建基本流程和AD9361差不多,由于官方使用的ZCU102,记录下移植遇到的一些问题最终接收到正确的正弦波Errors: 0Errors: 0Errors: 0Errors: 0AD9361。

weixin_44630490的博客 2973

【图像处理】双边滤波器论文代码复现及其改进(Matlab代码实现)

文献来源:双边滤波平滑图像,同时保留边缘,通过非线性组合附近的图像值。该方法是非迭代的、局部的、简单的。它根据灰度或颜色的几何接近度和光度相似性来组合它们,并且在域和范围中更喜欢近值而不是远值。与分别在彩色图像的三个波段上操作的滤波器相比,双边滤波器可以加强CIE-Lab颜色空间下的感知度量,并以一种适应人类感知的方式平滑颜色和保留边缘。此外,与标准滤波相比,双边滤波不会在彩色图像的边缘产生幻像颜色,并减少了幻像颜色在原始图像中出现的地方。详细文章讲解见第4部分。

weixin_46039719的博客 1200

SAP SD POD 配置与 VLPOD 操作:3步解决发货10件开票7件的业务场景

本文详细解析了SAP SD POD功能在解决发货与开票数量差异中的应用,通过3步配置法实现精准匹配。重点介绍了POD核心逻辑、关键配置步骤及VLPOD操作技巧,帮助企业高效处理易损品运输等复杂场景,提升供应链管理效率。

weixin_30613343的博客 394

图像双边滤波算法matlab仿真

图像快速双边滤波算法的原理是利用高斯金字塔的结构将图像分解成不同尺度的图像,然后对每个尺度的图像进行双边滤波处理,最后将不同尺度的图像进行加权平均,从而得到最终输出图像。图像快速双边滤波算法利用高斯金字塔结构将图像分解成不同尺度的图像,然后对每个尺度的图像进行双边滤波处理,最后将不同尺度的图像进行加权平均,从而得到最终输出图像。2.对每个尺度的图像$I_{\text{in}}^{(i)}$进行高斯滤波处理,得到图像$G_{\sigma}^{(i)}$。其中,高斯滤波和双边滤波的参数可以根据需要进行调整。

FPGA/MATLAB学习教程/源码/项目合作开发 2359

【深度学习|学习笔记】广义线性模型Generalized linear model(GLM)模型详解,附代码。

【深度学习|学习笔记】广义线性模型Generalized linear model(GLM)模型详解,附代码。

2401_89898861的博客 1874

7、刚度矩阵与弹簧元素:有限元分析的核心

本文深入探讨了有限元分析中的核心概念——刚度矩阵与弹簧元素。详细介绍了刚度矩阵的定义、构建方法及其对称性、正定性和稀疏性等性质,同时解析了弹簧和阻尼器元素的特性及其在模拟复杂系统中的应用,如液压缸、减震器等。通过结合刚度矩阵与弹簧元素,可以提高结构模型的精度并模拟复杂的工程系统。文章还讨论了优化策略、验证流程、误差分析及实际应用案例,展示了这些技术在桥梁分析、汽车悬挂系统等领域的重要作用,并展望了其在未来新材料、智能结构和数字孪生技术中的发展潜力。

nice1的博客 235

用MAtlab写一个双边滤波算法代码

可以这样写: function output = bilateral_filter(input, sigma_d, sigma_r) % bilateral_filter - Bilateral filtering of a grayscale image % % input - input image % sigma_d - spatial standard deviation % sigma_...

weixin_42581846的博客 516

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 469

MATLAB双边滤波-matlab图像处理第7期(附完整代码)

MATLAB双边滤波-matlab图像处理第7期(附完整代码)

qq_40407694的博客 1599

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 91

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5807

双边滤波器的原理及实现

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

Rachel Zhang的专栏 15万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于联合双边滤波的图像去噪算法matlab仿真

在数字图像处理中,去噪是一个基本而重要的任务。噪声可能来源于图像获取、传输或处理过程中的各种因素,如传感器噪声、光照条件、压缩算法等。为了改善图像质量,提高后续图像处理任务(如分割、识别、跟踪等)的性能,必须对图像进行去噪处理。联合双边滤波(Joint Bilateral Filter, JBF)是一种有效的图像去噪算法,它结合了双边滤波和引导滤波的优点,能够在去除噪声的同时保持边缘和纹理信息。

FPGA/MATLAB学习教程/源码/项目合作开发 2110

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

matlab 双边滤波(彩色图)

% matlab 2012b % 彩色图的双边滤波 clc; clear; src=imread('cs.jpg'); %加载彩色图 %-------双边滤波 参数 ----------------- r = 20; %半径 窗口 长 = 宽 = 2*r+1 sigma_space = 15.0; %空间标准差 sigma_color = 10.0; %相似标准差 w_space = zeros(1,r+1); %空间权重 for i =.

做减求空 2673

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: OpenCV机器学习库MLL
下一篇: 另一个角度来看:支持向量机(SVM)
LiFeitengup
博客等级 码龄15年 466粉丝 59原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值