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/TUTORIALS/matlabPyrTools.m | 145 +++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100755 SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/TUTORIALS/matlabPyrTools.m (limited to 'SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/TUTORIALS/matlabPyrTools.m') diff --git a/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/TUTORIALS/matlabPyrTools.m b/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/TUTORIALS/matlabPyrTools.m new file mode 100755 index 0000000..44c27ce --- /dev/null +++ b/SD-VBS/benchmarks/texture_synthesis/src/matlabPyrTools/TUTORIALS/matlabPyrTools.m @@ -0,0 +1,145 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Some examples using the tools in this distribution. +%%% Eero Simoncelli, 2/97. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Add directory to path (YOU'LL NEED TO ADJUST THIS): +path('/lcv/matlab/lib/matlabPyrTools',path); + +%% Load an image, and downsample to a size appropriate for the machine speed. +oim = pgmRead('einstein.pgm'); +tic; corrDn(oim,[1 1; 1 1]/4,'reflect1',[2 2]); time = toc; +imSubSample = min(max(floor(log2(time)/2+3),0),2); +im = blurDn(oim, imSubSample,'qmf9'); +clear oim; + +%%% ShowIm: +%% 3 types of automatic graylevel scaling, 2 types of automatic +%% sizing, with or without title and Range information. +help showIm +clf; showIm(im,'auto1','auto','Al') +clf; showIm('im','auto2') +clf; showIm(im,'auto3',2) + +%%% Statistics: +mean2(im) +var2(im) +skew2(im) +kurt2(im) +entropy2(im) +imStats(im) + +%%% Synthetic images. First pick some parameters: +sz = 200; +dir = 2*pi*rand(1) +slope = 10*rand(1)-5 +int = 10*rand(1)-5; +orig = round(1+(sz-1)*rand(2,1)); +expt = 0.8+rand(1) +ampl = 1+5*rand(1) +ph = 2*pi*rand(1) +per = 20 +twidth = 7 + +clf; +showIm(mkRamp(sz,dir,slope,int,orig)); +showIm(mkImpulse(sz,orig,ampl)); +showIm(mkR(sz,expt,orig)); +showIm(mkAngle(sz,dir)); +showIm(mkDisc(sz,sz/4,orig,twidth)); +showIm(mkGaussian(sz,(sz/6)^2,orig,ampl)); +showIm(mkZonePlate(sz,ampl,ph)); +showIm(mkAngularSine(sz,3,ampl,ph,orig)); +showIm(mkSine(sz,per,dir,ampl,ph,orig)); +showIm(mkSquare(sz,per,dir,ampl,ph,orig,twidth)); +showIm(mkFract(sz,expt)); + + +%%% Point operations (lookup tables): +[Xtbl,Ytbl] = rcosFn(20, 25, [-1 1]); +plot(Xtbl,Ytbl); +showIm(pointOp(mkR(100,1,[70,30]), Ytbl, Xtbl(1), Xtbl(2)-Xtbl(1), 0)); + + +%%% histogram Modification/matching: +[N,X] = histo(im, 150); +[mn, mx] = range2(im); +matched = histoMatch(rand(size(im)), N, X); +showIm(im + sqrt(-1)*matched); +[Nm,Xm] = histo(matched,150); +nextFig(2,1); + subplot(1,2,1); plot(X,N); axis([mn mx 0 max(N)]); + subplot(1,2,2); plot(Xm,Nm); axis([mn mx 0 max(N)]); +nextFig(2,-1); + +%%% Convolution routines: + +%% Compare speed of convolution/downsampling routines: +noise = rand(400); filt = rand(10); +tic; res1 = corrDn(noise,filt(10:-1:1,10:-1:1),'reflect1',[2 2]); toc; +tic; ires = rconv2(noise,filt); res2 = ires(1:2:400,1:2:400); toc; +imStats(res1,res2) + +%% Display image and extension of left and top boundaries: +fsz = [9 9]; +fmid = ceil((fsz+1)/2); +imsz = [16 16]; + +% pick one: +im = eye(imsz); +im = mkRamp(imsz,pi/6); +im = mkSquare(imsz,6,pi/6); + +% pick one: +edges='reflect1'; +edges='reflect2'; +edges='repeat'; +edges='extend'; +edges='zero'; +edges='circular'; +edges='dont-compute'; + +filt = mkImpulse(fsz,[1 1]); +showIm(corrDn(im,filt,edges)); +line([0,0,imsz(2),imsz(2),0]+fmid(2)-0.5, ... + [0,imsz(1),imsz(1),0,0]+fmid(1)-0.5); +title(sprintf('Edges = %s',edges)); + +%%% Multi-scale pyramids (see pyramids.m for more examples, +%%% and explanations): + +%% A Laplacian pyramid: +[pyr,pind] = buildLpyr(im); +showLpyr(pyr,pind); + +res = reconLpyr(pyr, pind); % full reconstruction +imStats(im,res); % essentially perfect + +res = reconLpyr(pyr, pind, [2 3]); %reconstruct 2nd and 3rd levels only +showIm(res); + +%% Wavelet/QMF pyramids: +filt = 'qmf9'; edges = 'reflect1'; +filt = 'haar'; edges = 'qreflect2'; +filt = 'qmf12'; edges = 'qreflect2'; +filt = 'daub3'; edges = 'circular'; + +[pyr,pind] = buildWpyr(im, 5-imSubSample, filt, edges); +showWpyr(pyr,pind,'auto2'); + +res = reconWpyr(pyr, pind, filt, edges); +clf; showIm(im + i*res); +imStats(im,res); + +res = reconWpyr(pyr, pind, filt, edges, 'all', [2]); %vertical only +clf; showIm(res); + +%% Steerable pyramid: +[pyr,pind] = buildSpyr(im,4-imSubSample,'sp3Filters'); +showSpyr(pyr,pind); + +%% Steerable pyramid, constructed in frequency domain: +[pyr,pind] = buildSFpyr(im,5-imSubSample,4); %5 orientation bands +showSpyr(pyr,pind); +res = reconSFpyr(pyr,pind); +imStats(im,res); -- cgit v1.2.2