校正3D点投影的旋转符号,matlab

时间:2011-07-23 11:17:49

标签: matlab rotation

我有一组3D点,我正在投影到图像平面。

我遇到了旋转矩阵的问题。 任何帮助都会很棒。 下面是我在matlab中的代码,

% adjusted plane through points XYZ=[X,Y,Z]p*3 % where p is no of points


%n*(XYZ)-d=0; Given plane parameters

-0,946467797198737  0,322785394989535   0,00288056369821191 28,3620026340107

% finding rotation matrix for [ 0 0 1]% xy plane projection


[U, S, V]= svd(n); 
C= [U(:, 2: 3), n];

R= rref([C, eye(3)]);
R= R(:, 4: 6);

%测试正确的R%R * n

R * n = [-0.0000, - 0,1.0000]'

我的问题是关于标志。任何获得正确标志的方法?  我不想玩答案。(R * n)。问题是得到这样的R,它给你正确答案。

1 个答案:

答案 0 :(得分:0)

嗯,实际上你的问题看起来可能并不那么糟糕。

或多或少,你仍然有z - 轴的单位向量。只是继续你的计算并忽略这些细节(除非你真的知道它们如何影响你的计算,请注意,通常不准确的计算组合往往会平衡自己)。

但如果你真的想要(或需要)深入研究细节,只需要对你的计算进行微调:

>>> x= [-1e-13 1e-13 1]';
>>> x(abs(x)< 1e-12)= 0
x =
   0
   0
   1

<强>更新
您应该担心的signdet(R),因此您应该添加以下支票:

>>> if 0> sign(det(R)), R= -1* R; end