双边滤波器:
图像滤波,记载尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。 双边滤波是一种可以保边去噪的滤波器。它的原理是因为滤波器由两个函数构成,一个函数是有几何空间距离决定滤波器系数,另一个有像素差值决定滤波器系数。
function B = bfilter2(A,w,sigma)
% Verify that the input image exists and is valid. if ~exist('A','var') || isempty(A)
error('Input image A is undefined or invalid.'); end
if ~isfloat(A) || ~sum([1,3] == size(A,3)) || ... min(A(:)) < 0 || max(A(:)) > 1
error(['Input image A must be a double precision ',... 'matrix of size NxMx1 or NxMx3 on the closed ',... 'interval [0,1].']); end
% Verify bilateral filter window size. if ~exist('w','var') || isempty(w) || ... numel(w) ~= 1 || w < 1 w = 5; end
w = ceil(w);
% Verify bilateral filter standard deviations. if ~exist('sigma','var') || isempty(sigma) || ... numel(sigma) ~= 2 || sigma(1) <= 0 || sigma(2) <= 0 sigma = [3 0.1]; end
% Apply either grayscale or color bilateral filtering. if size(A,3) == 1
B = bfltGray(A,w,sigma(1),sigma(2)); else
B = bfltColor(A,w,sigma(1),sigma(2)); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Implements bilateral filtering for grayscale images. function B = bfltGray(A,w,sigma_d,sigma_r)
% Pre-compute Gaussian distance weights. [X,Y] = meshgrid(-w:w,-w:w);
G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% Createwaitbar.
h = waitbar(0,'Applying bilateral filter...'); set(h,'Name','Bilateral Filter Progress');
% Apply bilateral filter. dim = size(A); B = zeros(dim); for i = 1:dim(1) for j = 1:dim(2)
% Extract local region. iMin = max(i-w,1); iMax = min(i+w,dim(1)); jMin = max(j-w,1); jMax = min(j+w,dim(2));
I = A(iMin:iMax,jMin:jMax);
% Compute Gaussian intensity weights.
H = exp(-(I-A(i,j)).^2/(2*sigma_r^2));
% Calculate bilateral filter response.
F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1); B(i,j) = sum(F(:).*I(:))/sum(F(:));
end
waitbar(i/dim(1)); end
% Close waitbar. close(h);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Implements bilateral filter for color images. function B = bfltColor(A,w,sigma_d,sigma_r)
% Convert input sRGB image to CIELab color space. if exist('applycform','file')
A = applycform(A,makecform('srgb2lab')); else
A = colorspace('Lab<-RGB',A); end
% Pre-compute Gaussian domain weights. [X,Y] = meshgrid(-w:w,-w:w); G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% Rescale range variance (using maximum luminance). sigma_r = 100*sigma_r;
% Createwaitbar.
h = waitbar(0,'Applying bilateral filter...'); set(h,'Name','Bilateral Filter Progress');
% Apply bilateral filter. dim = size(A); B = zeros(dim); for i = 1:dim(1) for j = 1:dim(2)
% Extract local region. iMin = max(i-w,1); iMax = min(i+w,dim(1)); jMin = max(j-w,1); jMax = min(j+w,dim(2));
I = A(iMin:iMax,jMin:jMax,:);
% Compute Gaussian range weights. dL = I(:,:,1)-A(i,j,1); da = I(:,:,2)-A(i,j,2); db = I(:,:,3)-A(i,j,3);
H = exp(-(dL.^2+da.^2+db.^2)/(2*sigma_r^2));
% Calculate bilateral filter response.
F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1); norm_F = sum(F(:));
B(i,j,1) = sum(sum(F.*I(:,:,1)))/norm_F; B(i,j,2) = sum(sum(F.*I(:,:,2)))/norm_F; B(i,j,3) = sum(sum(F.*I(:,:,3)))/norm_F;
end
waitbar(i/dim(1)); end
% Convert filtered image back to sRGB color space. if exist('applycform','file')
B = applycform(B,makecform('lab2srgb')); else
B = colorspace('RGB<-Lab',B); end
% Close waitbar. close(h);
调用方法
img1 = double(imread('1.jpg'))/255; %将图像归一化到[0,1]的矩阵
w = 5; 或者10 % bilateral filter half-width
sigma = [3 0.1]; %
定义域方差?d记为SIGMA(1),值域方差?r记为
SIGMA(2)
% Apply bilateral filter to each image. bflt_img1 = bfilter2(img1,w,sigma); imshow(bflt_img1);
sigma[1]=空间 space sigma[2]=亮度 r
双边滤波对空间方差的取值更敏感
空间方差越小,图像的边缘和细节越清楚,空间方差越大,图像越模糊
在平滑区域,亮度方差越大能更好地平滑噪声。在边缘和存在纹理的区域,亮度方差越小,能保留更多的边缘特征。
滤波器由两个函数构成,一个是由空间距离决定的滤波器系数。一个是由像素差值决定滤波器的系数。
f(x,y)?
(i,j)?Sx,y??(i,j)g(i,j)(i,j)?Sx,y
??(i,j)
式中Sx,y表示中心点(x,y)的(2N?1)x(2N?1)大小的邻域。
g(i,j)是处理前图像
f(x,y)是滤波后的图像
?(i,j)为两部分系数的乘积?(i,j)=?s(i,j)?r(i,j)
g(i,j)?g(x,y)2i?x?j?y22?r(i,j)?e
?2?r2?s(i,j)?e
?22?s
且有
可以看到,双边滤波器受3个参数的控制,滤波器半宽N,强。
?s,?r。且N越大,平滑程度越
?s控制着空间邻近度因子?r对应亮度相似度因子。
考虑了空间域与值域的差别
是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。
A=ones(size(b),1)*a; B=b'*ones(size(a))
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库双边滤波总结 包括代码与注释在线全文阅读。
相关推荐: