From 595c6b217682c7f7464c6afa16d9bb38d0661bc5 Mon Sep 17 00:00:00 2001 From: felix Date: Sat, 20 Jun 2015 12:31:11 -0400 Subject: [PATCH] Computing eigenvectors with cv::eigen(). Infinitely faster since it works. --- modules/surface_matching/src/ppf_helpers.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/surface_matching/src/ppf_helpers.cpp b/modules/surface_matching/src/ppf_helpers.cpp index a4f686803..6f35978c8 100644 --- a/modules/surface_matching/src/ppf_helpers.cpp +++ b/modules/surface_matching/src/ppf_helpers.cpp @@ -716,7 +716,25 @@ CV_EXPORTS int computeNormalsPC3d(const Mat& PC, Mat& PCNormals, const int NumNe meanCovLocalPCInd(dataset, indLocal, 3, NumNeighbors, C, mu); // eigenvectors of covariance matrix - eigenLowest33(C, nr); + Mat cov(3, 3, CV_64F), eigVect, eigVal; + double* covData = (double*)cov.data; + covData[0] = C[0][0]; + covData[1] = C[0][1]; + covData[2] = C[0][2]; + covData[3] = C[1][0]; + covData[4] = C[1][1]; + covData[5] = C[1][2]; + covData[6] = C[2][0]; + covData[7] = C[2][1]; + covData[8] = C[2][2]; + eigen(cov, eigVal, eigVect); + Mat lowestEigVec; + //the eigenvector for the lowest eigenvalue is in the last row + eigVect.row(eigVect.rows - 1).copyTo(lowestEigVec); + double* eigData = (double*)lowestEigVec.data; + nr[0] = eigData[0]; + nr[1] = eigData[1]; + nr[2] = eigData[2]; pcr[0] = pci[0]; pcr[1] = pci[1];