156 template <
typename T>
165 template <
typename T,
typename POINT>
176 v.x__ =
v.x_ *
v.K + 2 * p1 * xy + p2 * (3 *
v.x_2 +
v.y_2);
177 v.y__ =
v.y_ *
v.K + p1 * (
v.x_2 + 3 *
v.y_2) + 2 * p2 * xy;
180 template <
typename T,
typename POINT,
typename PIXEL>
188 template <
typename T,
typename PIXEL>
196 template <
typename T,
typename POINT,
typename MATRIX>
204 template <
typename T,
typename POINT,
typename MATRIX>
213 T tmpKx = tmpK * tmp.
x_;
214 T tmpKy = tmpK * tmp.
y_;
215 T yx2 = -pIn[1] * x_2;
216 T zx2 = -pIn[2] * x_2;
217 J21.set_unsafe(0, 0, yx2);
218 J21.set_unsafe(0, 1, x_);
219 J21.set_unsafe(0, 2, 0);
220 J21.set_unsafe(1, 0, zx2);
221 J21.set_unsafe(1, 1, 0);
222 J21.set_unsafe(1, 2, x_);
223 J21.set_unsafe(2, 0, tmpKx * yx2 + tmpKy * zx2);
224 J21.set_unsafe(2, 1, tmpKx * x_);
225 J21.set_unsafe(2, 2, tmpKy * x_);
232 J43.set_unsafe(0, 0, fx * (tmp.
K + 2 * p1y + 6 * p2x));
233 J43.set_unsafe(0, 1, fx * pxpy);
234 J43.set_unsafe(0, 2, fx * tmp.
x_);
235 J43.set_unsafe(1, 0, fy * pxpy);
236 J43.set_unsafe(1, 1, fy * (tmp.
K + 6 * p1y + 2 * p2x));
237 J43.set_unsafe(1, 2, fy * tmp.
y_);
238 mOut.multiply(J43, J21);
251 res.set_unsafe(0, 1, 0);
252 res.set_unsafe(1, 0, 0);
258 res.set_unsafe(0, 0, 1);
259 res.set_unsafe(0, 1, 0);
260 res.set_unsafe(1, 0, 0);
261 res.set_unsafe(1, 1, 1);
267 res.set_unsafe(0, 1, 0);
268 res.set_unsafe(0, 2, 0);
269 res.set_unsafe(1, 0, 0);
270 res.set_unsafe(1, 2, 0);
271 res.set_unsafe(2, 0, 0);
272 res.set_unsafe(2, 1, 0);
273 res.set_unsafe(2, 2, 1);
274 res.set_unsafe(2, 3, 0);
279 template <
typename POINTIN,
typename POINTOUT,
typename MAT22>
281 const POINTIN& pIn, POINTOUT& pOut, MAT22& jOut)
const
315 tmp1[0] = (pIn[0] - cx) * ifx;
316 tmp1[1] = (pIn[1] - cy) * ify;
317 J1.set_unsafe(0, 0, ifx);
318 J1.set_unsafe(1, 1, ify);
322 double K12 = sK1 - K2;
323 double K123 = -K1 * sK1 + 2 * K1 * K2 - K3;
325 tmp1[3] = 1 + tmp1[2] * (-K1 + tmp1[2] * (K12 + tmp1[2] * K123));
326 J2.set_unsafe(2, 0, 2 * tmp1[0]);
327 J2.set_unsafe(2, 1, 2 * tmp1[1]);
328 double jTemp = -2 * K1 + 4 * tmp1[2] * K12 + 6 *
square(tmp1[2]) * K123;
329 J2.set_unsafe(3, 0, tmp1[0] * jTemp);
330 J2.set_unsafe(3, 1, tmp1[1] * jTemp);
333 tmp2[0] = tmp1[0] * tmp1[3];
334 tmp2[1] = tmp1[1] * tmp1[3];
335 J3.set_unsafe(0, 0, tmp1[3]);
336 J3.set_unsafe(0, 3, tmp1[0]);
337 J3.set_unsafe(1, 1, tmp1[3]);
338 J3.set_unsafe(1, 3, tmp1[1]);
341 double prod = tmp2[0] * tmp2[1];
343 pOut[0] = tmp2[0] - p1 * prod - p2 * (tmp1[2] + 2 *
square(tmp2[0]));
344 pOut[1] = tmp2[1] - p1 * (tmp1[2] + 2 *
square(tmp2[1])) - p2 * prod;
345 J4.set_unsafe(0, 0, 1 - p1 * tmp2[1] - 4 * p2 * tmp2[0]);
346 J4.set_unsafe(0, 1, -p1 * tmp2[0]);
347 J4.set_unsafe(0, 2, -p2);
348 J4.set_unsafe(1, 0, -p2 * tmp2[1]);
349 J4.set_unsafe(1, 1, 1 - 4 * p1 * tmp2[1] - p2 * tmp2[0]);
350 J4.set_unsafe(1, 2, -p1);
353 jOut.multiply_ABC(J4, J3, J2);
357 jOut.multiply(jOut, J1);
364 #endif //__CCamModel_H