function [out]=bif(im,sigd,sigr,n)
% bif = bilateral filter
% im = input image
% sigd = domain parameter for spatial kernel
% sigr = range parmeter for intensity kernel
% n = noise intensity
% out = output image
% Other files used in this function
% rpadd = another function is used
% PSN = Peak Signal to noise ratio
% IEF = Image Enhancement Factor
% For ex.
% im=imread('bgray.jpg');
% out=bif(im,3,0.2,0.1);
imwrite(im,'in.jpg')
figure,imshow(im); title('Input Image')
w=(2*sigd)+1;
% sigr=(n*100)^2/(.003*(sigd^2)); % Adaptive Selection of R
% Adding Noise
nim=imnoise(im,'Gaussian',n);
imwrite(nim,'nim.jpg')
figure,imshow(nim); title('Noisy Image')
% Gaussian Filter Computation
[row clm]=size(im);
gw=zeros(w,w); % gaussian weight matrix
c=ceil(w/2);
c=[c c]; % Centre Element Position
for i=1:w
for j=1:w
q=[i,j]; % neighborhood pixel address
gw(i,j)=norm(c-q); % Euclidean distance of window with centre pixel after differance
end
end
Gwd=(exp(-(gw.^2)/(2*(sigd^2)))); % Gaussian window by kernel
% Padding
proci=padarray(nim,[sigd sigd],'replicate'); % proci = image for processing
[row clm]=size(proci); % Size of image
proci=im2double(proci); % changing data type
K=sigd;
L=[-K:K];
c=K+1; % c,c is the position of centre element
iter=length(L); % iterations
ind=1;
% Create waitbar.
h = waitbar(0,'Wait...');
set(h,'Name','Bilateral Fiter Processing');
for r=(1+K):(row-K) % Indexing Row of noisy pixel
for s=(1+K):(clm-K) % Indexing Coloumn of noisy pixel
for i=1:iter % Indexing Row of window
for j=1:iter % Indexing Column of window
win(i,j)=proci((r+L(i)),(s+L(j))); % Extracting window
end
end
I=win; % Intensity Matrix
win=win(c,c)-win; % Intensity Differance
win=sqrt(win.^2); % Making value positive
Gwi=exp(-(win.^2)/(2*(sigr^2))); % Gaussian window by kernel intensity matrix.
% Gwi=exp(-((.003*sigd)*win.^2)/(2*(n^2))); % Adaptive
weights=(Gwi.*Gwd)/sum(sum(Gwi.*Gwd)); % Computing weight
Ii=sum(sum(weights.*I)); % Final value which will be used in place of current pixel.
proci(r,s)=Ii; % Replacing value
win=[];
end
waitbar(r/(row-K));
end
close(h)
% Removing Padding
proci=rpadd(proci,K); % Calling another function to remove padding
out=im2uint8(proci);
figure,imshow(out)
imwrite(out,'out.jpg'); title('Result Image')
%% Quality Measures
orgimg=im2double(imread('in.jpg'));
nimg=im2double(imread('nim.jpg'));
dimg=im2double(imread('out.jpg'));
disp('PSNR'), psn=PSN(orgimg,dimg) % PSNR
disp('IEF'), I=IEF(orgimg,nimg,dimg)
没有合适的资源?快使用搜索试试~ 我知道了~
Bif.rar_边缘平滑 matlab
共5个文件
m:4个
jpg:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 173 浏览量
2022-09-23
01:00:59
上传
评论
收藏 34KB RAR 举报
温馨提示
Bilateral 滤波器,在平滑图像的同时保存了图像中的边缘。
资源推荐
资源详情
资源评论
收起资源包目录
Bif.rar (5个子文件)
rpadd.m 249B
IEF.m 345B
bgray.jpg 33KB
bif.m 3KB
PSN.m 334B
共 5 条
- 1
资源评论
林当时
- 粉丝: 95
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功