|
|
|
@ -101,6 +101,15 @@ TEST_F(fisheyeTest, projectPoints) |
|
|
|
|
EXPECT_MAT_NEAR(distorted0, distorted2, 1e-10); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// we use it to reduce patch size for images in testdata
|
|
|
|
|
static void throwAwayHalf(Mat img) |
|
|
|
|
{ |
|
|
|
|
int whalf = img.cols / 2, hhalf = img.rows / 2; |
|
|
|
|
Rect tl(0, 0, whalf, hhalf), br(whalf, hhalf, whalf, hhalf); |
|
|
|
|
img(tl) = 0; |
|
|
|
|
img(br) = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
TEST_F(fisheyeTest, undistortImage) |
|
|
|
|
{ |
|
|
|
|
cv::Matx33d theK = this->K; |
|
|
|
@ -112,20 +121,26 @@ TEST_F(fisheyeTest, undistortImage) |
|
|
|
|
newK(0, 0) = 100; |
|
|
|
|
newK(1, 1) = 100; |
|
|
|
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK); |
|
|
|
|
cv::Mat correct = cv::imread(combine(datasets_repository_path, "new_f_100.png")); |
|
|
|
|
if (correct.empty()) |
|
|
|
|
CV_Assert(cv::imwrite(combine(datasets_repository_path, "new_f_100.png"), undistorted)); |
|
|
|
|
else |
|
|
|
|
std::string imageFilename = combine(datasets_repository_path, "new_f_100.png"); |
|
|
|
|
cv::Mat correct = cv::imread(imageFilename); |
|
|
|
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl; |
|
|
|
|
|
|
|
|
|
throwAwayHalf(correct); |
|
|
|
|
throwAwayHalf(undistorted); |
|
|
|
|
|
|
|
|
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
double balance = 1.0; |
|
|
|
|
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance); |
|
|
|
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK); |
|
|
|
|
cv::Mat correct = cv::imread(combine(datasets_repository_path, "balance_1.0.png")); |
|
|
|
|
if (correct.empty()) |
|
|
|
|
CV_Assert(cv::imwrite(combine(datasets_repository_path, "balance_1.0.png"), undistorted)); |
|
|
|
|
else |
|
|
|
|
std::string imageFilename = combine(datasets_repository_path, "balance_1.0.png"); |
|
|
|
|
cv::Mat correct = cv::imread(imageFilename); |
|
|
|
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl; |
|
|
|
|
|
|
|
|
|
throwAwayHalf(correct); |
|
|
|
|
throwAwayHalf(undistorted); |
|
|
|
|
|
|
|
|
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -133,10 +148,13 @@ TEST_F(fisheyeTest, undistortImage) |
|
|
|
|
double balance = 0.0; |
|
|
|
|
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance); |
|
|
|
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK); |
|
|
|
|
cv::Mat correct = cv::imread(combine(datasets_repository_path, "balance_0.0.png")); |
|
|
|
|
if (correct.empty()) |
|
|
|
|
CV_Assert(cv::imwrite(combine(datasets_repository_path, "balance_0.0.png"), undistorted)); |
|
|
|
|
else |
|
|
|
|
std::string imageFilename = combine(datasets_repository_path, "balance_0.0.png"); |
|
|
|
|
cv::Mat correct = cv::imread(imageFilename); |
|
|
|
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl; |
|
|
|
|
|
|
|
|
|
throwAwayHalf(correct); |
|
|
|
|
throwAwayHalf(undistorted); |
|
|
|
|
|
|
|
|
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -422,19 +440,19 @@ TEST_F(fisheyeTest, stereoRectify) |
|
|
|
|
0.002076471801477729, 0.006463478587068991, 0.9999769555891836 |
|
|
|
|
); |
|
|
|
|
cv::Matx34d P1_ref( |
|
|
|
|
420.8551870450913, 0, 586.501617798451, 0, |
|
|
|
|
0, 420.8551870450913, 374.7667511986098, 0, |
|
|
|
|
420.9684016542647, 0, 586.3059567784627, 0, |
|
|
|
|
0, 420.9684016542647, 374.8571836462291, 0, |
|
|
|
|
0, 0, 1, 0 |
|
|
|
|
); |
|
|
|
|
cv::Matx34d P2_ref( |
|
|
|
|
420.8551870450913, 0, 586.501617798451, -41.77758076597302, |
|
|
|
|
0, 420.8551870450913, 374.7667511986098, 0, |
|
|
|
|
420.9684016542647, 0, 586.3059567784627, -41.78881938824554, |
|
|
|
|
0, 420.9684016542647, 374.8571836462291, 0, |
|
|
|
|
0, 0, 1, 0 |
|
|
|
|
); |
|
|
|
|
cv::Matx44d Q_ref( |
|
|
|
|
1, 0, 0, -586.501617798451, |
|
|
|
|
0, 1, 0, -374.7667511986098, |
|
|
|
|
0, 0, 0, 420.8551870450913, |
|
|
|
|
1, 0, 0, -586.3059567784627, |
|
|
|
|
0, 1, 0, -374.8571836462291, |
|
|
|
|
0, 0, 0, 420.9684016542647, |
|
|
|
|
0, 0, 10.07370889670733, -0 |
|
|
|
|
); |
|
|
|
|
|
|
|
|
@ -489,6 +507,8 @@ TEST_F(fisheyeTest, stereoRectify) |
|
|
|
|
cv::Mat rectification; |
|
|
|
|
merge4(l, r, lundist, rundist, rectification); |
|
|
|
|
|
|
|
|
|
// Add the "--test_debug" to arguments for file output
|
|
|
|
|
if (cvtest::debugLevel > 0) |
|
|
|
|
cv::imwrite(cv::format("fisheye_rectification_AB_%03d.png", i), rectification); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -683,13 +703,13 @@ TEST_F(fisheyeTest, estimateNewCameraMatrixForUndistortRectify) |
|
|
|
|
|
|
|
|
|
cv::Mat K_new_truth(3, 3, cv::DataType<double>::type); |
|
|
|
|
|
|
|
|
|
K_new_truth.at<double>(0, 0) = 387.4809086880343; |
|
|
|
|
K_new_truth.at<double>(0, 0) = 387.5118215642316; |
|
|
|
|
K_new_truth.at<double>(0, 1) = 0.0; |
|
|
|
|
K_new_truth.at<double>(0, 2) = 1036.669802754649; |
|
|
|
|
K_new_truth.at<double>(0, 2) = 1033.936556777084; |
|
|
|
|
|
|
|
|
|
K_new_truth.at<double>(1, 0) = 0.0; |
|
|
|
|
K_new_truth.at<double>(1, 1) = 373.6375700303157; |
|
|
|
|
K_new_truth.at<double>(1, 2) = 538.8373261247601; |
|
|
|
|
K_new_truth.at<double>(1, 1) = 373.6673784974842; |
|
|
|
|
K_new_truth.at<double>(1, 2) = 538.794152656429; |
|
|
|
|
|
|
|
|
|
K_new_truth.at<double>(2, 0) = 0.0; |
|
|
|
|
K_new_truth.at<double>(2, 1) = 0.0; |
|
|
|
|