0

PCA を使用して 3 次元点群の境界ボックスを見つけようとしています。SVDを実行するために、JAMA「Java Matrix Package」を使用しています。

  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);
    

これで、6 つの新しいベクトルが得られたので、8 つのコーナーを計算する必要があります (サンプルの中心を覚えている間) が、その方法がわかりません。

どうやってやるの?

4

1 に答える 1