From f618466c25d43f3bae9e40920273bf77de1e1149 Mon Sep 17 00:00:00 2001 From: leochanj105 Date: Mon, 19 Oct 2020 23:09:30 -0400 Subject: initial sd-vbs initial sd-vbs add sd-vbs sd-vbs --- .../texture_synthesis/src/matlab/buildLpyr.m | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100755 SD-VBS/benchmarks/texture_synthesis/src/matlab/buildLpyr.m (limited to 'SD-VBS/benchmarks/texture_synthesis/src/matlab/buildLpyr.m') diff --git a/SD-VBS/benchmarks/texture_synthesis/src/matlab/buildLpyr.m b/SD-VBS/benchmarks/texture_synthesis/src/matlab/buildLpyr.m new file mode 100755 index 0000000..facb0f3 --- /dev/null +++ b/SD-VBS/benchmarks/texture_synthesis/src/matlab/buildLpyr.m @@ -0,0 +1,109 @@ +% [PYR, INDICES] = buildLpyr(IM, HEIGHT, FILT1, FILT2, EDGES) +% +% Construct a Laplacian pyramid on matrix (or vector) IM. +% +% HEIGHT (optional) specifies the number of pyramid levels to build. Default +% is 1+maxPyrHt(size(IM),size(FILT)). You can also specify 'auto' to +% use this value. +% +% FILT1 (optional) can be a string naming a standard filter (see +% namedFilter), or a vector which will be used for (separable) +% convolution. Default = 'binom5'. FILT2 specifies the "expansion" +% filter (default = filt1). EDGES specifies edge-handling, and +% defaults to 'reflect1' (see corrDn). +% +% PYR is a vector containing the N pyramid subbands, ordered from fine +% to coarse. INDICES is an Nx2 matrix containing the sizes of +% each subband. This is compatible with the MatLab Wavelet toolbox. + +% Eero Simoncelli, 6/96. + +function [pyr,pind] = buildLpyr(im, ht, filt1, filt2, edges) + +if (nargin < 1) + error('First argument (IM) is required'); +end + +im_sz = size(im); + +%------------------------------------------------------------ +%% OPTIONAL ARGS: + +if (exist('filt1') ~= 1) + filt1 = 'binom5'; +end + +if isstr(filt1) + filt1 = namedFilter(filt1); +end + +if ( (size(filt1,1) > 1) & (size(filt1,2) > 1) ) + error('FILT1 should be a 1D filter (i.e., a vector)'); +else + filt1 = filt1(:); +end + +if (exist('filt2') ~= 1) + filt2 = filt1; +end + +if isstr(filt2) + filt2 = namedFilter(filt2); +end + +if ( (size(filt2,1) > 1) & (size(filt2,2) > 1) ) + error('FILT2 should be a 1D filter (i.e., a vector)'); +else + filt2 = filt2(:); +end + +max_ht = 1 + maxPyrHt(im_sz, max(size(filt1,1), size(filt2,1))); +if ( (exist('ht') ~= 1) | (ht == 'auto') ) + ht = max_ht; +else + if (ht > max_ht) + error(sprintf('Cannot build pyramid higher than %d levels.',max_ht)); + end +end + +if (exist('edges') ~= 1) + edges= 'reflect1'; +end + +%------------------------------------------------------------ + +if (ht <= 1) + + pyr = im(:); + pind = im_sz; + +else + + if (im_sz(2) == 1) + lo2 = corrDn(im, filt1, edges, [2 1], [1 1]); + elseif (im_sz(1) == 1) + lo2 = corrDn(im, filt1', edges, [1 2], [1 1]); + else + lo = corrDn(im, filt1', edges, [1 2], [1 1]); + int_sz = size(lo); + lo2 = corrDn(lo, filt1, edges, [2 1], [1 1]); + end + + [npyr,nind] = buildLpyr(lo2, ht-1, filt1, filt2, edges); + + if (im_sz(1) == 1) + hi2 = upConv(lo2, filt2', edges, [1 2], [1 1], im_sz); + elseif (im_sz(2) == 1) + hi2 = upConv(lo2, filt2, edges, [2 1], [1 1], im_sz); + else + hi = upConv(lo2, filt2, edges, [2 1], [1 1], int_sz); + hi2 = upConv(hi, filt2', edges, [1 2], [1 1], im_sz); + end + + hi2 = im - hi2; + + pyr = [hi2(:); npyr]; + pind = [im_sz; nind]; + +end + -- cgit v1.2.2