1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/********************************
Author: Sravanthi Kota Venkata
********************************/
#include <stdio.h>
#include <stdlib.h>
#include "disparity.h"
#include <malloc.h>
#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;
scanf("%s", im1);
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);
for_each_job {
retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT,
minSAD, retDisp, halfWin,
IrightPadded, IleftPadded, Iright_moved,
retSAD, SAD, integralImg,
range);
}
#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;
}
|