【发布时间】:2017-07-24 08:27:32
【问题描述】:
我在空间中有 6 个点,已知坐标以 mm 为单位,图像中对应的 2D 像素坐标(图像大小为 640x320 像素,点坐标是从图像的左上角测量的。我还有相机的焦距为 43.456mm. 试图找到相机的位置和方向。 我在这里的matlab代码会给我相机位置-572.8052 -676.7060 548.7718 并且看起来是正确的,但我很难找到方向值(相机的偏航俯仰滚动以度为单位) 我知道旋转值应该是 60.3,5.6,-45.1 我的代码中的最后 4 行需要更新以输出相机的方向。 我真的很感谢你在这方面的帮助。 谢谢。
这是我的matlab代码:
Points_2D= [135 183 ; 188 129 ; 298 256 ; 301 43 ; 497 245; 464 110];
Points_3D= [-22.987 417.601 -126.543 ; -132.474 37.67 140.702 ; ...
388.445 518.635 -574.784 ; 250.015 259.803 67.137 ; ...
405.915 -25.566 -311.834 ; 568.859 164.809 -162.604 ];
M = [0;0;0;0;0;0;0;0;0;0;0];
A = [];
for i = 1:size(Points_2D,1)
u_i = Points_2D(i,1);
v_i = Points_2D(i,2);
x_i = Points_3D(i,1);
y_i = Points_3D(i,2);
z_i = Points_3D(i,3);
A_vec_1 = [x_i y_i z_i 1 0 0 0 0 -u_i*x_i -u_i*y_i -u_i*z_i -u_i]; %
A_vec_2 = [ 0 0 0 0 x_i y_i z_i 1 -v_i*x_i -v_i*y_i -v_i*z_i -v_i]; %
A(end+1,:) = A_vec_1;
A(end+1,:) = A_vec_2;
end
[U,S,V] = svd(A);
M = V(:,end);
M = transpose(reshape(M,[],3));
Q = M(:,1:3);
m_4 = M(:,4);
Center = (-Q^-1)*m_4
k=[43.456/640 0 320 ;0 43.456/320 160;0 0 1 ];
Rotation= (Q^-1)*k;
CC=Rotation'
eul=rotm2eul(CC)
【问题讨论】:
-
您还需要这方面的帮助吗?还是你已经完成了一项家庭作业/项目?
-
不,我仍在寻找解决方案,我离开学校已经好几年了!你能帮忙吗?
-
您想要找到的究竟是什么?相机相对于位置的旋转和平移,即相机中心的 (0,0)?
-
我有 0,0,0 作为世界的原点,还有空间中 6 个点的 3d 坐标 (x,y,z) 场景中有一台相机拍摄了这 6 个点的照片所以我有照片中这些点的二维坐标(x,y)。我正在尝试查找拍摄照片的相机的位置和方向。我的代码找到了看起来不错的位置,但我需要以度为单位找到相机的方向(偏航、俯仰、滚动)。每个人都说这很容易做到,但从未找到解决方案。如果需要的话,我也知道相机的焦距是 43.456mm..
-
如果您或第一个可以根据这些已知信息编写 matlab 代码来查找相机位置和方向的人,我将通过 paypal 支付 100 美元,我不是在开玩笑。
标签: matlab matrix camera projection calibration