summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/disparity/src
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/benchmarks/disparity/src')
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/computeSAD.c27
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c34
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/disparity.h24
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/finalSAD.c28
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/findDisparity.c29
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/getDisparity.c43
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c31
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/padarray2.c33
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/padarray4.c41
-rw-r--r--SD-VBS/benchmarks/disparity/src/c/script_disparity.c132
-rwxr-xr-xSD-VBS/benchmarks/disparity/src/matlab/getDisparity.m54
-rwxr-xr-xSD-VBS/benchmarks/disparity/src/matlab/refineDisparity.m31
-rwxr-xr-xSD-VBS/benchmarks/disparity/src/matlab/script_run_profile.m43
13 files changed, 550 insertions, 0 deletions
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 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9void computeSAD(I2D *Ileft, I2D* Iright_moved, F2D* SAD)
10{
11 int rows, cols, i, j, diff;
12
13 rows = Ileft->height;
14 cols = Ileft->width;
15
16 for(i=0; i<rows; i++)
17 {
18 for(j=0; j<cols; j++)
19 {
20 diff = subsref(Ileft,i,j) - subsref(Iright_moved,i,j);
21 subsref(SAD,i,j) = diff * diff;
22 }
23 }
24
25 return;
26}
27
diff --git a/SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c b/SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c
new file mode 100644
index 0000000..6b43cbd
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c
@@ -0,0 +1,34 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9void correlateSAD_2D(I2D* Ileft, I2D* Iright, I2D* Iright_moved, int win_sz, int disparity, F2D* SAD, F2D* integralImg, F2D* retSAD, I2D* range)
10{
11 int rows, cols;
12 int i, j, endRM;
13 //I2D *range;
14
15 //iResetArray(range,1,2,0);
16 subsref(range,0,0) = 0;
17 subsref(range,0,1) = disparity;
18
19 rows = Iright_moved->height;
20 cols = Iright_moved->width;
21
22 for(i=0; i<rows*cols; i++)
23 asubsref(Iright_moved,i) = 0;
24
25 padarray4(Iright, range, -1, Iright_moved);
26
27 computeSAD(Ileft, Iright_moved, SAD);
28 integralImage2D2D(SAD, integralImg);
29 finalSAD(integralImg, win_sz, retSAD);
30
31 //iFreeHandle(range);
32 return;
33}
34
diff --git a/SD-VBS/benchmarks/disparity/src/c/disparity.h b/SD-VBS/benchmarks/disparity/src/c/disparity.h
new file mode 100644
index 0000000..8617a87
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/disparity.h
@@ -0,0 +1,24 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#ifndef _DISP_
6#define _DISP_
7
8#include "sdvbs_common.h"
9void computeSAD(I2D *Ileft, I2D* Iright_moved, F2D* SAD);
10I2D* getDisparity(I2D* Ileft, I2D* Iright, int win_sz, int max_shift,
11 I2D* minSAD, I2D* retDisp, I2D* halfWin,
12 I2D* IrightPadded, I2D* IleftPadded, I2D* Iright_moved,
13 F2D* retSAD, F2D* SAD, F2D* integralImg,
14 I2D* range);
15void finalSAD(F2D* integralImg, int win_sz, F2D* retSAD);
16void findDisparity(F2D* retSAD, F2D* minSAD, I2D* retDisp, int level, int nr, int nc);
17void integralImage2D2D(F2D* SAD, F2D* integralImg);
18void correlateSAD_2D(I2D* Ileft, I2D* Iright, I2D* Iright_moved, int win_sz, int disparity, F2D* SAD, F2D* integralImg, F2D* retSAD, I2D* range);
19I2D* padarray2(I2D* inMat, I2D* borderMat);
20void padarray4(I2D* inMat, I2D* borderMat, int dir, I2D* paddedArray);
21
22#endif
23
24
diff --git a/SD-VBS/benchmarks/disparity/src/c/finalSAD.c b/SD-VBS/benchmarks/disparity/src/c/finalSAD.c
new file mode 100644
index 0000000..8155820
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/finalSAD.c
@@ -0,0 +1,28 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9void finalSAD(F2D* integralImg, int win_sz, F2D* retSAD)
10{
11 int endR, endC;
12 int i, j, k;
13
14 endR = integralImg->height;
15 endC = integralImg->width;
16
17 k = 0;
18 for(j=0; j<(endC-win_sz); j++)
19 {
20 for(i=0; i<(endR-win_sz); i++)
21 {
22 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));
23 }
24 }
25
26 return;
27}
28
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 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9void findDisparity(F2D* retSAD, F2D* minSAD, I2D* retDisp, int level, int nr, int nc)
10{
11 int i, j, a, b;
12
13 for(i=0; i<nr; i++)
14 {
15 for(j=0; j<nc; j++)
16 {
17 a = subsref(retSAD,i,j);
18 b = subsref(minSAD,i,j);
19 if(a<b)
20 {
21 subsref(minSAD,i,j) = a;
22 subsref(retDisp,i,j) = level;
23 }
24 }
25 }
26 return;
27}
28
29
diff --git a/SD-VBS/benchmarks/disparity/src/c/getDisparity.c b/SD-VBS/benchmarks/disparity/src/c/getDisparity.c
new file mode 100644
index 0000000..3246e97
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/getDisparity.c
@@ -0,0 +1,43 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9I2D* getDisparity(I2D* Ileft, I2D* Iright, int win_sz, int max_shift,
10 I2D* minSAD, I2D* retDisp, I2D* halfWin,
11 I2D* IrightPadded, I2D* IleftPadded, I2D* Iright_moved,
12 F2D* retSAD, F2D* SAD, F2D* integralImg,
13 I2D* range)
14{
15 int nr, nc, k;
16 int half_win_sz, rows, cols;
17
18 nr = Ileft->height;
19 nc = Ileft->width;
20 half_win_sz=win_sz/2;
21
22
23 fResetArray(minSAD, nr, nc, 255.0*255.0);
24 iResetArray(retDisp, nr, nc,max_shift);
25 iResetArray(halfWin, 1,2,half_win_sz);
26
27 rows = IleftPadded->height;
28 cols = IleftPadded->width;
29 fResetArray(SAD, rows, cols,255);
30 fResetArray(integralImg, rows, cols,0);
31 //fResetArray(retSAD,rows-win_sz, cols-win_sz, 0);
32 iResetArray(Iright_moved, rows, cols, 0);
33
34 for( k=0; k<max_shift; k++)
35 {
36 correlateSAD_2D(IleftPadded, IrightPadded, Iright_moved, win_sz, k, SAD, integralImg, retSAD, range);
37 findDisparity(retSAD, minSAD, retDisp, k, nr, nc);
38 }
39
40
41 return retDisp;
42}
43
diff --git a/SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c b/SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c
new file mode 100644
index 0000000..cc964d1
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c
@@ -0,0 +1,31 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9void integralImage2D2D(F2D* SAD, F2D* integralImg)
10{
11 int nr, nc, i, j;
12
13 nr = SAD->height;
14 nc = SAD->width;
15
16 for(i=0; i<nc; i++)
17 subsref(integralImg,0,i) = subsref(SAD,0,i);
18
19 for(i=1; i<nr; i++)
20 for(j=0; j<nc; j++)
21 {
22 subsref(integralImg,i,j) = subsref(integralImg, (i-1), j) + subsref(SAD,i,j);
23 }
24
25 for(i=0; i<nr; i++)
26 for(j=1; j<nc; j++)
27 subsref(integralImg,i,j) = subsref(integralImg, i, (j-1)) + subsref(integralImg,i,j);
28
29 return;
30
31}
diff --git a/SD-VBS/benchmarks/disparity/src/c/padarray2.c b/SD-VBS/benchmarks/disparity/src/c/padarray2.c
new file mode 100644
index 0000000..49f1938
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/padarray2.c
@@ -0,0 +1,33 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8
9I2D* padarray2(I2D* inMat, I2D* borderMat)
10{
11 int rows, cols, bRows, bCols, newRows, newCols;
12 I2D *paddedArray;
13 int i, j;
14
15 rows = inMat->height;
16 cols = inMat->width;
17
18 bRows = borderMat->data[0];
19 bCols = borderMat->data[1];
20
21 newRows = rows + bRows*2;
22 newCols = cols + bCols*2;
23
24 paddedArray = iSetArray(newRows, newCols, 0);
25
26 for(i=0; i<rows; i++)
27 for(j=0; j<cols; j++)
28 subsref(paddedArray, (bRows+i), (bCols+j)) = subsref(inMat, i, j);
29
30 return paddedArray;
31
32}
33
diff --git a/SD-VBS/benchmarks/disparity/src/c/padarray4.c b/SD-VBS/benchmarks/disparity/src/c/padarray4.c
new file mode 100644
index 0000000..321cad9
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/padarray4.c
@@ -0,0 +1,41 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <math.h>
8#include "disparity.h"
9
10void padarray4(I2D* inMat, I2D* borderMat, int dir, I2D* paddedArray)
11{
12 int rows, cols, bRows, bCols, newRows, newCols;
13 int i, j;
14 int adir;
15
16 adir = abs(dir);
17 rows = inMat->height;
18 cols = inMat->width;
19
20 bRows = borderMat->data[0];
21 bCols = borderMat->data[1];
22
23 newRows = rows + bRows;
24 newCols = cols + bCols;
25
26 if(dir ==1)
27 {
28 for(i=0; i<rows; i++)
29 for(j=0; j<cols; j++)
30 subsref(paddedArray, i, j) = subsref(inMat,i,j);
31 }
32 else
33 {
34 for(i=0; i<rows-bRows; i++)
35 for(j=0; j<cols-bCols; j++)
36 subsref(paddedArray, (bRows+i), (bCols+j)) = subsref(inMat,i,j);
37 }
38
39 return;
40}
41
diff --git a/SD-VBS/benchmarks/disparity/src/c/script_disparity.c b/SD-VBS/benchmarks/disparity/src/c/script_disparity.c
new file mode 100644
index 0000000..431c02c
--- /dev/null
+++ b/SD-VBS/benchmarks/disparity/src/c/script_disparity.c
@@ -0,0 +1,132 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "disparity.h"
8#include <malloc.h>
9#include "extra.h"
10#define DISPARITY_MEM 1<<24
11int main(int argc, char* argv[])
12{
13 SET_UP
14 mallopt(M_TOP_PAD, DISPARITY_MEM);
15 mallopt(M_MMAP_MAX, 0);
16 int rows = 32;
17 int cols = 32;
18 I2D *imleft, *imright;
19 volatile I2D* retDisparity;
20 I2D *IrightPadded, *IleftPadded, *Iright_moved;
21 I2D *retDisp, *halfWin;
22 I2D *range;
23 F2D *retSAD, *minSAD, *SAD, *integralImg;
24 unsigned int *start, *endC, *elapsed;
25
26 int i, j;
27 char im1[100], im2[100], timFile[100];
28 int WIN_SZ=8, SHIFT=64;
29 FILE* fp;
30
31 printf("Image 1: ");
32 scanf("%s", im1);
33 printf("Image 2: ");
34 scanf("%s", im2);
35#ifdef CHECK
36 char checkFile[100] = "./expected_C.txt";
37#endif
38 imleft = readImage(im1);
39 imright = readImage(im2);
40
41 rows = imleft->height;
42 cols = imleft->width;
43
44#ifdef test
45 WIN_SZ = 2;
46 SHIFT = 1;
47#endif
48#ifdef sim_fast
49 WIN_SZ = 4;
50 SHIFT = 4;
51#endif
52#ifdef sim
53 WIN_SZ = 4;
54 SHIFT = 8;
55#endif
56
57
58 int nr, nc, k;
59 int half_win_sz;
60 nr = imleft->height;
61 nc = imleft->width;
62 half_win_sz = WIN_SZ / 2;
63
64 minSAD = fSetArray(nr, nc, 255.0*255.0);
65 retDisp = iSetArray(nr, nc, SHIFT);
66 halfWin = iSetArray(1,2,half_win_sz);
67
68
69 if(WIN_SZ > 1)
70 {
71 IleftPadded = padarray2(imleft, halfWin);
72 IrightPadded = padarray2(imright, halfWin);
73 }
74 else
75 {
76 IleftPadded = imleft;
77 IrightPadded = imright;
78 }
79
80 int paddedRows, paddedCols;
81 paddedRows = IleftPadded->height;
82 paddedCols = IleftPadded->width;
83 SAD = fSetArray(paddedRows, paddedCols,255);
84 integralImg = fSetArray(paddedRows, paddedCols,0);
85 retSAD = fMallocHandle(paddedRows- WIN_SZ, paddedCols - WIN_SZ);
86 Iright_moved = iSetArray(paddedRows, paddedCols, 0);
87
88 range = iMallocHandle(1, 2);
89 printf("starting..\n");
90 for_each_job{
91 retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT,
92 minSAD, retDisp, halfWin,
93 IrightPadded, IleftPadded, Iright_moved,
94 retSAD, SAD, integralImg,
95 range);
96 }
97 printf("ending\n");
98
99#ifdef CHECK
100 /** Self checking - use expected.txt from data directory **/
101 {
102 int tol, ret=0;
103 tol = 2;
104#ifdef GENERATE_OUTPUT
105 writeMatrix(retDisparity, argv[1]);
106#endif
107 ret = selfCheck(retDisparity, checkFile, tol);
108 if (ret == -1)
109 printf("Error in Disparity Map\n");
110 }
111 /** Self checking done **/
112#endif
113
114 //end of benchmark
115 fFreeHandle(minSAD);
116 fFreeHandle(SAD);
117 fFreeHandle(integralImg);
118 iFreeHandle(IrightPadded);
119 iFreeHandle(IleftPadded);
120 iFreeHandle(Iright_moved);
121 fFreeHandle(retSAD);
122 iFreeHandle(imleft);
123 iFreeHandle(imright);
124 iFreeHandle(retDisparity);
125 iFreeHandle(halfWin);
126 iFreeHandle(range);
127 free(start);
128 free(endC);
129 free(elapsed);
130 WRITE_TO_FILE;
131 return 0;
132}
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 @@
1function [retDisparity retSAD minSAD]=getDisparity(Ileft, Iright, win_sz, max_shift)
2Ileft=double(Ileft);
3Iright=double(Iright);
4[nr,nc,nb]=size(Ileft);
5retSAD=zeros(nr, nc, max_shift);
6
7if(win_sz > 1)
8 half_win_sz=win_sz/2;
9 IleftPadded=padarray(Ileft, [half_win_sz, half_win_sz]);
10 IrightPadded=padarray(Iright, [half_win_sz, half_win_sz]);
11 for i=1:max_shift
12 retSAD(:,:,i)=correlateSAD(IleftPadded,IrightPadded, win_sz, i-1);
13 end
14 [minSAD retDisparity]=min(retSAD,[],3);
15else
16 IleftPadded = Ileft;
17 IrightPadded = Iright;
18 retSAD=correlateSAD(IleftPadded,IrightPadded, win_sz, 0);
19 [minSAD retDisparity]=min(retSAD,[],3);
20end
21end
22
23function retSAD=correlateSAD(Ileft, Iright, win_sz, disparity)
24
25Iright_moved=padarray(Iright, [0,disparity], 'pre');
26Iright_moved=Iright_moved(:, 1:end-disparity,:);
27
28[rows, cols] = size(Ileft);
29for i=1:rows
30 for j=1:cols
31 diff = Ileft(i,j) - Iright_moved(i,j);
32 SAD(i,j) = diff * diff;
33 end
34end
35
36%2D scan.
37integralImg=integralImage2D(SAD);
38retSAD=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,:);
39
40end
41
42function retImg=integralImage2D(I)
43[nr,nc,nb]=size(I);
44retImg=zeros(nr,nc,nb);
45retImg(1,:,:)=I(1,:,:);
46for i=2:nr
47 retImg(i,:,:)=retImg(i-1,:,:)+I(i,:,:);
48end
49%vtuneResumeMex;
50for j=2:nc
51 retImg(:,j,:)=retImg(:,j-1,:)+retImg (:,j,:);
52end
53%vtunePauseMex;
54end
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 @@
1function retDisparity=refineDisparity(Idisp, DispSAD, Ileft, Iright)
2[nr nc ndist]=size(DispSAD);
3retDisparity=zeros(nr, nc);
4
5IdispNext=padarray(Idisp, [0 1], 'replicate', 'post');
6IdispNext=IdispNext(:,2:end);
7
8
9IdispDiff=abs(Idisp-IdispNext);
10idx=find(IdispDiff>1);
11[idxI idxJ]=ind2sub([nr, nc], idx);
12
13%if(Idisp(idx)
14%sideFlag=
15checkedResult= (abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx))) - ...
16DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx))) ) < 1 )+1;
17checkedResult= checkedResult + (abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx+nr))) - ...
18DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx+nr))) ) < 1 );
19retDisparity(idx)=checkedResult;
20
21
22% IdispDiff=(Idisp-IdispNext);
23% idx=find(IdispDiff<-1);
24% [idxI idxJ]=ind2sub([nr, nc], idx);
25%
26% checkedResult= abs( DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ, Idisp(idx+nr))) - ...
27% DispSAD(sub2ind( [nr, nc, ndist], idxI, idxJ+1, Idisp(idx+nr))) ) < 0.5;
28% retDisparity(idx)=checkedResult;
29
30
31
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 @@
1function script_run_profile(dataDir, resultDir, type, common, tooldir)
2
3path(path,common);
4
5tol = 2;
6elapsed = [0, 0];
7
8WIN_SZ = 8;
9SHIFT = 64;
10
11if(strcmp(type,'test'))
12 WIN_SZ = 2;
13 SHIFT = 1;
14elseif(strcmp(type, 'sim_fast'))
15 WIN_SZ = 4;
16 SHIFT = 4;
17elseif(strcmp(type,'sim'))
18 WIN_SZ = 4;
19 SHIFT = 8;
20end
21
22 outFile = [resultDir, '/', 'out', '.bmp'];
23
24 file = [dataDir, '/1.bmp'];
25 imleft = readImage(file);
26 imright = readImage([dataDir, '/2.bmp']);
27 [rows, cols] = size(imright);
28
29 fprintf(1,'Input size\t\t- (%dx%d)\n', rows, cols);
30
31 start = photonStartTiming;
32 [imDispOwn, DispSAD, minSAD]=getDisparity(double(imleft), double(imright), WIN_SZ, SHIFT);
33 stop = photonEndTiming;
34 elapsed = photonReportTiming(start, stop);
35
36 writeMatrix(imDispOwn, dataDir);
37 imwrite(uint8(minSAD), outFile, 'bmp');
38
39 photonPrintTiming(elapsed);
40
41
42
43