Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 64
i
i
“MF_Tesi” — 2011/9/12 — 11:39 — page 64 — #64
i
4.3. IMPLEMENTAZIONE IN C
32
37
42
47
52
57
62
67
i
64
for(y = 0; y < left -> height; y++)
{
lineL = (uint8_t *)(left -> imageData + y * left -> widthStep);
lineR = (uint8_t *)(right -> imageData + y * right -> widthStep);
outPtr = (uint8_t *)(disp -> imageData + y * disp -> widthStep);
line = (uint8_t *)(out -> imageData + y * out -> widthStep);
//alloco la matrice
score = createMatrix(left -> width + 1);
//la inizializzo
clearMatrix(score, GAP, EGAP, left -> width + 1);
//calcolo i punteggi della riga
calculateScore(score, lineL, lineR, GAP, EGAP, left -> width + 1);
#ifdef DEBUG
printScore(score, left -> width + 1);
#endif
//costruisco il percorso
path = backtrack(score, left -> width + 1);
//aggiungo la riga alla mappa di disparità
disparity(path, outPtr, left -> width + 1);
for(i = 0; i < out -> width; i++)
{
line[i] = (uint8_t)(outPtr[i * 3 + RED] + outPtr[i * 3 + BLUE]);
}
#ifdef DEBUG
break;
#endif
}
printf("Done\nDisplaying the output.\n");
#ifdef PROF
// Stopwatch
gettimeofday (&stop, NULL);
// Misura prestazioni e output
timdiff = abs (stop.tv_sec - start.tv_sec) * 1000000L;
timdiff = timdiff - abs (stop.tv_usec - start.tv_usec);
timdiff = abs (timdiff);
printf("Intertempo dt:\t%ld usecs\n", timdiff);
#endif
cvNamedWindow("Left");
cvNamedWindow("Right");
cvNamedWindow("Disp");
cvNamedWindow("Res");
72
i
i
i
i