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 --- SD-VBS/benchmarks/disparity/src/c/computeSAD.c | 27 +++++ .../benchmarks/disparity/src/c/correlateSAD_2D.c | 34 ++++++ SD-VBS/benchmarks/disparity/src/c/disparity.h | 24 ++++ SD-VBS/benchmarks/disparity/src/c/finalSAD.c | 28 +++++ SD-VBS/benchmarks/disparity/src/c/findDisparity.c | 29 +++++ SD-VBS/benchmarks/disparity/src/c/getDisparity.c | 43 +++++++ .../benchmarks/disparity/src/c/integralImage2D2D.c | 31 +++++ SD-VBS/benchmarks/disparity/src/c/padarray2.c | 33 ++++++ SD-VBS/benchmarks/disparity/src/c/padarray4.c | 41 +++++++ .../benchmarks/disparity/src/c/script_disparity.c | 132 +++++++++++++++++++++ .../benchmarks/disparity/src/matlab/getDisparity.m | 54 +++++++++ .../disparity/src/matlab/refineDisparity.m | 31 +++++ .../disparity/src/matlab/script_run_profile.m | 43 +++++++ 13 files changed, 550 insertions(+) create mode 100644 SD-VBS/benchmarks/disparity/src/c/computeSAD.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/disparity.h create mode 100644 SD-VBS/benchmarks/disparity/src/c/finalSAD.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/findDisparity.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/getDisparity.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/padarray2.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/padarray4.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/script_disparity.c 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') diff --git a/SD-VBS/benchmarks/disparity/src/c/computeSAD.c b/SD-VBS/benchmarks/disparity/src/c/computeSAD.c new file mode 100644 index 0000000..e12bd55 --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/c/computeSAD.c @@ -0,0 +1,27 @@ +/******************************** +Author: Sravanthi Kota Venkata +********************************/ + +#include +#include +#include "disparity.h" + +void computeSAD(I2D *Ileft, I2D* Iright_moved, F2D* SAD) +{ + int rows, cols, i, j, diff; + + rows = Ileft->height; + cols = Ileft->width; + + for(i=0; i +#include +#include "disparity.h" + +void correlateSAD_2D(I2D* Ileft, I2D* Iright, I2D* Iright_moved, int win_sz, int disparity, F2D* SAD, F2D* integralImg, F2D* retSAD, I2D* range) +{ + int rows, cols; + int i, j, endRM; + //I2D *range; + + //iResetArray(range,1,2,0); + subsref(range,0,0) = 0; + subsref(range,0,1) = disparity; + + rows = Iright_moved->height; + cols = Iright_moved->width; + + for(i=0; i +#include +#include "disparity.h" + +void finalSAD(F2D* integralImg, int win_sz, F2D* retSAD) +{ + int endR, endC; + int i, j, k; + + endR = integralImg->height; + endC = integralImg->width; + + k = 0; + for(j=0; j<(endC-win_sz); j++) + { + for(i=0; i<(endR-win_sz); i++) + { + subsref(retSAD,i,j) = subsref(integralImg,(win_sz+i),(j+win_sz)) + subsref(integralImg,(i+1) ,(j+1)) - subsref(integralImg,(i+1),(j+win_sz)) - subsref(integralImg,(win_sz+i),(j+1)); + } + } + + return; +} + diff --git a/SD-VBS/benchmarks/disparity/src/c/findDisparity.c b/SD-VBS/benchmarks/disparity/src/c/findDisparity.c new file mode 100644 index 0000000..6335daf --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/c/findDisparity.c @@ -0,0 +1,29 @@ +/******************************** +Author: Sravanthi Kota Venkata +********************************/ + +#include +#include +#include "disparity.h" + +void findDisparity(F2D* retSAD, F2D* minSAD, I2D* retDisp, int level, int nr, int nc) +{ + int i, j, a, b; + + for(i=0; i +#include +#include "disparity.h" + +I2D* getDisparity(I2D* Ileft, I2D* Iright, int win_sz, int max_shift, + I2D* minSAD, I2D* retDisp, I2D* halfWin, + I2D* IrightPadded, I2D* IleftPadded, I2D* Iright_moved, + F2D* retSAD, F2D* SAD, F2D* integralImg, + I2D* range) +{ + int nr, nc, k; + int half_win_sz, rows, cols; + + nr = Ileft->height; + nc = Ileft->width; + half_win_sz=win_sz/2; + + + fResetArray(minSAD, nr, nc, 255.0*255.0); + iResetArray(retDisp, nr, nc,max_shift); + iResetArray(halfWin, 1,2,half_win_sz); + + rows = IleftPadded->height; + cols = IleftPadded->width; + fResetArray(SAD, rows, cols,255); + fResetArray(integralImg, rows, cols,0); + //fResetArray(retSAD,rows-win_sz, cols-win_sz, 0); + iResetArray(Iright_moved, rows, cols, 0); + + for( k=0; k +#include +#include "disparity.h" + +void integralImage2D2D(F2D* SAD, F2D* integralImg) +{ + int nr, nc, i, j; + + nr = SAD->height; + nc = SAD->width; + + for(i=0; i +#include +#include "disparity.h" + +I2D* padarray2(I2D* inMat, I2D* borderMat) +{ + int rows, cols, bRows, bCols, newRows, newCols; + I2D *paddedArray; + int i, j; + + rows = inMat->height; + cols = inMat->width; + + bRows = borderMat->data[0]; + bCols = borderMat->data[1]; + + newRows = rows + bRows*2; + newCols = cols + bCols*2; + + paddedArray = iSetArray(newRows, newCols, 0); + + for(i=0; i +#include +#include +#include "disparity.h" + +void padarray4(I2D* inMat, I2D* borderMat, int dir, I2D* paddedArray) +{ + int rows, cols, bRows, bCols, newRows, newCols; + int i, j; + int adir; + + adir = abs(dir); + rows = inMat->height; + cols = inMat->width; + + bRows = borderMat->data[0]; + bCols = borderMat->data[1]; + + newRows = rows + bRows; + newCols = cols + bCols; + + if(dir ==1) + { + for(i=0; i +#include +#include "disparity.h" +#include +#include "extra.h" +#define DISPARITY_MEM 1<<24 +int main(int argc, char* argv[]) +{ + SET_UP + mallopt(M_TOP_PAD, DISPARITY_MEM); + mallopt(M_MMAP_MAX, 0); + int rows = 32; + int cols = 32; + I2D *imleft, *imright; + volatile I2D* retDisparity; + I2D *IrightPadded, *IleftPadded, *Iright_moved; + I2D *retDisp, *halfWin; + I2D *range; + F2D *retSAD, *minSAD, *SAD, *integralImg; + unsigned int *start, *endC, *elapsed; + + int i, j; + char im1[100], im2[100], timFile[100]; + int WIN_SZ=8, SHIFT=64; + FILE* fp; + + printf("Image 1: "); + scanf("%s", im1); + printf("Image 2: "); + scanf("%s", im2); +#ifdef CHECK + char checkFile[100] = "./expected_C.txt"; +#endif + imleft = readImage(im1); + imright = readImage(im2); + + rows = imleft->height; + cols = imleft->width; + +#ifdef test + WIN_SZ = 2; + SHIFT = 1; +#endif +#ifdef sim_fast + WIN_SZ = 4; + SHIFT = 4; +#endif +#ifdef sim + WIN_SZ = 4; + SHIFT = 8; +#endif + + + int nr, nc, k; + int half_win_sz; + nr = imleft->height; + nc = imleft->width; + half_win_sz = WIN_SZ / 2; + + minSAD = fSetArray(nr, nc, 255.0*255.0); + retDisp = iSetArray(nr, nc, SHIFT); + halfWin = iSetArray(1,2,half_win_sz); + + + if(WIN_SZ > 1) + { + IleftPadded = padarray2(imleft, halfWin); + IrightPadded = padarray2(imright, halfWin); + } + else + { + IleftPadded = imleft; + IrightPadded = imright; + } + + int paddedRows, paddedCols; + paddedRows = IleftPadded->height; + paddedCols = IleftPadded->width; + SAD = fSetArray(paddedRows, paddedCols,255); + integralImg = fSetArray(paddedRows, paddedCols,0); + retSAD = fMallocHandle(paddedRows- WIN_SZ, paddedCols - WIN_SZ); + Iright_moved = iSetArray(paddedRows, paddedCols, 0); + + range = iMallocHandle(1, 2); + printf("starting..\n"); + for_each_job{ + retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT, + minSAD, retDisp, halfWin, + IrightPadded, IleftPadded, Iright_moved, + retSAD, SAD, integralImg, + range); + } + printf("ending\n"); + +#ifdef CHECK + /** Self checking - use expected.txt from data directory **/ + { + int tol, ret=0; + tol = 2; +#ifdef GENERATE_OUTPUT + writeMatrix(retDisparity, argv[1]); +#endif + ret = selfCheck(retDisparity, checkFile, tol); + if (ret == -1) + printf("Error in Disparity Map\n"); + } + /** Self checking done **/ +#endif + + //end of benchmark + fFreeHandle(minSAD); + fFreeHandle(SAD); + fFreeHandle(integralImg); + iFreeHandle(IrightPadded); + iFreeHandle(IleftPadded); + iFreeHandle(Iright_moved); + fFreeHandle(retSAD); + iFreeHandle(imleft); + iFreeHandle(imright); + iFreeHandle(retDisparity); + iFreeHandle(halfWin); + iFreeHandle(range); + free(start); + free(endC); + free(elapsed); + WRITE_TO_FILE; + return 0; +} 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