回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><em><strong>摘要</strong></em></p>
<p>我正在尝试从两张图片中对点进行三角剖分,但根本得不到准确的结果</p>
<p>详细信息</p>
<p>以下是我正在做的:</p>
<ol>
<li><p>在真实世界坐标中测量我的16个对象点</p>
</li>
<li><p>确定每个图像16个对象点的像素坐标</p>
</li>
<li><p>使用cv2.solvePnP()获取每个摄像头的TVEC和rvecs</p>
</li>
<li><p>使用cv2.projectPoints验证tvecs和rvecs是否将给定的3D点重新投影到正确的图像坐标(它确实有效)。例如:</p>
<pre><code>img_point_right = cv2.projectPoints(np.array([[0,0,39]], np.float),
right_rvecs,
right_tvecs,
right_intrinsics,
right_distortion)
</code></pre>
</li>
<li><p>验证后,使用以下公式获得旋转矩阵:</p>
<pre><code>left_rotation, jacobian = cv2.Rodrigues(left_rvecs)
right_rotation, jacobian = cv2.Rodrigues(right_rvecs)
</code></pre>
<p>然后是投影矩阵:</p>
<pre><code>RT = np.zeros((3,4))
RT[:3, :3] = left_rotation
RT[:3, 3] = left_translation.transpose()
left_projection = np.dot(left_intrinsics, RT)
RT = np.zeros((3,4))
RT[:3, :3] = right_rotation
RT[:3, 3] = right_translation.transpose()
right_projection = np.dot(right_intrinsics, RT)
</code></pre>
</li>
<li><p>在进行三角剖分之前,请使用cv2.UndortPoints取消对点的扭曲。例如:</p>
<pre><code>left_undist = cv2.undistortPoints(left_points,
cameraMatrix=left_intrinsics,
distCoeffs=left_distortion)
</code></pre>
</li>
<li><p>对这些点进行三角测量。例如:</p>
<pre><code># Transpose to get into OpenCV's 2xN format.
left_points_t = np.array(left_undist[0]).transpose()
right_points_t = np.array(right_undist[0]).transpose()
# Note, I take the 0th index of each points matrix to get rid of the extra dimension,
# although it doesn't affect the output.
triangulation = cv2.triangulatePoints(left_projection, right_projection, left_points_t, right_points_t)
homog_points = triangulation.transpose()
euclid_points = cv2.convertPointsFromHomogeneous(tri_homog)
</code></pre>
</li>
</ol>
<p>不幸的是,当我得到最后一步的输出时,我的点甚至没有一个正的Z方向,尽管我试图重现的3D点有一个正的Z位置</p>
<p>作为参考,正Z是向前的,正Y是向下的,正X是向右的</p>
<p>例如,3D点<code>(0, 0, 39)</code>——想象你前面39英尺的一个点——给出了<code>(4.47, -8.77, -44.81)</code>的三角测量输出</p>
<p><em><strong>问题</strong></em></p>
<p>这是对点进行三角测量的有效方法吗</p>
<p>如果是这样的话,cv2.triangulatePoints是否不是一种很好的方法,通过它可以对点进行三角剖分,以及对备选方案有何建议</p>
<p>谢谢你的帮助</p>