a b/Code/bilateral.m
1
function B=bilateral(ns);
2
% preserve edges. The intensity value at each pixel in an image is replaced by a
3
% weighted average of intensity values from nearby pixels
4
5
% Start of bilateral filter
6
7
% gaussian distance weights
8
w     = 5;       
9
sigma = [3 0.1]; 
10
[X,Y] = meshgrid(-w:w,-w:w);
11
G = exp(-(X.^2+Y.^2)/(2*sigma(1)^2));
12
13
dim = size(ns); 
14
B = zeros(dim);
15
for ii = 1:dim(1)
16
   for jj = 1:dim(2)
17
18
         iMin = max(ii-w,1);
19
         iMax = min(ii+w,dim(1));
20
         jMin = max(jj-w,1);
21
         jMax = min(jj+w,dim(2));
22
         I = ns(iMin:iMax,jMin:jMax);
23
         H = exp(-(I-ns(ii,jj)).^2/(2*sigma(2)^2));
24
         F = H.*G((iMin:iMax)-ii+w+1,(jMin:jMax)-jj+w+1);
25
         B(ii,jj) = sum(F(:).*I(:))/sum(F(:));
26
   end
27
end
28
 % B=B.*255;
29
30
% end of bilateral filter