双边滤波——原理及matlab实现

  思维闭塞时可外出采采风。1、双边滤波简介:   双边滤波(Bilateral filter)是一种非线性滤波方法(空间权值+相似权值)——空间权值:模糊去噪;相似权值:保护边缘。2、双边滤波原理  双边滤波具有两个权重:空间权重与相似权重  1)空间权重:与像素位置有关,为像素之间的距离(欧式距离,空间度量),故可定义为全局变量放在循环外,通常定义为…

大家好,又见面了,我是你们的朋友全栈君。

   思维闭塞时可外出采采风。

1、双边滤波简介:

    双边滤波(Bilateral filter)是一种非线性滤波方法(空间权值+相似权值)——空间权值:模糊去噪;相似权值:保护边缘。


2、双边滤波原理

    双边滤波具有两个权重:空间权重与相似权重

    1)空间权重:与像素位置有关,为像素之间的距离(欧式距离,空间度量),故可定义为全局变量放在循环外,通常定义为

c(\xi ,x)=e^{-\tfrac{1}{2}(\tfrac{d(\xi ,x)}{\sigma_{d}})^{2}}

d(\xi,x)=d(\xi-x)=||\xi -x||

    其中d(\xi,x)表示两个像素间的距离(欧式距离)。该过程滤波如下:

h(x)=k_{d}^{-1}(x)\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }f(\xi )c(\xi ,x)d\xi

    权值为:

k_{d}(x)=\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }c(\xi ,x)d\xi

  2)相似权重:与像素值大小有关,为像素值之间的距离(辐射距离,相似性度量),根据像素值不同而不同,需要放在循环内,通常定义为

s(f(\xi) ,f(x))=e^{-\frac{1}{2}(\frac{\sigma (f(\xi ),f(x))}{\sigma _{\tau }})^{2}}

\sigma(\xi ,x)=\sigma(\xi-x)=||\xi -x||

其中\sigma (f(\xi ),f(x))表示两个像素值之间的距离。该过程滤波如下:

h(x)=k_{\tau }^{-1}(x)\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }f(\xi )s(f(\xi) ,f(x))d\xi

    权值为:

k_{\tau }(x)=\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }s(f(\xi) ,f(x))d\xi

    3)两者结合,得到基于空间距离、相似程度整体考虑的双边滤波如下:

h(x)=k^{-1}(x)\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }f(\xi )c(\xi ,x)s(f(\xi) ,f(x))d\xi

    权值为:

k(x)=\int_{-\infty }^{\infty }\int_{-\infty }^{\infty }c(\xi,x)s(f(\xi) ,f(x))d\xi


3、双边滤波实现:

    实际应用时,根据需要对积分采用离散形式表示,滤波半径根据需要自行设置。

    在进行滤波前,需将数据转换为浮点型等。


4、matlab源代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 读取
f = imread(filename);

% 设置参数
r = 5;% 滤波半径
a = 3;% 全局方差
b = 0.1;% 局部方差

% 判断二维图还是三维图
if ismatrix(f)
    g = bfilt_gray(f,r,a,b);
else
    g = bfilt_rgb(f,r,a,b);
end

% 显示
subplot(121)
imshow(f)
subplot(122)
imshow(g)



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%灰度图双边滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function g = bfilt_gray(f,r,a,b)
% f灰度图;r滤波半径;a全局方差;b局部方差
[x,y] = meshgrid(-r:r);
w1 = exp(-(x.^2+y.^2)/(2*a^2));
f = tofloat(f);%f = im2double(f);

h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');

[m,n] = size(f);
f_temp = padarray(f,[r r],'symmetric');
g = zeros(m,n);
for i = r+1:m+r
    for j = r+1:n+r
        temp = f_temp(i-r:i+r,j-r:j+r);
        w2 = exp(-(temp-f(i-r,j-r)).^2/(2*b^2));
        w = w1.*w2;
        s = temp.*w;
        g(i-r,j-r) = sum(s(:))/sum(w(:));
    end
    waitbar((i-r)/m);
end
% g = revertclass(g);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%彩色图双边滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function g = bfilt_rgb(f,r,a,b)
% f灰度图;r滤波半径;a全局方差;b局部方差
[x,y] = meshgrid(-r:r);
w1 = exp(-(x.^2+y.^2)/(2*a^2));
f = tofloat(f);%f = im2double(f);

h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');

fr = f(:,:,1);
fg = f(:,:,2);
fb = f(:,:,3);
[m,n] = size(fr);
fr_temp = padarray(fr,[r r],'symmetric');
fg_temp = padarray(fg,[r r],'symmetric');
fb_temp = padarray(fb,[r r],'symmetric');
[gr,gg,gb] = deal(zeros(size(fr)));


for i = r+1:m+r
    for j = r+1:n+r
        temp1 = fr_temp(i-r:i+r,j-r:j+r);
        temp2 = fg_temp(i-r:i+r,j-r:j+r);
        temp3 = fb_temp(i-r:i+r,j-r:j+r);
        dr = temp1 - fr_temp(i,j);
        dg = temp2 - fg_temp(i,j);
        db = temp3 - fb_temp(i,j);
        w2 = exp(-(dr.^2+dg.^2+db.^2)/(2*b^2));
        w = w1.*w2;
        gr(i-r,j-r) = sum(sum(temp1.*w))/sum(w(:));
        gg(i-r,j-r) = sum(sum(temp2.*w))/sum(w(:));
        gb(i-r,j-r) = sum(sum(temp3.*w))/sum(w(:));
    end
    waitbar((i-r)/n);
end
g = cat(3,gr,gg,gb);
% g = revertclass(g);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%可以用到的函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [out,revertclass]=tofloat(in)
identity=@(x) x;
tosingle=@im2single;

table={'uint8',tosingle,@im2uint8
'uint16',tosingle,@im2uint16
'int16',tosingle,@im2int16
'logical',tosingle,@logical
'double',identity,identity
'single',identity,identity};

classIndex=find(strcmp(class(in),table(:,1)));

if isempty(classIndex)
    error('unsupported input immage class.');
end

out=table{classIndex,2}(in);
revertclass=table{classIndex,3}; 


 5、实验结果

双边滤波——原理及matlab实现

双边滤波——原理及matlab实现

 

6、参考资料

https://blog.csdn.net/abcjennifer/article/details/7616663

https://blog.csdn.net/bugrunner/article/details/7170471

https://www.cnblogs.com/qiqibaby/p/5296681.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127320.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HTML5 canvas 捕鱼达人游戏

    在线试玩:http://hovertree.com/texiao/html5/33/html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠

    2021年12月24日
  • 单幅图像超分辨率重建(图像超分)

    代码的解析已经给出,现在补上:单图像超分辨率重建示例代码解析目录一、简介二、前期准备三、运行程序四、参考目录一、简介图像超分辨率重建技术就是利用一组低质量、低分辨率图像(或运动序列)来产生单幅高质量、高分辨率图像。图像超分辨率重建应用领域及其宽广,在军事,医学,公共安全,计算机视觉等方面都存在着重要的应用前景。在计算机视觉领域,图像超分辨率重建技术有可能使图像实现从检出…

  • Unzip Yearly Subscription_@mapkey注解

    Unzip Yearly Subscription_@mapkey注解原文:http://werkzeug.pocoo.org/docs/0.12/local/#werkzeug.local.LocalProxySoonerorlateryouhavesomethingsyouwanttohaveineverysinglevieworhelperfunctionorwhatever.InPHPthewayt

  • Tomcat如何配置环境变量

    Tomcat如何配置环境变量分步阅读下载安装tomcat,如何配置环境变量?配置过程中是否和作者一样经常出现错误?请仔细读文及注意事项。工具/原料1,JDK:版本为jdk-8u121-windows-x64.exe下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html2,tomcat:版本为apache-tomcat-8.0.36-windows-x64.zip下载地址http://tomcat.apache.org/3,wn10,

  • Java写 soapclient,PHP通过SoapClient调用Java发布的WebService

    Java写 soapclient,PHP通过SoapClient调用Java发布的WebServicephp通过接口调用数据时,长用的为:http和webservice两种方法。http是指:接口端提供http链接,将数据以json或XML格式输出到网页中。php调用端通过file_get_contents或curl方法来调用,GET/POST方式来传参。webservice是指:通过soap读写接口,现在着重来介绍一下这种方法。php5以后提供了原生的soap方法:SoapClient,需要开…

    2022年10月28日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号