77范文网 - 专业文章范例文档资料分享平台

双边滤波总结 包括代码与注释

来源:网络收集 时间:2018-12-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

双边滤波器:

图像滤波,记载尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。 双边滤波是一种可以保边去噪的滤波器。它的原理是因为滤波器由两个函数构成,一个函数是有几何空间距离决定滤波器系数,另一个有像素差值决定滤波器系数。

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”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库双边滤波总结 包括代码与注释在线全文阅读。

双边滤波总结 包括代码与注释.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/382795.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: