\r
using namespace cv;\r
\r
-//#define CHECK_C\r
+#define CHECK_C\r
\r
Size sz( 200, 500);\r
\r
\r
Mat avg(1, sz.width, CV_32FC1 );\r
reduce( rPoints, avg, 0, CV_REDUCE_AVG );\r
- Mat Q = rPoints - repeat( avg, rPoints.rows, 1 ), eval, evec;\r
- Q = Q.t() * Q;\r
+ Mat Q = rPoints - repeat( avg, rPoints.rows, 1 ), Qt = Q.t(), eval, evec;\r
+ Q = Qt * Q;\r
Q = Q /(float)rPoints.rows;\r
\r
eigen( Q, eval, evec );\r
if( err > eigenEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of eigen(); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
}\r
// check pca eigenvalues\r
if( err > evalEps )\r
{\r
ts->printf( CvTS::LOG, "pca.eigenvalues is incorrect (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
// check pca eigenvectors\r
err = norm( rPCA.eigenvectors, subEvec, CV_RELATIVE_L2 );\r
if( err > evecEps )\r
{\r
ts->printf( CvTS::LOG, "pca.eigenvectors is incorrect (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
\r
- prjEps = 1.2, backPrjEps = 1.2;\r
+ prjEps = 1.265, backPrjEps = 1.265;\r
for( int i = 0; i < rTestPoints.rows; i++ )\r
{\r
// check pca project\r
- Mat prj = (rTestPoints.row(i) - avg) * subEvec.t();\r
+ Mat subEvec_t = subEvec.t();\r
+ Mat prj = rTestPoints.row(i) - avg; prj *= subEvec_t;\r
err = norm(rPrjTestPoints.row(i), prj, CV_RELATIVE_L2);\r
if( err > prjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of project() (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
// check pca backProject\r
Mat backPrj = rPrjTestPoints.row(i) * subEvec + avg;\r
if( err > backPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of backProject() (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
}\r
\r
if( err > diffPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of project() (CV_PCA_DATA_AS_COL); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
err = norm(cPCA.backProject(rPrjTestPoints.t()), rBackPrjTestPoints.t(), CV_RELATIVE_L2 );\r
if( err > diffBackPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of backProject() (CV_PCA_DATA_AS_COL); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
\r
#ifdef CHECK_C\r
cvProjectPCA( &_testPoints, &_avg, &_evec, &_prjTestPoints );\r
cvBackProjectPCA( &_prjTestPoints, &_avg, &_evec, &_backPrjTestPoints );\r
\r
- err = norm(prjTestPoints, rPrjTestPoints.t(), CV_RELATIVE_L2);\r
+ err = norm(prjTestPoints, rPrjTestPoints, CV_RELATIVE_L2);\r
if( err > diffPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of cvProjectPCA() (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
- err = norm(backPrjTestPoints, rBackPrjTestPoints.t(), CV_RELATIVE_L2);\r
+ err = norm(backPrjTestPoints, rBackPrjTestPoints, CV_RELATIVE_L2);\r
if( err > diffBackPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of cvBackProjectPCA() (CV_PCA_DATA_AS_ROW); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
\r
// 3. check C PCA & COL\r
_points = cPoints;\r
_testPoints = cTestPoints;\r
- avg.t(); _avg = avg;\r
- eval.t(); _eval = eval;\r
- evec.t(); _evec = evec;\r
- prjTestPoints.t(); _prjTestPoints = prjTestPoints;\r
- backPrjTestPoints.t(); _backPrjTestPoints = backPrjTestPoints;\r
+ avg = avg.t(); _avg = avg;\r
+ eval = eval.t(); _eval = eval;\r
+ evec = evec.t(); _evec = evec;\r
+ prjTestPoints = prjTestPoints.t(); _prjTestPoints = prjTestPoints;\r
+ backPrjTestPoints = backPrjTestPoints.t(); _backPrjTestPoints = backPrjTestPoints;\r
\r
cvCalcPCA( &_points, &_avg, &_eval, &_evec, CV_PCA_DATA_AS_COL );\r
cvProjectPCA( &_testPoints, &_avg, &_evec, &_prjTestPoints );\r
cvBackProjectPCA( &_prjTestPoints, &_avg, &_evec, &_backPrjTestPoints );\r
\r
- err = norm(prjTestPoints, rPrjTestPoints, CV_RELATIVE_L2 );\r
+ err = norm(prjTestPoints, rPrjTestPoints.t(), CV_RELATIVE_L2 );\r
if( err > diffPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of cvProjectPCA() (CV_PCA_DATA_AS_COL); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
- err = norm(backPrjTestPoints, rBackPrjTestPoints, CV_RELATIVE_L2);\r
+ err = norm(backPrjTestPoints, rBackPrjTestPoints.t(), CV_RELATIVE_L2);\r
if( err > diffBackPrjEps )\r
{\r
ts->printf( CvTS::LOG, "bad accuracy of cvBackProjectPCA() (CV_PCA_DATA_AS_COL); err = %f\n", err );\r
- code = CvTS::FAIL_BAD_ACCURACY;
- goto exit_func;
+ code = CvTS::FAIL_BAD_ACCURACY;\r
+ goto exit_func;\r
}\r
#endif\r
\r
\r
#endif\r
\r
-CV_PCATest pca_test;
\ No newline at end of file
+CV_PCATest pca_test;\r