1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- % 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
|