ign="justify"> {(int x=0; x lt; mat1.cols; x ++)
{+=mat1 lt; float gt; (y, x); +=mat2 lt; float gt; (y, x);
}
} /=mat1.rows * mat1.cols; /=mat2.rows * mat2.cols; d1=0; d2=0; c=0; (int y=0; y lt; mat1.rows; y ++)
{(int x=0; x lt; mat1.cols; x ++)
{tmp1=(mat1 lt; float gt; (y, x) - m1); tmp2=(mat2 lt; float gt; (y, x) - m2); +=tmp1 * tmp1; +=tmp2 * tmp2; +=tmp1 * tmp2;
}
}=sqrt (d1);=sqrt (d2); /=d1 * d2; c;
}
var (const Mat amp; mat)
{m=0; (int y=0; y lt; mat.rows; y ++) (int x=0; x lt; mat.cols; x ++) +=mat lt; float gt; (y, x ); /=mat.rows * mat.cols; d=0; (int y=0; y lt; mat.rows; y ++) (int x=0; x lt; mat.cols; x ++) +=(mat lt; float gt; (y, x) - m) * (mat lt; float gt; (y, x) - m); /=mat.rows * mat.cols; d;
}
getMax (const Mat amp; mat)
{d=- 100000000; (int y=0; y lt; mat.rows; y ++) (int x=0; x lt; mat.cols; x ++) (d lt; mat lt; float gt; ( y, x))=mat lt; float gt; (y, x);
return d;
}
Файл «main.cpp» (Містить основний код програми і функцію, яка будує карту стереодіспаратностей з урахуванням заданих параметрів).
#include «opencv2.h»
#include lt; stdio.h gt;
#include lt; windows.h gt;
#include «correlation.h»
makeDispMap (Mat amp; mat1, Mat amp; mat2, int x_size, int y_size, float treshold)
{res (mat1.rows, mat1.cols, CV_32FC1); (int y=y_size/2; y lt; res.rows-y_size/2-1; y ++)
{(« b b b b b b b b b b b b b b b% .2f %%», (double) (y - y_size/2)/(res.rows - 1) * 100); (int x=x_size; x lt; res.cols-x_size - 1; x ++)
{max_value=- 1; max_shift_x=0; c=0; dy=0;
//for (int dy=- y_size/2; dy lt; y_size/2; dy ++)
//{(int dx=- x_size; dx lt; 0; dx ++)
{= getCorrelationCoef ((Rect (x, y-y_size/2, x_size, y_size)), (Rect (x + dx, y-y_size/2, x_size, y_size)));
//imshow («img1», mat1 (Rect (x, y-y_size/2, x_size, y_size)));
//imshow («img2», mat2 (Rect (x + dx, y-y_size/2, x_size, y_size)));
//waitKey (1);
//printf («% d% d% f n», x, dx, c); (max_value lt; c)
{_ value=c; _shift_x=dx;
}
}
//}
//printf («% f n», max_value);
//imshow («img1», mat1 (Rect (x, y-y_size/2, x_size, y_size)));
//imshow («img2», mat2 (Rect (x + max_shift_x, y-y_size/2, x_size, y_size)));
//waitKey (1); (max_value gt; treshold) lt; float gt; (y, x)=- max_shift_x; lt; float gt; (y, x)=0;
}
//imshow («map», res); (+1);
} («map»); (« n»); res;
}
main ()
{img=imread («1.jpg», CV_LOAD_IMAGE_GRAYSCALE); img1=img (Rect (0, 0, img.cols/2, img.rows)); img2=img (Rect (img.cols/2 , 0, img.cols/2, img.rows)); mat1; mat2; .convertTo (mat2, CV_32FC1, 1./255) ;. convertTo (mat1, CV_32FC1, 1./255); («img», mat1); (0); («img», mat2); (0);
(«img»); res=makeDispMap (mat1, mat2, 20, 4, 0); (res, res, 0, 1, CV_MINMAX); («res», res); («img», mat1 );
(res, res, 0, 255, CV_MINMAX); (mat1, mat1, 0, 255, CV_MINMAX);
(«res.bmp», res);
(«left.bmp», mat1);
waitKey (0);
}