Hi,
I have images from two cameras (left and right). First I calibrate cameras and I get cameras matrices, distortion coefficients and projection matrices.
On images I detect marker and save it positions on left and right image. Next I use cv::triangulatePoints but I get really strange result (I use other library that also allows to get that 3D coords and it shows more likely results).
Here is my code:
int size0 = m_history.getSize(0);
int size1 = m_history.getSize(1);
if(size0 != size1)
{
setInfo(tr("Cannot calculate triangulation: number of marker positions is different on left and right camera"));
return false;
}
if(size0 <= 0)
{
setInfo(tr("No marker postion saved. Cannot calc triangulation."));
return false;
}
cv::Mat pointsMat1(2, 1, CV_64F);
cv::Mat pointsMat2(2, 1, CV_64F);
for(int i = 0; i < size0; i++)
{
cv::Point pt1 = m_history.getOriginalPoint(0, i);
cv::Point pt2 = m_history.getOriginalPoint(1, i);
pointsMat1.at<double>(0,0) = pt1.y;
pointsMat1.at<double>(1,0) = pt1.y;
pointsMat2.at<double>(0,0) = pt2.x;
pointsMat2.at<double>(1,0) = pt2.y;
cv::Mat pnts3D(4, 1, CV_32F);
cv::triangulatePoints(m_projectionMat1, m_projectionMat2, pointsMat1, pointsMat2, pnts3D);
CvPoint3D64f point3D;
point3D.x = pnts3D.at<double>(0, 0);
point3D.y = pnts3D.at<double>(1, 0);
point3D.z = pnts3D.at<double>(2, 0);
point3D.x = point3D.x/pnts3D.at<double>(3, 0);
point3D.y = point3D.y/pnts3D.at<double>(3, 0);
point3D.z = point3D.z/pnts3D.at<double>(3, 0);
m_history.addTriangulatedPoint(point3D);
}
Where I do mistake?
Results from triangulation:
3D_X 3D_Y 3D_Z
-5.50886e+23 -1.72188e+23 -2.74134e+24
1.45956e+23 -4.99296e+22 7.09517e+23
-1.54104e+23 1.59429e+23 -7.24014e+23
-6.51269e+22 1.10959e+23 -2.96057e+23
3.34095e+21 -7.89224e+21 1.47103e+22
-5.9235e+22 1.15083e+23 -2.63574e+23
-1.97861e+23 2.57096e+23 -9.19323e+23
2.70618e+24 -1.65746e+24 1.30049e+25
-8.69261e+23 -7.53462e+22 -4.27505e+24
-7.2011e+23 -3.12814e+23 -5.17617e+24
And from other library (it seems quite correct):
3D_X 3D_Y 3D_Z
8.33399 4.74962 62.6119
8.33243 -1.62743 60.8669
8.40008 -8.43666 59.5643
8.47287 -15.1735 58.3184
8.52143 -21.964 57.0896
8.4673 -17.6672 57.6249
8.31039 -10.9452 58.6376
8.39497 -4.27203 60.6766
8.37444 2.56077 62.3287
5.41351 4.73769 62.7424