PointCloud的典型姿势

时间:2016-01-13 22:18:19

标签: object linear-algebra eigen point-cloud-library

我做了一个奇怪的观察,我问自己是否有人有解释。

假设我们有PointCloud,例如完美的圆柱体。这个圆柱体以某种方式放置并在空间中旋转。现在对于这个圆柱体,我们用主成分分析来计算它的质心和特征向量。

现在我可以将它描述为形式的仿射变换:

Eigen::Affine3d pose;
pose.translation << centroid[0], centroid[1], centroid[2];
pose.linear() = evecs;

现在让我们假设我想要将对象转换为明确的,规范的姿势,然后我将执行以下操作:

obj.transform(obj.getPose().inverse());

通过这个我将对象转换为它的局部坐标系,因此它是规范的姿势。并且obj.getPose()在重新计算它的新特征向量和质心位置(然后应该在(0,0,0)中)之后再构造我它的新姿势。

在我这样做之后,它结束了对象的新的,规范的姿势有时是这样的:

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

所以身份矩阵。我本来期待这一点,但有时我得到了这个:

-1  0  0  0
 0 -1  0  0
 0  0  1  0
 0  0  0  1

我无法向自己解释这种行为,因为我在比较姿势,这给我带来了麻烦。你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

如果v是特征向量,则特征向量不是唯一定义的,那么-v也是特征向量。这正是你观察到的。

此外,如果你有一个完全对称的圆柱体,那么两个特征值应该相等,并且两个相应的特征向量可以任意选择为与第三个特征向量(圆柱体的轴)正交的平面内的一对正交矢量。