Skip to content
Snippets Groups Projects
Commit 0917cec8 authored by Oleg Alexandrov's avatar Oleg Alexandrov
Browse files

Fix conflict

parents 45c8ee47 4c8ce703
No related branches found
No related tags found
No related merge requests found
...@@ -165,13 +165,11 @@ void removeDistortion(double dx, double dy, double &ux, double &uy, ...@@ -165,13 +165,11 @@ void removeDistortion(double dx, double dy, double &ux, double &uy,
case RADIAL: { case RADIAL: {
double rr = dx * dx + dy * dy; double rr = dx * dx + dy * dy;
if (rr > tolerance) {
double dr = opticalDistCoeffs[0] + double dr = opticalDistCoeffs[0] +
(rr * (opticalDistCoeffs[1] + rr * opticalDistCoeffs[2])); (rr * (opticalDistCoeffs[1] + rr * opticalDistCoeffs[2]));
ux = dx * (1.0 - dr); ux = dx * (1.0 - dr);
uy = dy * (1.0 - dr); uy = dy * (1.0 - dr);
}
} break; } break;
// Computes undistorted focal plane (x,y) coordinates given a distorted // Computes undistorted focal plane (x,y) coordinates given a distorted
...@@ -363,13 +361,12 @@ void applyDistortion(double ux, double uy, double &dx, double &dy, ...@@ -363,13 +361,12 @@ void applyDistortion(double ux, double uy, double &dx, double &dy,
switch (distortionType) { switch (distortionType) {
// Compute distorted focal plane coordinate given undistorted // Compute distorted focal plane coordinate given undistorted
// focal plane coordinate. This case works by iteratively adding distortion // focal plane coordinates. This case works by iteratively adding distortion
// until the new distorted point, r, undistorts to within a tolerance of the // until the new distorted point, r, undistorts to within a tolerance of the
// original point, rp. // original point, rp.
case RADIAL: { case RADIAL: {
double rp2 = (ux * ux) + (uy * uy); double rp2 = (ux * ux) + (uy * uy);
if (rp2 > tolerance) {
double rp = sqrt(rp2); double rp = sqrt(rp2);
// Compute first fractional distortion using rp // Compute first fractional distortion using rp
double drOverR = double drOverR =
...@@ -407,7 +404,7 @@ void applyDistortion(double ux, double uy, double &dx, double &dy, ...@@ -407,7 +404,7 @@ void applyDistortion(double ux, double uy, double &dx, double &dy,
dx = ux / (1.0 - drOverR); dx = ux / (1.0 - drOverR);
dy = uy / (1.0 - drOverR); dy = uy / (1.0 - drOverR);
}
} break; } break;
case TRANSVERSE: { case TRANSVERSE: {
computeTransverseDistortion(ux, uy, dx, dy, opticalDistCoeffs); computeTransverseDistortion(ux, uy, dx, dy, opticalDistCoeffs);
......
...@@ -124,17 +124,26 @@ TEST(transverse, removeDistortion_AlternatingOnes) { ...@@ -124,17 +124,26 @@ TEST(transverse, removeDistortion_AlternatingOnes) {
EXPECT_NEAR(uy, 7.5, 1e-8); EXPECT_NEAR(uy, 7.5, 1e-8);
} }
TEST(Radial, testRemoveDistortion) { TEST(Radial, testUndistortDistort) {
csm::ImageCoord imagePt(0.0, 4.0);
double ux, uy; // Distorted pixel
std::vector<double> coeffs = {0, 0, 0}; csm::ImageCoord imagePt(0.0, 1e-1);
// Undistort
double ux, uy;
std::vector<double> coeffs = {0.03, 0.00001, 0.000004};
double tolerance = 1e-2;
removeDistortion(imagePt.samp, imagePt.line, ux, uy, coeffs, removeDistortion(imagePt.samp, imagePt.line, ux, uy, coeffs,
DistortionType::RADIAL); DistortionType::RADIAL, tolerance);
EXPECT_NEAR(ux, 4, 1e-8); // Distort back
EXPECT_NEAR(uy, 0, 1e-8); double desiredPrecision = 1e-6;
double dx, dy;
applyDistortion(ux, uy, dx, dy, coeffs,
DistortionType::RADIAL, desiredPrecision, tolerance);
EXPECT_NEAR(dx, imagePt.samp, 1e-8);
EXPECT_NEAR(dy, imagePt.line, 1e-8);
} }
// If coeffs are 0 then this will have the same result as removeDistortion // If coeffs are 0 then this will have the same result as removeDistortion
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment