我正在尝试使用PCA找到一个三维点云的边界框。 我正在使用JAMA“Java Matrix Package”来执行SVD。
我从我的点云中抽取1000个并执行SVD:
Matrix pointsMatrix = new Matrix(nThPoints); SingularValueDecomposition svd = new SingularValueDecomposition(pointsMatrix);
我从结果中提取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);
我根据数据维度放大每个向量(通过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个角(同时记住样本中心),我只是不知道该怎么做。
我该怎么做?
答案 0 :(得分:0)