向下,我编辑了我的问题。 我将 Wxyz 投影到图像(u,v)并得到一些错误的结果。我无法弄清楚哪里出错了。请大家帮忙解答一下。
给定:
Wxyzz = 386.06 197.02 -1821.8 1 407.32 -108 -1859.1 1 4.9764 290.92 -1531.2 1 103.39 -233.07 -1643.2 1 189.7 320.19 -1667.9 1 76.279 147.9 -1597.2 1 47.798 -319.51 -1605.8 1 164.74 -223.1 -1688.6 1 482.06 -251.66 -1921.2 1 226.42 -213.27 -1733.6 1
Wxyz=Wxyz' %';
%# intrinsic
fu = 2640; fv =2640; uo= 1514; vo = 994;
A= [ fu 0 uo 0
0 fv vo 0
0 0 1 0
0 0 0 1];
Exterior=[-6.6861,12.6118,-8.0660,[-0.4467,-0.3168,0.2380]*pi/180];%# deg 2 rad
%#data
X0=Exterior(1);
Y0=Exterior(2);
Z0=Exterior(3);
ax=Exterior(4);
by=Exterior(5);
cz=Exterior(6);
%#Rotation in X
Rx = [1 0 0
0 cos(ax) -sin(ax)
0 sin(ax) cos(ax)];
%#Rotation in Y
Ry = [cos(by) 0 sin(by)
0 1 0
-sin(by) 0 cos(by)];
%#Rotation in Z
Rz = [cos(cz) -sin(cz) 0
sin(cz) cos(cz) 0
0 0 1];
R=Rx*Ry*Rz;
T=[X0;Y0;Z0];
Extrinsic= R';
Extrinsic(:,4) = -(R')* (T);
Extrinsic(4,:) = [0 0 0 1]
PImage = A* Extrinsic* Wxyz;
%#Obtain the X's
PImage(1 ,:) = PImage(1 ,:) ./ PImage(3 ,:);
%#Obtain the Y's
PImage(2 ,:) = PImage(2 ,:) ./ PImage(3 ,:);
我正在获取
PImage = 955.93 707.43 -1814.4 1 939.75 1147.6 -1854.2 1 1506.3 490.36 -1521 1 1352.7 1370.2 -1637.6 1 1213.9 485.04 -1658.4 1 1389.7 749.08 -1588.5 1 1440.9 1521.6 -1600.6 1 1261.2 1344.2 -1683.2 1 857.22 1340 -1917.8 1 1173.9 1319.9 -1728.5 1
我应该得到(真正的二维点)
img = 2072.8 706.69 2088.9 1146.9 1522.6 489.6 1676.1 1369.5 1814.9 484.3 1639.2 748.35 1587.9 1520.9 1767.6 1343.5 2171.4 1339.3 1854.9 1319.2
如果我使用 A= [ -fu 0 uo 0 0 声音 0 0 0 1 0 0 0 0 1]; 我得到正确的答案。 我不知道旋转或平移的错误在哪里;为什么 Pimage(:,1) 与 img(:,1) 不同。 任何帮助将不胜感激。
最佳答案
您已经完成了旋转,并且已经完成了转换。 你需要做的就是投影!现在我不知道你到底想完成什么,但我在任何地方都没有看到投影矩阵。所以这是你需要解决的第一件事。
请记住,进行投影是 R4 -> R4 操作。如果您试图获得 R2 向量,那么您就是在尝试做其他事情(更多)。
查看更多信息 wikipedia .
如果你确实想了解详情,可以观看学习,有礼YouTube
关于matlab - 投影矩阵符号混淆(编辑标题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951414/