]> rtime.felk.cvut.cz Git - opencv.git/blobdiff - opencv/tests/cxcore/src/apca.cpp
updated threshold of pca test
[opencv.git] / opencv / tests / cxcore / src / apca.cpp
index 04d6895641ef38b8a722a89ed9869e97f69ad738..1299363801ec42819956bf9fd19639d3450ab097 100644 (file)
@@ -43,7 +43,7 @@
 \r
 using namespace cv;\r
 \r
-//#define CHECK_C\r
+#define CHECK_C\r
 \r
 Size sz( 200, 500);\r
 \r
@@ -142,8 +142,8 @@ void CV_PCATest::run( int )
 \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
@@ -172,8 +172,8 @@ void CV_PCATest::run( int )
                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
@@ -182,29 +182,30 @@ void CV_PCATest::run( int )
        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
@@ -212,8 +213,8 @@ void CV_PCATest::run( int )
                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
@@ -224,15 +225,15 @@ void CV_PCATest::run( int )
        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
@@ -251,47 +252,47 @@ void CV_PCATest::run( int )
        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
@@ -304,4 +305,4 @@ exit_func:
 \r
 #endif\r
 \r
-CV_PCATest pca_test;
\ No newline at end of file
+CV_PCATest pca_test;\r