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 --- .../src/matlabPyrTools/buildSFpyrLevs.m | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/buildSFpyrLevs.m (limited to 'SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/buildSFpyrLevs.m') diff --git a/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/buildSFpyrLevs.m b/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/buildSFpyrLevs.m new file mode 100755 index 0000000..472d861 --- /dev/null +++ b/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/buildSFpyrLevs.m @@ -0,0 +1,63 @@ +% [PYR, INDICES] = buildSFpyrLevs(LODFT, LOGRAD, XRCOS, YRCOS, ANGLE, HEIGHT, NBANDS) +% +% Recursive function for constructing levels of a steerable pyramid. This +% is called by buildSFpyr, and is not usually called directly. + +% Eero Simoncelli, 5/97. + +function [pyr,pind] = buildSFpyrLevs(lodft,log_rad,Xrcos,Yrcos,angle,ht,nbands); + +if (ht <= 0) + + lo0 = ifft2(ifftshift(lodft)); + pyr = real(lo0(:)); + pind = size(lo0); + +else + + bands = zeros(prod(size(lodft)), nbands); + bind = zeros(nbands,2); + +% log_rad = log_rad + 1; + Xrcos = Xrcos - log2(2); % shift origin of lut by 1 octave. + + lutsize = 1024; + Xcosn = pi*[-(2*lutsize+1):(lutsize+1)]/lutsize; % [-2*pi:pi] + order = nbands-1; + %% divide by sqrt(sum_(n=0)^(N-1) cos(pi*n/N)^(2(N-1)) ) + %% Thanks to Patrick Teo for writing this out :) + const = (2^(2*order))*(factorial(order)^2)/(nbands*factorial(2*order)); + Ycosn = sqrt(const) * (cos(Xcosn)).^order; + himask = pointOp(log_rad, Yrcos, Xrcos(1), Xrcos(2)-Xrcos(1), 0); + + for b = 1:nbands + anglemask = pointOp(angle, Ycosn, Xcosn(1)+pi*(b-1)/nbands, Xcosn(2)-Xcosn(1)); + banddft = ((-sqrt(-1))^(nbands-1)) .* lodft .* anglemask .* himask; + band = ifft2(ifftshift(banddft)); + + bands(:,b) = real(band(:)); + bind(b,:) = size(band); + end + + dims = size(lodft); + ctr = ceil((dims+0.5)/2); + lodims = ceil((dims-0.5)/2); + loctr = ceil((lodims+0.5)/2); + lostart = ctr-loctr+1; + loend = lostart+lodims-1; + + log_rad = log_rad(lostart(1):loend(1),lostart(2):loend(2)); + angle = angle(lostart(1):loend(1),lostart(2):loend(2)); + lodft = lodft(lostart(1):loend(1),lostart(2):loend(2)); + YIrcos = abs(sqrt(1.0 - Yrcos.^2)); + lomask = pointOp(log_rad, YIrcos, Xrcos(1), Xrcos(2)-Xrcos(1), 0); + + lodft = lomask .* lodft; + + [npyr,nind] = buildSFpyrLevs(lodft, log_rad, Xrcos, Yrcos, angle, ht-1, nbands); + + pyr = [bands(:); npyr]; + pind = [bind; nind]; + +end + -- cgit v1.2.2