【问题标题】:Calculate 3D cordinates from with camera matrix and know distance使用相机矩阵计算 3D 坐标并知道距离
【发布时间】:2023-02-02 02:25:18
【问题描述】:

我一直在为这个测验问题而苦苦挣扎。这是 FSG 2022 注册测验的一部分,我不知道如何解决它

起初我以为我可以使用外部参数和内部参数来使用by Mathworksthis article 中描述的方程来计算 3D 坐标。后来我意识到相机框架中提供了到物体的距离,这意味着这可以被视为深度相机并将深度信息转换为 3d 空间,如medium.com article 中所述

this article 正在使用下面显示的公式来计算 x 和 y 坐标,与 this question 非常相似,但我无法得到正确的解决方案。

我的一个 Matlab 脚本试图解决它:

rot = eul2rotm(deg2rad([102 0 90]));
trans = [500 160 1140]' / 1000; % mm to m
t = [rot trans];


u = 795; % here was typo as pointed out by solstad.
v = 467;

cx = 636;
cy = 548;

fx = 241;
fy = 238;

z = 2100 / 1000 % mm to m

tmp_x = (u - cx) * z / fx;
tmp_y = (v - cy) * z / fy;

% attempt 1
tmp_cords = [tmp_x; tmp_y; z; 1]
linsolve(t', tmp_cords)'
% result is: 1.8913    1.8319   -0.4292

% attempt 2
tmp_cords = [tmp_x; tmp_y; z]
rot * tmp_cords + trans
% result is: 2.2661    1.9518    0.4253

如果可能的话,我希望看到计算过程而不是任何一种 python 代码。 正确答案在图片下方。

主办方提供的正确解分别为2.030、1.272、0.228 m

【问题讨论】:

    标签: matlab image-processing point-clouds depth-camera


    【解决方案1】:

    您在“正确答案”图像中的错字 u=75u=795

    【讨论】:

    • 是的,你是对的。我输入了 Matlab 代码。不幸的是,它没有解决问题。最后的答案还是错的。我已经更新了原始问题以修复错字
    • 我不清楚 eul2rotm 是否给出了旋转矩阵或其逆矩阵。在您提供的链接中,它似乎是相反的np.linalg.inv(R)
    • eul2rotm 将给出旋转矩阵而不是它的逆矩阵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多