Move the sources to trunk
[opencv] / docs / appPage / Calibration / cam_model.htm
1 <HTML>\r
2   <HEAD>\r
3     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">\r
4     <META NAME="GENERATOR" CONTENT="Mozilla/4.03 [en] (WinNT; U) [Netscape]">\r
5     <TITLE>Camera Calibration Tool - Camera Model</TITLE>\r
6     <!-- Changed by: Ara V. Nefian, May 31-2000 -->\r
7     <!-- Formatted and proofed in GNU Emacs by: Michael Chu, 00.06.03 -->\r
8   </HEAD>\r
9   <BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000CC" VLINK="#0000FF" ALINK="#FF0000">\r
10     <a name="top">\r
11       <!-- <CENTER>\r
12     <BLOCKQUOTE>\r
13     <table border = 3 WIDTH="70%" >\r
14     <TR><TD>\r
15       -->\r
16     <CENTER><TABLE CELLSPACING=0 CELLPADDING=5 WIDTH="90%" BGCOLOR="#6A9BED" NOSAVE >\r
17         <TR NOSAVE>\r
18           <TD NOSAVE>\r
19             <CENTER><I><FONT COLOR="#000000"><FONT SIZE=+4>Camera Calibration Tool - Camera Model</FONT></FONT></I></CENTER>\r
20           </TD>\r
21         </TR>\r
22       </TABLE></CENTER>\r
23     <!--\r
24   </TD></TR>\r
25   </table>\r
26     </BLOCKQUOTE>\r
27   </center>\r
28     -->\r
29     <H1>Description of the intrinsic camera model</H1>\r
30 \r
31 \r
32     <P>After calibration, the intrinsic camera model may be saved into a text file by clicking on the "Save" button in the <a href="doc_calib.html#properties" target="application window">property control window</a>. An example of such a file is <a href="CalibResult.txt">CalibResult.txt</a>:\r
33 \r
34 <BR><BR>\r
35 \r
36 <tt>\r
37 Camera Matrix:<BR>\r
38 M[0,0]= 286.2791138       M[0,1]= 0.0000000          M[0,2]= 156.6844177<BR>\r
39 M[1,0]= 0.0000000         M[1,1]= 287.7630615        M[1,2]= 130.9805145<BR>\r
40 M[2,0]= 0.0000000         M[2,1]= 0.0000000          M[2,2]= 1.0000000<BR>\r
41 <BR>\r
42 <BR>\r
43 Distortion:<BR>\r
44 D[0]= -0.416691<BR>\r
45 D[1]= 0.250142<BR>\r
46 D[2]= -0.000386<BR>\r
47 D[3]= -0.001894<BR>\r
48 </tt>\r
49 \r
50 <BR>\r
51 This complete intrinsic camera model is encoded with the matrix <b>M</b> (also known as camera matrix) and the vector <b>D</b> (distortion vector). \r
52 \r
53 <p><br><font size=+1>Definition of the intrinsic parameters:</font>\r
54 <BR><BR>\r
55 Let us make slight changes in notation: (numerical values are included for clarity purposes only - when running calibration on your camera, you will naturally obtain a different set of numerics)<BR>\r
56 \r
57 <ul>\r
58 <li>\r
59 <b><font size=+0>Focal length:</font></b> The focal length in pixels is the 2x1 vector <b>fc = [ M[0,0] ; M[1,1] ] = [286.3 ; 287.8]</b>.\r
60 <!-- The quantities <b>fc(1)</b> and <b>fc(2)</b> are the horizontal and vertical focal length (in x and y) in pixels. --></li>\r
61 \r
62 <li>\r
63 <b><font size=+0>Principal point:</font></b> The principal point in pixels is the 2x1 vector <b>cc = [ M[0,2] ; M[1,2] ] = [156.7 ; 131]</b>.</li>\r
64 \r
65 <li>\r
66 <b><font size=+0>Skew coefficient:</font></b> The skew coefficient related to the angle between the x and y pixel axes is the scalar <b>s = M[0,1] = 0</b>.</li>\r
67 \r
68 <li>\r
69 <b><font size=+0>Distortion:</font></b> The image distortion coefficients\r
70  are <b>k1 = D[0] = -0.416691</b>, <b>k2 = D[1] = 0.250142</b>, <b>p1 = D[2] = -0.000386</b> and <b>p2 = D[3] = -0.001894</b>. The coefficients <b>k1</b> and <b>k2</b> are associated to radial distortions (up to the fourth order), and <b>p1</b> and <b>p2</b> are associated to tangential distortions.</li>\r
71 </ul>\r
72 \r
73 \r
74 A zero skew (<b>s=0</b>) means that the pixels are rectangular on the\r
75 sensor. In that present release of the calibration software, the\r
76 camera model will always assume rectangular pixels (or zero\r
77 skew). This assumption is valid for most current imaging sensors. In future\r
78 releases, a complete estimation of the skew coefficient will be included.\r
79 \r
80 <br><br>\r
81 The next section provides detailed definitions of the entire set of intrinsic parameters.\r
82 \r
83 \r
84 \r
85 <p><br><font size=+1>Description of the pixel projection operator:</font>\r
86 <BR><BR>\r
87 Let us make slight changes in notation: (numerical values are included for clarity purposes only - when running calibration on your camera, you will naturally obtain a different set of numerics)<BR>\r
88 \r
89 <p>Let <b>P</b> be a point in space of coordinate vector <b>XX<sub>c</sub>\r
90 = [X<sub>c</sub>;Y<sub>c</sub>;Z<sub>c</sub>]</b> in the camera reference\r
91 frame.\r
92 <br>Let us project now that point on the image plane according to the intrinsic\r
93 parameters (<b>fc</b>,<b>cc</b>,<b>s</b>,<b>k1</b>,<b>k2</b>,<b>p1</b>,<b>p2</b>).\r
94 <br>Let <b>x<sub>n</sub></b> be the normalized (pinehole) image projection:\r
95 <br>&nbsp;\r
96 <center><table>\r
97 <tr>\r
98 <td><b>x<sub>n</sub></b></td>\r
99 <td><b> = </b></td>\r
100 \r
101 <td>\r
102 <center><table>\r
103 <tr>\r
104 <td><b>[</b></td>\r
105 </tr>\r
106 \r
107 <tr>\r
108 <td><b>[</b></td>\r
109 </tr>\r
110 <tr>\r
111 <td><b>[</b></td>\r
112 </tr>\r
113 </table></center>\r
114 </td>\r
115 \r
116 <td>\r
117 <center><table>\r
118 <tr>\r
119 <td>\r
120 <center><table><tr><td>\r
121 <b>X<sub>c</sub>/Z<sub>c</sub></b>\r
122 </td></tr></table></center>\r
123 </td>\r
124 </tr>\r
125 \r
126 <tr>\r
127 <td>\r
128 <center><table><tr><td>\r
129 <b>Y<sub>c</sub>/Z<sub>c</sub></b>\r
130 </td></tr></table></center>\r
131 </td>\r
132 </tr>\r
133 </table></center>\r
134 </td>\r
135 \r
136 <td>\r
137 <center><table>\r
138 <tr>\r
139 <td><b>]</b></td>\r
140 </tr>\r
141 \r
142 <tr>\r
143 <td><b>]</b></td>\r
144 </tr>\r
145 <tr>\r
146 <td><b>]</b></td>\r
147 </tr>\r
148 </table></center>\r
149 </td>\r
150 \r
151 <td><b>=&nbsp;</b></td>\r
152 \r
153 <td>\r
154 <center><table>\r
155 <tr>\r
156 <td><b>[</b></td>\r
157 </tr>\r
158 \r
159 <tr>\r
160 <td><b>[</b></td>\r
161 </tr>\r
162 <tr>\r
163 <td><b>[</b></td>\r
164 </tr>\r
165 </table></center>\r
166 </td>\r
167 \r
168 <td>\r
169 <center><table>\r
170 <tr>\r
171 <td>\r
172 <center><table><tr><td>\r
173 <b>x</b>\r
174 </td></tr></table></center>\r
175 </td>\r
176 </tr>\r
177 \r
178 <tr>\r
179 <td>\r
180 <center><table><tr><td><center><table><tr><td>\r
181 <b>y</b>\r
182 </td></tr></table></center></td></tr></table></center>\r
183 </td>\r
184 </tr>\r
185 </table></center>\r
186 </td>\r
187 \r
188 <td>\r
189 <center><table>\r
190 <tr>\r
191 <td><b>]</b></td>\r
192 </tr>\r
193 \r
194 <tr>\r
195 <td><b>]</b></td>\r
196 </tr>\r
197 <tr>\r
198 <td><b>]</b></td>\r
199 </tr>\r
200 </table></center>\r
201 </td>\r
202 </tr>\r
203 </table></center>\r
204 \r
205 <p>Let <b>r<sup>2</sup> = x<sup>2</sup> + y<sup>2</sup></b>.\r
206 <br>After including lens distortion, the new normalized point coordinate\r
207 <b>x<sub>d</sub></b>\r
208 is defined as follows:\r
209 \r
210 <center>\r
211 <table>\r
212 <tr>\r
213 \r
214 <td>\r
215 <b>x<sub>d</sub> \r
216 </td>\r
217 \r
218 <td>\r
219 <b> = </b>\r
220 </td>\r
221 \r
222 <td>\r
223 <center><table>\r
224 <tr>\r
225 <td><b>[</b></td>\r
226 </tr>\r
227 <tr>\r
228 <td><b>[</b></td>\r
229 </tr>\r
230 <tr>\r
231 <td><b>[</b></td>\r
232 </tr>\r
233 </table></center>\r
234 </td>\r
235 \r
236 \r
237 <td>\r
238 <center><table>\r
239 <tr>\r
240 <td><center><b>x<sub>d</sub>(1)</b></center></td>\r
241 </tr>\r
242 <tr>\r
243 <td><center><b>x<sub>d</sub>(2)</b></center></td>\r
244 </tr>\r
245 </table></center>\r
246 </td>\r
247 \r
248 \r
249 <td>\r
250 <center><table>\r
251 <tr>\r
252 <td><b>]</b></td>\r
253 </tr>\r
254 <tr>\r
255 <td><b>]</b></td>\r
256 </tr>\r
257 <tr>\r
258 <td><b>]</b></td>\r
259 </tr>\r
260 </table></center>\r
261 </td>\r
262 \r
263 <td>\r
264 <b>=</b>\r
265 </td>\r
266 \r
267 <td>\r
268 <b>(1 + k1*r<sup>2</sup> + k2*r<sup>4</sup>) * x<sub>n</sub> + dx</b>\r
269 </td>\r
270 \r
271 </tr>\r
272 </table>\r
273 </center>\r
274 \r
275 \r
276 <p>where <b>dx</b> is the tangential distortion vector:\r
277 <br>&nbsp;\r
278 <center><table>\r
279 <tr>\r
280 <td><b>dx</b></td>\r
281 <td><b> = </b></td>\r
282 \r
283 <td>\r
284 <center><table>\r
285 <tr>\r
286 <td><b>[</b></td>\r
287 </tr>\r
288 \r
289 <tr>\r
290 <td><b>[</b></td>\r
291 </tr>\r
292 <tr>\r
293 <td><b>[</b></td>\r
294 </tr>\r
295 </table></center>\r
296 </td>\r
297 \r
298 <td>\r
299 <center><table>\r
300 <tr>\r
301 <td>\r
302 <center><table><tr><td>\r
303 <b>2*p1*x*y + p2*(r<sup>2</sup> + 2*x<sup>2</sup>)</b>\r
304 </td></tr></table></center>\r
305 </td>\r
306 </tr>\r
307 \r
308 <tr>\r
309 <td>\r
310 <center><table><tr><td>\r
311 <b>p1*(r<sup>2</sup> + 2*y<sup>2</sup>) + 2*p2*x*y</b>\r
312 </td></tr></table></center>\r
313 </td>\r
314 </tr>\r
315 </table></center>\r
316 </td>\r
317 \r
318 <td>\r
319 <center><table>\r
320 <tr>\r
321 <td><b>]</b></td>\r
322 </tr>\r
323 \r
324 <tr>\r
325 <td><b>]</b></td>\r
326 </tr>\r
327 <tr>\r
328 <td><b>]</b></td>\r
329 </tr>\r
330 </table></center>\r
331 </td>\r
332 </tr>\r
333 </table></center>\r
334 \r
335 \r
336 It is worth noticing that this distortion model was first introduced\r
337 by Brown in 1966 and called "Plumb Bob" model (radial polynomial +\r
338 "thin prism" ). The tangential distortion is due to "decentering", or imperfect centering of the lens components and other manufacturing defects in a compound lens.\r
339 \r
340 <p>Once distortion is applied, the final pixel coordinates <b>x_pixel = [x<sub>p</sub>;y<sub>p</sub>]</b>\r
341 of the projection of <b>P</b> on the image plane is:\r
342 <br>&nbsp;\r
343 <center><table>\r
344 <tr>\r
345 <td>\r
346 <align="left"><b>x<sub>p</sub> = fc(1)*x<sub>d</sub>(1) + s*x<sub>d</sub>(2) + cc(1)</b></align>\r
347 </td>\r
348 </tr>\r
349 \r
350 <tr>\r
351 <td>\r
352 <align="left"><b>y<sub>p</sub> = fc(2)*x<sub>d</sub>(2) + cc(2)</b></align>\r
353 </td>\r
354 </tr>\r
355 </table></center>\r
356 \r
357 <BR>\r
358 \r
359 Therefore, the pixel coordinate vector <b>x_pixel</b> and the normalized (distorted) coordinate vector <b>x<sub>d</sub></b> are related to each other through the linear equation:\r
360 <BR>\r
361 <center>\r
362 <table>\r
363 <tr>\r
364 <td>\r
365 <center><table>\r
366 <tr>\r
367 <td><b>[</b></td>\r
368 </tr>\r
369 <tr>\r
370 <td><b>[</b></td>\r
371 </tr>\r
372 <tr>\r
373 <td><b>[</b></td>\r
374 </tr>\r
375 <tr>\r
376 <td><b>[</b></td>\r
377 </tr>\r
378 </table></center>\r
379 </td>\r
380 \r
381 \r
382 <td>\r
383 <center><table>\r
384 <tr>\r
385 <td><center><b>x<sub>p</sub></b></center></td>\r
386 </tr>\r
387 <tr>\r
388 <td><center><b>y<sub>p</sub></b></center></td>\r
389 </tr>\r
390 <tr>\r
391 <td><center><b>1</b></td>\r
392 </tr>\r
393 </table></center>\r
394 </td>\r
395 \r
396 \r
397 <td>\r
398 <center><table>\r
399 <tr>\r
400 <td><b>]</b></td>\r
401 </tr>\r
402 <tr>\r
403 <td><b>]</b></td>\r
404 </tr>\r
405 <tr>\r
406 <td><b>]</b></td>\r
407 </tr>\r
408 <tr>\r
409 <td><b>]</b></td>\r
410 </tr>\r
411 </table></center>\r
412 </td>\r
413 \r
414 \r
415 <td>\r
416 <center><b>=</b></center>\r
417 </td>\r
418 \r
419 \r
420 <td>\r
421 <center><b>M</b></center>\r
422 </td>\r
423 <td>\r
424 <center><b>.</b></center>\r
425 </td>\r
426 \r
427 <td>\r
428 <center><table>\r
429 <tr>\r
430 <td><b>[</b></td>\r
431 </tr>\r
432 <tr>\r
433 <td><b>[</b></td>\r
434 </tr>\r
435 <tr>\r
436 <td><b>[</b></td>\r
437 </tr>\r
438 <tr>\r
439 <td><b>[</b></td>\r
440 </tr>\r
441 </table></center>\r
442 </td>\r
443 \r
444 \r
445 <td>\r
446 <center><table>\r
447 <tr>\r
448 <td><center><b>x<sub>d</sub>(1)</b></center></td>\r
449 </tr>\r
450 <tr>\r
451 <td><center><b>x<sub>d</sub>(2)</b></center></td>\r
452 </tr>\r
453 <tr>\r
454 <td><center><b>1</b></center></td>\r
455 </tr>\r
456 </table></center>\r
457 </td>\r
458 \r
459 \r
460 <td>\r
461 <center><table>\r
462 <tr>\r
463 <td><b>]</b></td>\r
464 </tr>\r
465 <tr>\r
466 <td><b>]</b></td>\r
467 </tr>\r
468 <tr>\r
469 <td><b>]</b></td>\r
470 </tr>\r
471 <tr>\r
472 <td><b>]</b></td>\r
473 </tr>\r
474 </table></center>\r
475 </td>\r
476 \r
477 \r
478 </tr>\r
479 </table>\r
480 </center>\r
481 <BR>\r
482 where <b>M</b> is known as the camera matrix, and defined as follows:\r
483 \r
484 <BR>\r
485 \r
486 \r
487 <center>\r
488 <table>\r
489 \r
490 <tr>\r
491 \r
492 <td>\r
493 <center><b>M</b></center>\r
494 </td>\r
495 \r
496 <td>\r
497 <center><b>=</b></center>\r
498 </td>\r
499 \r
500 \r
501 <td>\r
502 <center><table>\r
503 <tr>\r
504 <td><b>[</b></td>\r
505 </tr>\r
506 <tr>\r
507 <td><b>[</b></td>\r
508 </tr>\r
509 <tr>\r
510 <td><b>[</b></td>\r
511 </tr>\r
512 <tr>\r
513 <td><b>[</b></td>\r
514 </tr>\r
515 <tr>\r
516 <td><b>[</b></td>\r
517 </tr>\r
518 </table></center>\r
519 </td>\r
520 \r
521 \r
522 <td>\r
523 <center>\r
524 <table>\r
525 \r
526 <tr>\r
527 <td>\r
528 <center><table><tr><td><center><table><tr><td>\r
529 <center><b>fc(1)</b></center>\r
530 </td></tr></table></center></td></tr></table></center>\r
531 </td>\r
532 <td>\r
533 <center><table><tr><td><center><table><tr><td>\r
534 <center><b>s</b><center>\r
535 </td></tr></table></center></td></tr></table></center>\r
536 </td>\r
537 <td>\r
538 <center><table><tr><td><center><table><tr><td>\r
539 <center><b>cc(1)</b><center>\r
540 </td></tr></table></center></td></tr></table></center>\r
541 </td>\r
542 </tr>\r
543 <tr>\r
544 <td>\r
545 <center><table><tr><td><center><table><tr><td>\r
546 <center><b>0</b><center>\r
547 </td></tr></table></center></td></tr></table></center>\r
548 </td>\r
549 <td>\r
550 <center><table><tr><td><center><table><tr><td>\r
551 <center><b>fc(2)</b><center>\r
552 </td></tr></table></center></td></tr></table></center>\r
553 </td>\r
554 <td>\r
555 <center><table><tr><td><center><table><tr><td>\r
556 <center><b>cc(2)</b><center>\r
557 </td></tr></table></center></td></tr></table></center>\r
558 </td>\r
559 </tr>\r
560 <tr>\r
561 <td>\r
562 <center><table><tr><td><center><table><tr><td>\r
563 <center><b>0</b><center>\r
564 </td></tr></table></center></td></tr></table></center>\r
565 </td>\r
566 <td>\r
567 <center><table><tr><td><center><table><tr><td>\r
568 <center><b>0</b><center>\r
569 </td></tr></table></center></td></tr></table></center>\r
570 </td>\r
571 <td>\r
572 <center><table><tr><td><center><table><tr><td>\r
573 <center><b>1</b><center>\r
574 </td></tr></table></center></td></tr></table></center>\r
575 </td>\r
576 </tr>\r
577 </table>\r
578 </center>\r
579 </td>\r
580 \r
581 \r
582 <td>\r
583 <center><table>\r
584 <tr>\r
585 <td><b>]</b></td>\r
586 </tr>\r
587 <tr>\r
588 <td><b>]</b></td>\r
589 </tr>\r
590 <tr>\r
591 <td><b>]</b></td>\r
592 </tr>\r
593 <tr>\r
594 <td><b>]</b></td>\r
595 </tr>\r
596 <tr>\r
597 <td><b>]</b></td>\r
598 </tr>\r
599 </table></center>\r
600 </td>\r
601 \r
602 </tr>\r
603 \r
604 </table>\r
605 </center>\r
606 \r
607 <BR>Observe that this matrix is exactly the same as the one appearing in the original text file generated by the calibration tool \r
608 Notice that <b>fc(1)</b> and <b>fc(2)</b> are the focal\r
609 distance (a unique value if expressed in mm) expressed in units of horizontal and vertical\r
610 pixels. Therefore, the camera model naturally handles non-square\r
611 pixels. In addition, the coefficient <b>s</b> encodes the angle\r
612 between the x and y sensor axes. Consequently, this generic model allows for non-rectangular pixels (altough this release of the software does not explicitly estimate the skew coefficient - future ones will). Some authors refer to that generic type of model as\r
613 "affine distortion" model. \r
614 \r
615 <p><i>Convention: </i>The pixel coordinates are defined such that <b>[0;0]</b> is the\r
616 upper left pixel of the image (the center of the pixel),\r
617 <b>[nx-1;0]</b> is the upper right corner pixel, <b>[0;ny-1]</b> is\r
618 the lower left corner pixel and <b>[nx-1;ny-1]</b> is the lower right\r
619 corner pixel where <b>nx</b> and <b>ny</b> are the width and height of\r
620 the image (for example <b>nx=640</b> and\r
621 <b>ny=480</b>).\r
622 <BR>\r
623 <BR>\r
624 \r
625 For more information, refer to the <a href="calib_doc/index.html">tutorial page</a> on Camera Calibration and try the Matlab implementation provided with it.\r
626 \r
627 \r
628 <BR><BR>\r
629 \r
630 <HR noshade>\r
631 \r
632 <br>\r
633 <FONT SIZE=+3><a href="doc_calib.html" target="application window">Back to main camera calibration page</A></FONT>\r
634 \r
635 \r
636     <br><br>\r
637     <hr noshade size=2 width=100%>\r
638     <H3>\r
639       <A NAME="Bottom"></A><A HREF="#Top">Back to Top<IMG SRC="up.gif" BORDER=0 HEIGHT=26 WIDTH=30></A></H3>\r
640 \r
641 \r
642   </BODY>\r
643 </HTML>\r