forked from LabForComputationalVision/matlabPyrTools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblurDn.m
executable file
·59 lines (49 loc) · 1.33 KB
/
blurDn.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
% RES = blurDn(IM, LEVELS, FILT)
%
% Blur and downsample an image. The blurring is done with filter
% kernel specified by FILT (default = 'binom5'), which can be a string
% (to be passed to namedFilter), a vector (applied separably as a 1D
% convolution kernel in X and Y), or a matrix (applied as a 2D
% convolution kernel). The downsampling is always by 2 in each
% direction.
%
% The procedure is applied recursively LEVELS times (default=1).
% Eero Simoncelli, 3/97.
function res = blurDn(im, nlevs, filt)
%------------------------------------------------------------
%% OPTIONAL ARGS:
if (exist('nlevs') ~= 1)
nlevs = 1;
end
if (exist('filt') ~= 1)
filt = 'binom5';
end
%------------------------------------------------------------
if isstr(filt)
filt = namedFilter(filt);
end
filt = filt/sum(filt(:));
if nlevs > 1
im = blurDn(im,nlevs-1,filt);
end
if (nlevs >= 1)
if (any(size(im)==1))
if (~any(size(filt)==1))
error('Cant apply 2D filter to 1D signal');
end
if (size(im,2)==1)
filt = filt(:);
else
filt = filt(:)';
end
res = corrDn(im,filt,'reflect1',(size(im)~=1)+1);
elseif (any(size(filt)==1))
filt = filt(:);
res = corrDn(im,filt,'reflect1',[2 1]);
res = corrDn(res,filt','reflect1',[1 2]);
else
res = corrDn(im,filt,'reflect1',[2 2]);
end
else
res = im;
end