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
129
130
131
132
|
/********************************
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;
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;
}
|