使用PCA找到3d点云的边界框

时间:2013-06-07 14:02:22

标签: vector pca svd point-clouds jama

我正在尝试使用PCA找到一个三维点云的边界框。 我正在使用JAMA“Java Matrix Package”来执行SVD。

  1. 我从我的点云中抽取1000个并执行SVD:

    Matrix pointsMatrix = new Matrix(nThPoints);
    SingularValueDecomposition svd = new SingularValueDecomposition(pointsMatrix);
    
  2. 我从结果中提取3个PCA向量并添加其负数:

      

    double [] vector1 = {svd.getU()。get(0,0),svd.getU()。get(1,0),   svd.getU()。get(2,0,)}; double [] vector1N = Vec.Mult(vector1,   -1);                 double [] vector2 = {svd.getU()。get(0,1),svd.getU()。get(1,1),svd.getU()。get(2,1)};                 double [] vector2N = Vec.Mult(vector2,-1);                 double [] vector3 = {svd.getU()。get(0,2),svd.getU()。get(1,2),svd.getU()。get(2,2)};                 double [] vector3N = Vec.Mult(vector3,-1);

  3. 我根据数据维度放大每个向量(通过1000个点中的每一个并检查最大投影是什么):

    vector1 = Vec.projectData(vector1,nThPoints);

        vector1N = Vec.projectData(vector1N, nThPoints);
        vector2 = Vec.projectData(vector2, nThPoints);
        vector2N = Vec.projectData(vector2N, nThPoints);
        vector3 = Vec.projectData(vector3, nThPoints);
        vector3N = Vec.projectData(vector3N, nThPoints);
    
  4. 现在,我有6个新的矢量,我需要以某种方式计算8个角(同时记住样本中心),我只是不知道该怎么做。

    我该怎么做?

1 个答案:

答案 0 :(得分:0)