42 QString odkkey =
"INS" +
toString(naifIkCode) +
"_DISTORTION_COEFFS";
44 for(
int i = 0; i < 4; i++) {
45 p_odk.push_back(p_camera->
getDouble(odkkey, i));
64 double dxPix = p_focalPlaneX / p_camera->
PixelPitch();
65 double dyPix = p_focalPlaneY / p_camera->
PixelPitch();
69 double radialDist2 = (dxPix * dxPix) + (dyPix * dyPix);
71 if(radialDist2 <= 1.0
E-3) {
72 p_undistortedFocalPlaneX = dx;
73 p_undistortedFocalPlaneY = dy;
78 double radialDist4 = radialDist2 * radialDist2;
79 double radialDist6 = radialDist4 * radialDist2;
81 double uRadialDist = p_odk[0] + radialDist2 * p_odk[1] +
82 radialDist4 * p_odk[2] +
83 radialDist6 * p_odk[3];
86 double uxPix = dxPix * uRadialDist;
87 double uyPix = dyPix * uRadialDist;
90 p_undistortedFocalPlaneX = uxPix * p_camera->
PixelPitch();
91 p_undistortedFocalPlaneY = uyPix * p_camera->
PixelPitch();
110 p_undistortedFocalPlaneX = ux;
111 p_undistortedFocalPlaneY = uy;
116 double dxPix = GuessDx(uxPix);
117 double dyPix = uyPix;
121 double Ru = sqrt((uxPix * uxPix) + (uyPix * uyPix));
132 double Rd = sqrt((dxPix * dxPix) + (dyPix * dyPix));
134 while(fabs(delta) > 1
E-9) {
135 if(fabs(delta) > 1E30 || iter > 50) {
139 double Rd2 = Rd * Rd;
140 double Rd3 = Rd2 * Rd;
141 double Rd4 = Rd3 * Rd;
142 double Rd5 = Rd4 * Rd;
143 double Rd6 = Rd5 * Rd;
145 double fRd = p_odk[0] + Rd2 * p_odk[1] +
147 Rd6 * p_odk[3] - Ru * (1.0 / Rd);
149 double fRd2 = 2 * p_odk[1] * Rd +
161 dxPix = uxPix * (Rd / Ru);
162 dyPix = uyPix * (Rd / Ru);
164 p_focalPlaneX = dxPix * p_camera->
PixelPitch();
165 p_focalPlaneY = dyPix * p_camera->
PixelPitch();
170 double MarciDistortionMap::GuessDx(
double uX) {
172 if(fabs(uX) < 1)
return uX;
175 return (1.4101 * log(fabs(uX)));
178 else if(p_filter == 1) {
179 return (1.1039 * log(fabs(uX)));
182 else if(p_filter == 2) {
183 return (0.8963 * log(fabs(uX)) + 2.1644);
186 else if(p_filter == 3) {
187 return (1.1039 * log(fabs(uX)));
190 else if(p_filter == 4) {
191 return (1.4101 * log(fabs(uX)));