mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
commit
38f7cd7173
@ -835,10 +835,10 @@ public class Calib3dTest extends OpenCVTestCase {
|
|||||||
D.put(2,0,-0.021509225493198905);
|
D.put(2,0,-0.021509225493198905);
|
||||||
D.put(3,0,0.0043378096628297145);
|
D.put(3,0,0.0043378096628297145);
|
||||||
|
|
||||||
K_new_truth.put(0,0, 387.4809086880343);
|
K_new_truth.put(0,0, 387.5118215642316);
|
||||||
K_new_truth.put(0,2, 1036.669802754649);
|
K_new_truth.put(0,2, 1033.936556777084);
|
||||||
K_new_truth.put(1,1, 373.6375700303157);
|
K_new_truth.put(1,1, 373.6673784974842);
|
||||||
K_new_truth.put(1,2, 538.8373261247601);
|
K_new_truth.put(1,2, 538.794152656429);
|
||||||
|
|
||||||
Calib3d.fisheye_estimateNewCameraMatrixForUndistortRectify(K,D,new Size(1920,1080),
|
Calib3d.fisheye_estimateNewCameraMatrixForUndistortRectify(K,D,new Size(1920,1080),
|
||||||
new Mat().eye(3, 3, CvType.CV_64F), K_new, 0.0, new Size(1920,1080));
|
new Mat().eye(3, 3, CvType.CV_64F), K_new, 0.0, new Size(1920,1080));
|
||||||
|
@ -403,7 +403,7 @@ void cv::fisheye::undistortPoints( InputArray distorted, OutputArray undistorted
|
|||||||
|
|
||||||
if (!isEps || fabs(theta_d) > criteria.epsilon)
|
if (!isEps || fabs(theta_d) > criteria.epsilon)
|
||||||
{
|
{
|
||||||
// compensate distortion iteratively
|
// compensate distortion iteratively using Newton method
|
||||||
|
|
||||||
for (int j = 0; j < maxCount; j++)
|
for (int j = 0; j < maxCount; j++)
|
||||||
{
|
{
|
||||||
@ -611,7 +611,7 @@ void cv::fisheye::estimateNewCameraMatrixForUndistortRectify(InputArray K, Input
|
|||||||
: K.getMat().at<double>(0,0)/K.getMat().at<double>(1,1);
|
: K.getMat().at<double>(0,0)/K.getMat().at<double>(1,1);
|
||||||
|
|
||||||
// convert to identity ratio
|
// convert to identity ratio
|
||||||
cn[0] *= aspect_ratio;
|
cn[1] *= aspect_ratio;
|
||||||
for(size_t i = 0; i < points.total(); ++i)
|
for(size_t i = 0; i < points.total(); ++i)
|
||||||
pptr[i][1] *= aspect_ratio;
|
pptr[i][1] *= aspect_ratio;
|
||||||
|
|
||||||
|
@ -152,6 +152,15 @@ TEST_F(fisheyeTest, distortUndistortPoints)
|
|||||||
|
|
||||||
TEST_F(fisheyeTest, undistortImage)
|
TEST_F(fisheyeTest, undistortImage)
|
||||||
{
|
{
|
||||||
|
// we use it to reduce patch size for images in testdata
|
||||||
|
auto 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;
|
||||||
|
};
|
||||||
|
|
||||||
cv::Matx33d theK = this->K;
|
cv::Matx33d theK = this->K;
|
||||||
cv::Mat theD = cv::Mat(this->D);
|
cv::Mat theD = cv::Mat(this->D);
|
||||||
std::string file = combine(datasets_repository_path, "/calib-3_stereo_from_JY/left/stereo_pair_014.jpg");
|
std::string file = combine(datasets_repository_path, "/calib-3_stereo_from_JY/left/stereo_pair_014.jpg");
|
||||||
@ -161,32 +170,41 @@ TEST_F(fisheyeTest, undistortImage)
|
|||||||
newK(0, 0) = 100;
|
newK(0, 0) = 100;
|
||||||
newK(1, 1) = 100;
|
newK(1, 1) = 100;
|
||||||
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
||||||
cv::Mat correct = cv::imread(combine(datasets_repository_path, "new_f_100.png"));
|
std::string imageFilename = combine(datasets_repository_path, "new_f_100.png");
|
||||||
if (correct.empty())
|
cv::Mat correct = cv::imread(imageFilename);
|
||||||
CV_Assert(cv::imwrite(combine(datasets_repository_path, "new_f_100.png"), undistorted));
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl;
|
||||||
else
|
|
||||||
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
throwAwayHalf(correct);
|
||||||
|
throwAwayHalf(undistorted);
|
||||||
|
|
||||||
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
double balance = 1.0;
|
double balance = 1.0;
|
||||||
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance);
|
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance);
|
||||||
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
||||||
cv::Mat correct = cv::imread(combine(datasets_repository_path, "balance_1.0.png"));
|
std::string imageFilename = combine(datasets_repository_path, "balance_1.0.png");
|
||||||
if (correct.empty())
|
cv::Mat correct = cv::imread(imageFilename);
|
||||||
CV_Assert(cv::imwrite(combine(datasets_repository_path, "balance_1.0.png"), undistorted));
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl;
|
||||||
else
|
|
||||||
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
throwAwayHalf(correct);
|
||||||
|
throwAwayHalf(undistorted);
|
||||||
|
|
||||||
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
double balance = 0.0;
|
double balance = 0.0;
|
||||||
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance);
|
cv::fisheye::estimateNewCameraMatrixForUndistortRectify(theK, theD, distorted.size(), cv::noArray(), newK, balance);
|
||||||
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
cv::fisheye::undistortImage(distorted, undistorted, theK, theD, newK);
|
||||||
cv::Mat correct = cv::imread(combine(datasets_repository_path, "balance_0.0.png"));
|
std::string imageFilename = combine(datasets_repository_path, "balance_0.0.png");
|
||||||
if (correct.empty())
|
cv::Mat correct = cv::imread(imageFilename);
|
||||||
CV_Assert(cv::imwrite(combine(datasets_repository_path, "balance_0.0.png"), undistorted));
|
ASSERT_FALSE(correct.empty()) << "Correct image " << imageFilename.c_str() << " can not be read" << std::endl;
|
||||||
else
|
|
||||||
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
throwAwayHalf(correct);
|
||||||
|
throwAwayHalf(undistorted);
|
||||||
|
|
||||||
|
EXPECT_MAT_NEAR(correct, undistorted, 1e-10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,7 +306,9 @@ TEST_F(fisheyeTest, undistortAndDistortImage)
|
|||||||
EXPECT_MAT_NEAR(dist_point_4, dist_point_4_gt, 1e-2);
|
EXPECT_MAT_NEAR(dist_point_4, dist_point_4_gt, 1e-2);
|
||||||
EXPECT_MAT_NEAR(dist_point_5, dist_point_5_gt, 1e-2);
|
EXPECT_MAT_NEAR(dist_point_5, dist_point_5_gt, 1e-2);
|
||||||
|
|
||||||
CV_Assert(cv::imwrite(combine(datasets_repository_path, "new_distortion.png"), image_projected));
|
// Add the "--test_debug" to arguments for file output
|
||||||
|
if (cvtest::debugLevel > 0)
|
||||||
|
cv::imwrite(combine(datasets_repository_path, "new_distortion.png"), image_projected);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(fisheyeTest, jacobians)
|
TEST_F(fisheyeTest, jacobians)
|
||||||
@ -619,19 +639,19 @@ TEST_F(fisheyeTest, stereoRectify)
|
|||||||
0.002076471801477729, 0.006463478587068991, 0.9999769555891836
|
0.002076471801477729, 0.006463478587068991, 0.9999769555891836
|
||||||
);
|
);
|
||||||
cv::Matx34d P1_ref(
|
cv::Matx34d P1_ref(
|
||||||
420.8551870450913, 0, 586.501617798451, 0,
|
420.9684016542647, 0, 586.3059567784627, 0,
|
||||||
0, 420.8551870450913, 374.7667511986098, 0,
|
0, 420.9684016542647, 374.8571836462291, 0,
|
||||||
0, 0, 1, 0
|
0, 0, 1, 0
|
||||||
);
|
);
|
||||||
cv::Matx34d P2_ref(
|
cv::Matx34d P2_ref(
|
||||||
420.8551870450913, 0, 586.501617798451, -41.77758076597302,
|
420.9684016542647, 0, 586.3059567784627, -41.78881938824554,
|
||||||
0, 420.8551870450913, 374.7667511986098, 0,
|
0, 420.9684016542647, 374.8571836462291, 0,
|
||||||
0, 0, 1, 0
|
0, 0, 1, 0
|
||||||
);
|
);
|
||||||
cv::Matx44d Q_ref(
|
cv::Matx44d Q_ref(
|
||||||
1, 0, 0, -586.501617798451,
|
1, 0, 0, -586.3059567784627,
|
||||||
0, 1, 0, -374.7667511986098,
|
0, 1, 0, -374.8571836462291,
|
||||||
0, 0, 0, 420.8551870450913,
|
0, 0, 0, 420.9684016542647,
|
||||||
0, 0, 10.07370889670733, -0
|
0, 0, 10.07370889670733, -0
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -686,7 +706,9 @@ TEST_F(fisheyeTest, stereoRectify)
|
|||||||
cv::Mat rectification;
|
cv::Mat rectification;
|
||||||
merge4(l, r, lundist, rundist, rectification);
|
merge4(l, r, lundist, rundist, rectification);
|
||||||
|
|
||||||
cv::imwrite(cv::format("fisheye_rectification_AB_%03d.png", i), 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -987,13 +1009,13 @@ TEST_F(fisheyeTest, estimateNewCameraMatrixForUndistortRectify)
|
|||||||
|
|
||||||
cv::Mat K_new_truth(3, 3, cv::DataType<double>::type);
|
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, 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, 0) = 0.0;
|
||||||
K_new_truth.at<double>(1, 1) = 373.6375700303157;
|
K_new_truth.at<double>(1, 1) = 373.6673784974842;
|
||||||
K_new_truth.at<double>(1, 2) = 538.8373261247601;
|
K_new_truth.at<double>(1, 2) = 538.794152656429;
|
||||||
|
|
||||||
K_new_truth.at<double>(2, 0) = 0.0;
|
K_new_truth.at<double>(2, 0) = 0.0;
|
||||||
K_new_truth.at<double>(2, 1) = 0.0;
|
K_new_truth.at<double>(2, 1) = 0.0;
|
||||||
|
Loading…
Reference in New Issue
Block a user