2013-06-07 1 views
0

Я пытаюсь найти ограничительную рамку облака 3D-точек с использованием PCA. Я использую JAMA «Java Matrix Package» для выполнения SVD.Find Bounding Box 3d-облака точек с использованием PCA

  1. Я выборки 1000 из моего облака точек и выполнения SVD:

    Matrix pointsMatrix = new Matrix(nThPoints); 
    SingularValueDecomposition svd = new SingularValueDecomposition(pointsMatrix); 
    
  2. Я добывающие 3 PCA векторы из результата и добавление их негативы:

    двойной [] Vector1 = {svd.getU(). получим (0, 0), svd.getU(). получить (1, 0), svd.getU(). получаем (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 углов (в то время как помня центр образца), и я просто не знаю, как сделать это.

Как я могу это сделать?

ответ