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 --- .../benchmarks/disparity/src/matlab/getDisparity.m | 54 ++++++++++++++++++++++ .../disparity/src/matlab/refineDisparity.m | 31 +++++++++++++ .../disparity/src/matlab/script_run_profile.m | 43 +++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100755 SD-VBS/benchmarks/disparity/src/matlab/getDisparity.m create mode 100755 SD-VBS/benchmarks/disparity/src/matlab/refineDisparity.m create mode 100755 SD-VBS/benchmarks/disparity/src/matlab/script_run_profile.m (limited to 'SD-VBS/benchmarks/disparity/src/matlab') diff --git a/SD-VBS/benchmarks/disparity/src/matlab/getDisparity.m b/SD-VBS/benchmarks/disparity/src/matlab/getDisparity.m new file mode 100755 index 0000000..db64cac --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/matlab/getDisparity.m @@ -0,0 +1,54 @@ +function [retDisparity retSAD minSAD]=getDisparity(Ileft, Iright, win_sz, max_shift) +Ileft=double(Ileft); +Iright=double(Iright); +[nr,nc,nb]=size(Ileft); +retSAD=zeros(nr, nc, max_shift); + +if(win_sz > 1) + half_win_sz=win_sz/2; + IleftPadded=padarray(Ileft, [half_win_sz, half_win_sz]); + IrightPadded=padarray(Iright, [half_win_sz, half_win_sz]); + for i=1:max_shift + retSAD(:,:,i)=correlateSAD(IleftPadded,IrightPadded, win_sz, i-1); + end + [minSAD retDisparity]=min(retSAD,[],3); +else + IleftPadded = Ileft; + IrightPadded = Iright; + retSAD=correlateSAD(IleftPadded,IrightPadded, win_sz, 0); + [minSAD retDisparity]=min(retSAD,[],3); +end +end + +function retSAD=correlateSAD(Ileft, Iright, win_sz, disparity) + +Iright_moved=padarray(Iright, [0,disparity], 'pre'); +Iright_moved=Iright_moved(:, 1:end-disparity,:); + +[rows, cols] = size(Ileft); +for i=1:rows + for j=1:cols + diff = Ileft(i,j) - Iright_moved(i,j); + SAD(i,j) = diff * diff; + end +end + +%2D scan. +integralImg=integralImage2D(SAD); +retSAD=integralImg(win_sz+1:end,win_sz+1:end,:) +integralImg(2:end-win_sz+1,2:end-win_sz+1,:)-integralImg(2:end-win_sz+1,win_sz+1:end,:)-integralImg(win_sz+1:end,2:end-win_sz+1,:); + +end + +function retImg=integralImage2D(I) +[nr,nc,nb]=size(I); +retImg=zeros(nr,nc,nb); +retImg(1,:,:)=I(1,:,:); +for i=2:nr + retImg(i,:,:)=retImg(i-1,:,:)+I(i,:,:); +end +%vtuneResumeMex; +for j=2:nc + retImg(:,j,:)=retImg(:,j-1,:)+retImg (:,j,:); +end +%vtunePauseMex; +end diff --git a/SD-VBS/benchmarks/disparity/src/matlab/refineDisparity.m b/SD-VBS/benchmarks/disparity/src/matlab/refineDisparity.m new file mode 100755 index 0000000..f303236 --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/matlab/refineDisparity.m @@ -0,0 +1,31 @@ +function retDisparity=refineDisparity(Idisp, DispSAD, Ileft, Iright) +[nr nc ndist]=size(DispSAD); +retDisparity=zeros(nr, nc); + +IdispNext=padarray(Idisp, [0 1], 'replicate', 'post'); +IdispNext=IdispNext(:,2:end); + + +IdispDiff=abs(Idisp-IdispNext); +idx=find(IdispDiff>1); +[idxI idxJ]=ind2sub([nr, nc], idx); + +%if(Idisp(idx) +%sideFlag= +checkedResult= (abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx))) - ... +DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx))) ) < 1 )+1; +checkedResult= checkedResult + (abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx+nr))) - ... +DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx+nr))) ) < 1 ); +retDisparity(idx)=checkedResult; + + +% IdispDiff=(Idisp-IdispNext); +% idx=find(IdispDiff<-1); +% [idxI idxJ]=ind2sub([nr, nc], idx); +% +% checkedResult= abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx+nr))) - ... +% DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx+nr))) ) < 0.5; +% retDisparity(idx)=checkedResult; + + + diff --git a/SD-VBS/benchmarks/disparity/src/matlab/script_run_profile.m b/SD-VBS/benchmarks/disparity/src/matlab/script_run_profile.m new file mode 100755 index 0000000..6e0386d --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/matlab/script_run_profile.m @@ -0,0 +1,43 @@ +function script_run_profile(dataDir, resultDir, type, common, tooldir) + +path(path,common); + +tol = 2; +elapsed = [0, 0]; + +WIN_SZ = 8; +SHIFT = 64; + +if(strcmp(type,'test')) + WIN_SZ = 2; + SHIFT = 1; +elseif(strcmp(type, 'sim_fast')) + WIN_SZ = 4; + SHIFT = 4; +elseif(strcmp(type,'sim')) + WIN_SZ = 4; + SHIFT = 8; +end + + outFile = [resultDir, '/', 'out', '.bmp']; + + file = [dataDir, '/1.bmp']; + imleft = readImage(file); + imright = readImage([dataDir, '/2.bmp']); + [rows, cols] = size(imright); + + fprintf(1,'Input size\t\t- (%dx%d)\n', rows, cols); + + start = photonStartTiming; + [imDispOwn, DispSAD, minSAD]=getDisparity(double(imleft), double(imright), WIN_SZ, SHIFT); + stop = photonEndTiming; + elapsed = photonReportTiming(start, stop); + + writeMatrix(imDispOwn, dataDir); + imwrite(uint8(minSAD), outFile, 'bmp'); + + photonPrintTiming(elapsed); + + + + -- cgit v1.2.2