1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y52clZlp
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。双边滤波器的好处是可以做边缘保存(edge preserving),一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显。
4.部分源码
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)) );
A177