gpt4 book ai didi

opencv - 3D 相机坐标到世界坐标(改 rebase 础?)

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:51 27 4
gpt4 key购买 nike

假设我有一个物体相对于相机的坐标 X、Y、Z 和方向 Rx、Ry、Rz。此外,我有这个相机在世界上的坐标 U、V、W 和方向 Ru、Rv、Rw。

如何将对象的位置(位置和旋转)转换为其在世界中的位置?

这听起来像是基础的改变,但我还没有找到明确的来源。

最佳答案

我找到了这个主题非常清楚的文档。 http://www.cse.psu.edu/~rcollins/CSE486/lecture12.pdf

除其他外,它处理反向操作,即从世界到相机 3D 坐标。

Pc = R ( Pw - C )其中,Pc是相机世界中的一个点,Pw是法线世界中的一个点,R是旋转矩阵,C是相机平移。

不幸的是,添加 latex 公式相当麻烦,所以我会给出一些matlab代码。

function lecture12_collins()
% for plotting simplicity I choose my points on plane z=0 in this example
% Point in the world
Pw = [2 2.5 0 1]';
% rotation
th = pi/3;
% translation
c = [1 2.5 0]';
% obtain world to camera coordinate matrix
T = GetT(th, c);
% calculate the camera coordinate
Pc = T*Pw
% get the camera to world coordinate
T_ = GetT_(th, c)
% Alternatively you could use the inverse matrix
% T_ = inv(R*C)

% calculate the worldcoordinate
Pw_ = T_*Pc

assert (all(eq(Pw_ ,Pw)))


function T = GetT(th, c)
% I have assumed rotation around the z axis only here.
R = [cos(th) -sin(th) 0 0
sin(th) cos(th) 0 0
0 0 1 0
0 0 0 1];
C = [1 0 0 -c(1)
0 1 0 -c(2)
0 0 1 -c(3)
0 0 0 1];
T = R*C;

function T_ = GetT_(th, c)
% negate the angle
R_ = [cos(-th) -sin(-th) 0 0
sin(-th) cos(-th) 0 0
0 0 1 0
0 0 0 1];
% negate the translation
C_ = [1 0 0 c(1)
0 1 0 c(2)
0 0 1 c(3)
0 0 0 1];
T_ = C_*R_

到目前为止,这只是关于位置的。我通过使用我对旋转的额外知识解决了旋转问题。我知道我的相机垂直于物体并且它的旋转仅围绕 z 轴。我可以只添加相机和对象的旋转。

关于opencv - 3D 相机坐标到世界坐标(改 rebase 础?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17210424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com