我有两个立体摄像机,我从左摄像机和右摄像机捕捉到了标记的图像。
我有一个完美的校准
1.内在的
1.失真校正
1.外在的
现在到了标记,我在黑板上有一组标记,我估计了它的姿态。而且,我基于三角形3D点计算了每个标记的3D点
cv::triangulatePoints(Projection_Matrix_L[o], Projection_Matrix_R[o], pointsMat1, pointsMat2, pnts3D);
然后我知道相机中心(CL_O)
CL_O = -Rotation_matrix.inv * translation
主要是(0,0,0)
对于另一个摄像机视图也是如此。为了简单起见,让我们只使用一个。
我假设下面的等式应该根据lambda(λ)计算直线上的点
line(λ) = CL_O + λ*t
CL_O, is a 3D point say (x0, y0, z0)
t, is a Vector (a, b, c)
有了正确的(λ)值,结果将是一个3D点,比如Q。但它仍然不接近标记点P。所以我需要计算点P和Q之间的最小距离。
问题-我应该如何确定每个3D标记点的λ,以便它给我一个接近P的3D点Q,误差最小。我不知道下面的公式是否正确?
f(λ) = abs(Point P - line(λ))
如果你认为它是正确的,我需要帮助与示例代码/伪代码来实现它(最好是C++或Python)。
尽管我已经写了上面的内容,但我仍然觉得还缺少一些东西。请把这些点连起来,告诉我如何进行。
2条答案
按热度按时间ssm49v7z1#
我曾经做过一个类似的问题,用java有时候它的算法可以帮到你
查看https://github.com/sreeragrnandan/JAVA-ASSIGNMENT/blob/master/Mdis.java
iaqfqrcu2#
我把你的问题理解为:你想找到t-矢量P的方向分量
lambda
(在特定的相机坐标系上)。如果是这样的话,
lambda
可以简单地用P和t之间的内积计算单位方向向量:lambda
= inner_product(P,t),其中,|我的天|=1