opencv 要在“多视图几何图形”中查找与另一个三维点最近的直线上的三维点,请执行以下操作:

jrcvhitl  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(108)

我有两个立体摄像机,我从左摄像机和右摄像机捕捉到了标记的图像。
我有一个完美的校准
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)。
尽管我已经写了上面的内容,但我仍然觉得还缺少一些东西。请把这些点连起来,告诉我如何进行。

ssm49v7z

ssm49v7z1#

我曾经做过一个类似的问题,用java有时候它的算法可以帮到你
查看https://github.com/sreeragrnandan/JAVA-ASSIGNMENT/blob/master/Mdis.java

iaqfqrcu

iaqfqrcu2#

我把你的问题理解为:你想找到t-矢量P的方向分量lambda(在特定的相机坐标系上)。
如果是这样的话,lambda可以简单地用Pt之间的内积计算单位方向向量:
lambda = inner_product(Pt),其中,|我的天|=1

相关问题