From: catree Date: Fri, 13 Jul 2018 13:05:54 +0000 (+0200) Subject: Add overloaded cv::PCACompute() that returns also the eigenvalues. Useful for Java... X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~1^2~600^2~19^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4dc7e617a44a478c9e6adc0a21873a95e9fadbf4;p=platform%2Fupstream%2Fopencv.git Add overloaded cv::PCACompute() that returns also the eigenvalues. Useful for Java and Python OpenCV where PCA is not available. --- diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index 43da5a9..21be7d7 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -1978,10 +1978,20 @@ CV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar, CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, OutputArray eigenvectors, int maxComponents = 0); +/** wrap PCA::operator() and add eigenvalues output parameter */ +CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + int maxComponents = 0); + /** wrap PCA::operator() */ CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, OutputArray eigenvectors, double retainedVariance); +/** wrap PCA::operator() and add eigenvalues output parameter */ +CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + double retainedVariance); + /** wrap PCA::project */ CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean, InputArray eigenvectors, OutputArray result); diff --git a/modules/core/src/pca.cpp b/modules/core/src/pca.cpp index 5fdce55..0625419 100644 --- a/modules/core/src/pca.cpp +++ b/modules/core/src/pca.cpp @@ -361,6 +361,19 @@ void cv::PCACompute(InputArray data, InputOutputArray mean, } void cv::PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + int maxComponents) +{ + CV_INSTRUMENT_REGION() + + PCA pca; + pca(data, mean, 0, maxComponents); + pca.mean.copyTo(mean); + pca.eigenvectors.copyTo(eigenvectors); + pca.eigenvalues.copyTo(eigenvalues); +} + +void cv::PCACompute(InputArray data, InputOutputArray mean, OutputArray eigenvectors, double retainedVariance) { CV_INSTRUMENT_REGION() @@ -371,6 +384,19 @@ void cv::PCACompute(InputArray data, InputOutputArray mean, pca.eigenvectors.copyTo(eigenvectors); } +void cv::PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + double retainedVariance) +{ + CV_INSTRUMENT_REGION() + + PCA pca; + pca(data, mean, 0, retainedVariance); + pca.mean.copyTo(mean); + pca.eigenvectors.copyTo(eigenvectors); + pca.eigenvalues.copyTo(eigenvalues); +} + void cv::PCAProject(InputArray data, InputArray mean, InputArray eigenvectors, OutputArray result) {