0

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

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

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

    双[] vector1 = {svd.getU().get(0, 0), svd.getU().get(1, 0), svd.getU().get(2, 0)}; 双[] 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)}; 双[] 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);
    

现在,我有 6 个新向量,我需要以某种方式计算 8 个角(同时记住样本中心),我只是不知道该怎么做。

我怎样才能做到这一点?

4

1 回答 1

0

您可以在此处找到详细说明:

http://hewjunwei.wordpress.com/2013/01/26/obb-generation-via-principal-component-analysis/

于 2014-05-23T17:53:35.307 回答