@@ -60,7 +60,7 @@ class fisheyeTest : public ::testing::Test {
60
60
61
61
protected:
62
62
std::string combine (const std::string& _item1, const std::string& _item2);
63
- cv::Mat mergeRectification ( const cv::Mat& l , const cv::Mat& r );
63
+ static void merge4 ( const cv::Mat& tl, const cv::Mat& tr , const cv::Mat& bl, const cv::Mat& br, cv::Mat& merged );
64
64
};
65
65
66
66
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -385,11 +385,7 @@ TEST_F(fisheyeTest, EstimateUncertainties)
385
385
CV_Assert (errors.alpha == 0 );
386
386
}
387
387
388
- #ifdef HAVE_TEGRA_OPTIMIZATION
389
- TEST_F (fisheyeTest, DISABLED_rectify)
390
- #else
391
- TEST_F (fisheyeTest, rectify)
392
- #endif
388
+ TEST_F (fisheyeTest, stereoRectify)
393
389
{
394
390
const std::string folder =combine (datasets_repository_path, " calib-3_stereo_from_JY" );
395
391
@@ -405,20 +401,65 @@ TEST_F(fisheyeTest, rectify)
405
401
cv::fisheye::stereoRectify (K1, D1, K2, D2, calibration_size, theR, theT, R1, R2, P1, P2, Q,
406
402
cv::CALIB_ZERO_DISPARITY, requested_size, balance, fov_scale);
407
403
404
+ // Collected with these CMake flags: -DWITH_IPP=OFF -DCMAKE_BUILD_TYPE=Debug
405
+ cv::Matx33d R1_ref (
406
+ 0.9992853269091279 , 0.03779164101000276 , -0.0007920188690205426 ,
407
+ -0.03778569762983931 , 0.9992646472015868 , 0.006511981857667881 ,
408
+ 0.001037534936357442 , -0.006477400933964018 , 0.9999784831677112
409
+ );
410
+ cv::Matx33d R2_ref (
411
+ 0.9994868963898833 , -0.03197579751378937 , -0.001868774538573449 ,
412
+ 0.03196298186616116 , 0.9994677442608699 , -0.0065265589947392 ,
413
+ 0.002076471801477729 , 0.006463478587068991 , 0.9999769555891836
414
+ );
415
+ cv::Matx34d P1_ref (
416
+ 420.8551870450913 , 0 , 586.501617798451 , 0 ,
417
+ 0 , 420.8551870450913 , 374.7667511986098 , 0 ,
418
+ 0 , 0 , 1 , 0
419
+ );
420
+ cv::Matx34d P2_ref (
421
+ 420.8551870450913 , 0 , 586.501617798451 , -41.77758076597302 ,
422
+ 0 , 420.8551870450913 , 374.7667511986098 , 0 ,
423
+ 0 , 0 , 1 , 0
424
+ );
425
+ cv::Matx44d Q_ref (
426
+ 1 , 0 , 0 , -586.501617798451 ,
427
+ 0 , 1 , 0 , -374.7667511986098 ,
428
+ 0 , 0 , 0 , 420.8551870450913 ,
429
+ 0 , 0 , 10.07370889670733 , -0
430
+ );
431
+
432
+ const double eps = 1e-10 ;
433
+ EXPECT_MAT_NEAR (R1_ref, R1, eps);
434
+ EXPECT_MAT_NEAR (R2_ref, R2, eps);
435
+ EXPECT_MAT_NEAR (P1_ref, P1, eps);
436
+ EXPECT_MAT_NEAR (P2_ref, P2, eps);
437
+ EXPECT_MAT_NEAR (Q_ref, Q, eps);
438
+
439
+ if (::testing::Test::HasFailure ())
440
+ {
441
+ std::cout << " Actual values are:" << std::endl
442
+ << " R1 =" << std::endl << R1 << std::endl
443
+ << " R2 =" << std::endl << R2 << std::endl
444
+ << " P1 =" << std::endl << P1 << std::endl
445
+ << " P2 =" << std::endl << P2 << std::endl
446
+ << " Q =" << std::endl << Q << std::endl;
447
+ }
448
+
449
+ #if 1 // Debug code
408
450
cv::Mat lmapx, lmapy, rmapx, rmapy;
409
451
// rewrite for fisheye
410
452
cv::fisheye::initUndistortRectifyMap (K1, D1, R1, P1, requested_size, CV_32F, lmapx, lmapy);
411
453
cv::fisheye::initUndistortRectifyMap (K2, D2, R2, P2, requested_size, CV_32F, rmapx, rmapy);
412
454
413
455
cv::Mat l, r, lundist, rundist;
414
- cv::VideoCapture lcap (combine (folder, " left/stereo_pair_%03d.jpg" )),
415
- rcap (combine (folder, " right/stereo_pair_%03d.jpg" ));
416
-
417
- for (int i = 0 ;; ++i)
456
+ for (int i = 0 ; i < 34 ; ++i)
418
457
{
419
- lcap >> l; rcap >> r;
420
- if (l.empty () || r.empty ())
421
- break ;
458
+ SCOPED_TRACE (cv::format (" image %d" , i));
459
+ l = imread (combine (folder, cv::format (" left/stereo_pair_%03d.jpg" , i)), cv::IMREAD_COLOR);
460
+ r = imread (combine (folder, cv::format (" right/stereo_pair_%03d.jpg" , i)), cv::IMREAD_COLOR);
461
+ ASSERT_FALSE (l.empty ());
462
+ ASSERT_FALSE (r.empty ());
422
463
423
464
int ndisp = 128 ;
424
465
cv::rectangle (l, cv::Rect (255 , 0 , 829 , l.rows -1 ), CV_RGB (255 , 0 , 0 ));
@@ -427,15 +468,18 @@ TEST_F(fisheyeTest, rectify)
427
468
cv::remap (l, lundist, lmapx, lmapy, cv::INTER_LINEAR);
428
469
cv::remap (r, rundist, rmapx, rmapy, cv::INTER_LINEAR);
429
470
430
- cv::Mat rectification = mergeRectification (lundist, rundist);
471
+ for (int ii = 0 ; ii < lundist.rows ; ii += 20 )
472
+ {
473
+ cv::line (lundist, cv::Point (0 , ii), cv::Point (lundist.cols , ii), cv::Scalar (0 , 255 , 0 ));
474
+ cv::line (rundist, cv::Point (0 , ii), cv::Point (lundist.cols , ii), cv::Scalar (0 , 255 , 0 ));
475
+ }
431
476
432
- cv::Mat correct = cv::imread (combine (datasets_repository_path, cv::format (" rectification_AB_%03d.png" , i)));
477
+ cv::Mat rectification;
478
+ merge4 (l, r, lundist, rundist, rectification);
433
479
434
- if (correct.empty ())
435
- cv::imwrite (combine (datasets_repository_path, cv::format (" rectification_AB_%03d.png" , i)), rectification);
436
- else
437
- EXPECT_MAT_NEAR (correct, rectification, 1e-10 );
438
- }
480
+ cv::imwrite (cv::format (" fisheye_rectification_AB_%03d.png" , i), rectification);
481
+ }
482
+ #endif
439
483
}
440
484
441
485
TEST_F (fisheyeTest, stereoCalibrate)
@@ -601,17 +645,17 @@ std::string fisheyeTest::combine(const std::string& _item1, const std::string& _
601
645
return item1 + (last != ' /' ? " /" : " " ) + item2;
602
646
}
603
647
604
- cv::Mat fisheyeTest::mergeRectification ( const cv::Mat& l , const cv::Mat& r )
648
+ void fisheyeTest::merge4 ( const cv::Mat& tl, const cv::Mat& tr, const cv::Mat& bl , const cv::Mat& br, cv::Mat& merged )
605
649
{
606
- CV_Assert (l. type () == r .type () && l. size () == r. size () );
607
- cv::Mat merged (l. rows , l. cols * 2 , l. type () );
608
- cv::Mat lpart = merged. colRange ( 0 , l. cols );
609
- cv::Mat rpart = merged. colRange (l. cols , merged .cols );
610
- l. copyTo (lpart );
611
- r. copyTo (rpart);
612
-
613
- for ( int i = 0 ; i < l. rows ; i+= 20 )
614
- cv::line (merged, cv::Point ( 0 , i), cv::Point (merged. cols , i), CV_RGB ( 0 , 255 , 0 ));
615
-
616
- return merged;
650
+ int type = tl .type ();
651
+ cv::Size sz = tl. size ( );
652
+ ASSERT_EQ (type, tr. type ()); ASSERT_EQ (type, bl. type ()); ASSERT_EQ (type, br. type () );
653
+ ASSERT_EQ (sz. width , tr. cols ); ASSERT_EQ (sz. width , bl. cols ); ASSERT_EQ (sz. width , br .cols );
654
+ ASSERT_EQ (sz. height , tr. rows ); ASSERT_EQ (sz. height , bl. rows ); ASSERT_EQ (sz. height , br. rows );
655
+
656
+ merged. create ( cv::Size (sz. width * 2 , sz. height * 2 ), type);
657
+ tl. copyTo ( merged ( cv::Rect ( 0 , 0 , sz. width , sz. height )));
658
+ tr. copyTo (merged ( cv::Rect (sz. width , 0 , sz. width , sz. height ) ));
659
+ bl. copyTo ( merged ( cv::Rect ( 0 , sz. height , sz. width , sz. height )));
660
+ bl. copyTo ( merged ( cv::Rect (sz. width , sz. height , sz. width , sz. height ))) ;
617
661
}
0 commit comments