快速双边滤波源码「建议收藏」

%FastBilateralFilterUsingRaisedCosines%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%inImg:grayscaleimage%sigma1:widthofspatialGaussian%sigma2:widthofrangeGaussian%[-w,w]^…

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

快速双边滤波源码「建议收藏」

% Fast Bilateral Filter Using Raised Cosines

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  inImg        :  grayscale image
%  sigma1      : width of spatial Gaussian
%  sigma2      : width of range Gaussian
%  [-w, w]^2  : domain of spatial Gaussian
%  tol             : truncation error
%
%  Author:    Kunal N. Chaudhury.
%  Date:        March 1, 2012.
%  Modified:  June 21, 2014.
%
%  References:
%  [1] K.N. Chaudhury, D. Sage, and M. Unser, “Fast O(1) bilateral
%  filtering using trigonometric range kernels,” IEEE Trans. Image Proc.,
%  vol. 20, no. 11, 2011.
%
% [2] K.N. Chaudhury, “Acceleration of the shiftable O(1) algorithm for
% bilateral filtering and non-local means,”  IEEE Transactions on Image Proc., 
% vol. 22, no. 4, 2013.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% load test image
clc, clear all, close all force;
Img    =  double( imread(‘./images/ckb.jpg’) );
[m, n] = size(Img);

% create noisy image (additive Gaussian noise)
sigma  =  20;
inImg  =  Img + sigma * randn(m, n);

% filter parameters
sigma1 = 4;
sigma2 = 30;
tol        = 0.01;

% Set window for spatial Gaussian
w  = 6*sigma1;
if (mod(w,2) == 0)
    w  = w+1;
end

% call bilateral filter
tic;
[outImg, param] =  shiftableBF(inImg, sigma1, sigma2, w, tol);
toc;

% plot results
T  = param.T;
N  = param.N;
M  = param.M;
gamma  =  1 / (sqrt(N) * sigma2);
twoN   =  2^N;

warning(‘off’); %#ok<WNOFF>

s  = linspace(-T, T, 200);
g  = exp( -s.^2 / (2 * sigma2 *sigma2) );
gApprox  = cos(gamma * s).^N;
if M ==  0
    gTrunc = gApprox;
else
    gTrunc = zeros( 1, length(s) );
    for k = M : N – M
        gTrunc = gTrunc + (nchoosek(N, k) / twoN) * …
            cos( (2*k – N) * gamma * s  );
    end
end

figure(‘Units’,’normalized’,’Position’,[0 0.5 1 0.5]);
plot(s, g, ‘b’);
hold on,
plot(s, gApprox, ‘m’),
hold on,
plot(s, gTrunc, ‘r’);
axis(‘tight’), grid(‘on’),
legend(‘Gassian’,’Raised cosine’,’Truncated raised cosine’,’FontSize’, 10);
title(‘Comparison of the range kernels’, ‘FontSize’, 10),

peak  = 255;
PSNR0 = 10 * log10(m * n * peak^2 / sum(sum( (inImg – Img).^2)) );
PSNR1 = 10 * log10(m * n * peak^2 / sum(sum((outImg – Img).^2)) );

figure(‘Units’,’normalized’,’Position’,[0 0.5 1 0.5]);
colormap gray,
subplot(1,3,1), imshow(uint8(Img)),
title(‘Original’, ‘FontSize’, 10), axis(‘image’, ‘off’);
subplot(1,3,2), imshow(uint8(inImg)),
title([ ‘Noisy, ‘, num2str(PSNR0, ‘%.2f’), ‘dB’] , ‘FontSize’, 10),
axis(‘image’, ‘off’);
subplot(1,3,3), imshow(uint8(outImg)),
title([ ‘Filtered, ‘, num2str(PSNR1, ‘%.2f’), ‘dB’] , ‘FontSize’, 10),
axis(‘image’, ‘off’);

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127397.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一款你不容错过的Laravel后台管理扩展包 —— Voyager

    一款你不容错过的Laravel后台管理扩展包 —— Voyager

    2021年10月21日
    44
  • 中国超级计算机的发展过程_超级计算机最新发展史

    中国超级计算机的发展过程_超级计算机最新发展史截至2009年初的数据过去,超级计算机主要用于军事,科学和航空航天等高端领域.如今,超级计算机已进入平民时代中国计算机发展,与人们的生活密不可分.随着中国第一台超级计算机“魔方”跻身世界前十名,中国逐渐成为超级计算机的强国.超级计算机将更频繁地扮演平民的“行军”,进入家庭,促进公共服务设施,甚至帮助人们治愈目前无法治愈的疾病……项目总投资:超过100亿元项目期限:1975年至今中国超级计…

    2022年10月19日
    4
  • ubuntu安装qt5.12_ubuntu安装分区

    ubuntu安装qt5.12_ubuntu安装分区下载Qt安装包官网下载速度较慢,可以从国内镜像下载。清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/中国互联网络信息中心:https://mirrors.cnnic.cn/qt/安装包名称:qt-opensource-linux-x64-5.14.2.run./qt-opensource-linux-x64-5.14.2.run安装好后需要一些配置才能开始开发

    2022年10月15日
    2
  • postgreSql修改端口后psql命令行链接报错”/tmp/.s.PGSQL.5432“

    postgreSql修改端口后psql命令行链接报错”/tmp/.s.PGSQL.5432“今天修改pg的端口号port改成54328后重启完数据库的时候直接psql进库的时候进不去[postgres@iZ8vbifqgkwljcq9ccpkg7Zdata]$psqlpsql:couldnotconnecttoserver:NosuchfileordirectoryIstheserverrunninglocallyandacceptingconnectionsonUnixdomainsocket”/tmp/.s.PGSQL.5432这时,

    2022年6月19日
    59
  • 带通滤波器作用和用途_什么是带通滤波器?工作原理及原理图详解

    带通滤波器作用和用途_什么是带通滤波器?工作原理及原理图详解带通滤波器(band-passfilter)是一个允许特定频段的波通过同时屏蔽其他频段的设备。比如RLC振荡回路就是一个模拟带通滤波器。带通滤波器是指能通过某一频率范围内的频率分量、但将其他范围的频率分量衰减到极低水平的滤波器,与带阻滤波器的概念相对。一个模拟带通滤波器的例子是电阻-电感-电容电路(RLCcircuit)。这些滤波器也可以用低通滤波器同高通滤波器组合来产生。一个理想的带通滤…

    2022年5月2日
    42
  • java数组详解

    java数组详解1 数组概念同一种类型数据的集合。其实数组就是一个容器。数组的好处可以自动给数组中的元素从0开始编号,方便操作这些元素。格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];示例:int[] arr = new int[5];格式2:

    2022年6月2日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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