ÉãÏñ»ú±ê¶¨¹¤¾ßÏä
1.1 MatlabÉãÏñ»ú±ê¶¨¹¤¾ßÏä
¹¤¾ßÏäÏÂÔØ£ºhttp://www.vision.caltech.edu/bouguetj/calib_doc/download/index.html ˵Ã÷Îĵµ£ºhttp://www.vision.caltech.edu/bouguetj/calib_doc/ °²×°£º½«ÏÂÔØµÄ¹¤¾ßÏäÎļþtoolbox_calib.zip½âѹËõ£¬½«Ä¿Â¼toolbox_calib¿½±´µ½MatlabµÄĿ¼Ï¡£
²É¼¯Í¼Ïñ£º²É¼¯µÄͼÏñͳһÃüÃûºó£¬¿½±´µ½toolbox_calibĿ¼ÖС£ÃüÃû¹æÔòΪ»ù±¾ÃûºÍ±àºÅ£¬»ù±¾ÃûÔÚǰ£¬ºóÃæÖ±½Ó¸ú×ÅÊý×Ö±àºÅ¡£±àºÅ×î¶àΪ3λʮ½øÖÆÊý×Ö¡£
1.1.1 ±ê¶¨Ä£ÐÍ
ÄÚ²ÎÊý±ê¶¨²ÉÓõÄÄ£ÐÍÈçʽ(1-1)Ëùʾ£¬Brown»û±äÄ£ÐÍʽ(1-2)Ëùʾ¡£
?u??kx?v???0?????1????0ksky0u0??xc/zc??xc1??y/z??M?y? (1-1) v0?in?c1???cc??1????1???1??ʽÖУº(u, v)ÊÇÌØÕ÷µãµÄͼÏñ×ø±ê£¬(xc, yc, zc)ÊÇÌØÕ÷µãÔÚÉãÏñ»ú×ø±êϵµÄ×ø±ê£¬kx¡¢kyÊǽ¹¾à
¹éÒ»»¯³ÉÏñÆ½ÃæÉϵijÉÏñµã×ø±êµ½Í¼Ïñ×ø±êµÄ·Å´óϵÊý£¬ksÊǶÔÓ¦ÓÚͼÏñ×ø±êu¡¢vµÄÉãÏñ»úµÄx¡¢yÖáÖ®¼ä²»´¹Ö±´øÀ´µÄñîºÏ·Å´óϵÊý£¬(u0, v0)ÊǹâÖáÖÐÐĵãµÄͼÏñ×ø±ê¼´Ö÷µã×ø±ê£¬(xc1, yc1)Êǽ¹¾à¹éÒ»»¯³ÉÏñÆ½ÃæÉϵijÉÏñµã×ø±ê¡£ks=?ckx£¬?cÊÇÉãÏñ»úµÄʵ¼ÊyÖáÓëÀíÏëyÖáÖ®¼äµÄ¼Ð½Ç£¬µ¥Î»Îª»¡¶È¡£
24622??xc1d?xc1(1?kc1r?kc2r?kc5r)?2kc3xc1yc1?kc4(r?2xc1) (1-2) ?24622??yc1d?yc1(1?kc1r?kc2r?kc5r)?kc3(r?2yc1)?2kc4xc1yc1ʽÖУº(xc1d, yc1d)Êǽ¹¾à¹éÒ»»¯³ÉÏñÆ½ÃæÉϵijÉÏñµã»û±äºóµÄ×ø±ê£¬kc1ÊÇ2½×¾¶Ïò»û±äϵÊý£¬
kc2ÊÇ4½×¾¶Ïò»û±äϵÊý£¬kc5ÊÇ6½×¾¶Ïò»û±äϵÊý£¬kc3¡¢kc4ÊÇÇÐÏò»û±äϵÊý£¬rΪ³ÉÏñµãµ½ÉãÏñ»ú×ø±êϵԵãµÄ¾àÀ룬r2= xc12 + yc12¡£
1.1.2 ²Ù×÷½çÃæ
½«MatlabµÄµ±Ç°Ä¿Â¼É趨Ϊº¬Óб궨¹¤¾ßÏäµÄĿ¼£¬¼´toolbox_calibĿ¼¡£ÔÚMatlabÃüÁî´°¿ÚÔËÐÐcalib_guiÖ¸Áµ¯³öͼ1ËùʾѡÔñ´°¿Ú¡£
ͼ1 ÄÚ´æÊ¹Ó÷½Ê½´°¿Ú
ͼ1´°¿ÚÖУ¬¾ßÓÐÁ½¸öÑ¡Ï·Ö±ðÊÇ¡°Standard¡±ºÍ¡°Memory efficient¡±¡£Èç¹ûµã»÷Ñ¡Ôñ¡°Standard¡±£¬Ôò½«Ä¿Â¼ÖеÄËùÓÐͼÏñ¶ÁÈëÄÚ´æÖУ¬ËùÐèÄÚ´æ½Ï´ó¡£Èç¹ûµã»÷Ñ¡Ôñ¡°Memory efficient¡±£¬Ôò½«Ä¿Â¼ÖеÄͼÏñ°´ÕÕÐèҪÿ´ÎÒ»·ùͼÏñ¶ÁÈëÄÚ´æÖУ¬ËùÐèÄÚ´æ½ÏС¡£ÔÚÑ¡ÔñÁË
1
ÄÚ´æÊ¹Ó÷½Ê½ºó£¬µ¯³ö±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°å¡£Í¼2ÊÇÑ¡Ôñ¡°Standard¡±ºóµ¯³öµÄ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°å¡£
ͼ2 ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°å
ͼ2ËùʾµÄ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°å¾ßÓÐ16¸ö²Ù×÷ÃüÁî¼ü£¬Æä¹¦ÄÜÈçÏ£º
(1) ¡°Image names¡±¼ü£ºÖ¸¶¨Í¼ÏñµÄ»ù±¾Ãû(Basename)ºÍͼÏñ¸ñʽ£¬²¢½«ÏàÓ¦µÄͼÏñ¶ÁÈëÄÚ´æ¡£
(2) ¡°Read names¡±¼ü£º½«Ö¸¶¨»ù±¾ÃûºÍ¸ñʽµÄͼÏñ¶ÁÈëÄÚ´æ¡£ (3) ¡°Extract grid corners¡±¼ü£ºÌáÈ¡Íø¸ñ½Çµã¡£ (4) ¡°Calibration¡±¼ü£ºÄÚ²ÎÊý±ê¶¨¡£
(5) ¡°Show Extrinsic¡±¼ü£ºÒÔͼÐη½Ê½ÏÔʾÉãÏñ»úÓë±ê¶¨°Ð±êÖ®¼äµÄ¹ØÏµ¡£
(6) ¡°Project on images¡±¼ü£º°´ÕÕÉãÏñ»úµÄÄÚ²ÎÊýÒÔ¼°ÉãÏñ»úµÄÍâ²ÎÊý(¼´°Ð±ê×ø±êϵÏà¶ÔÓÚÉãÏñ»ú×ø±êϵµÄ±ä»»¹ØÏµ)£¬¸ù¾ÝÍø¸ñµãµÄµÑ¿¨¶û¿Õ¼ä×ø±ê£¬½«Íø¸ñ½Çµã·´Í¶Ó°µ½Í¼Ïñ¿Õ¼ä¡£
(7) ¡°Analyse error¡±¼ü£ºÍ¼Ïñ¿Õ¼äµÄÎó²î·ÖÎö (8) ¡°Recomp. corners¡±¼ü£ºÖØÐÂÌáÈ¡Íø¸ñ½Çµã¡£ (9) ¡°Add/Suppress images¡±¼ü£ºÔö¼Ó/ɾ³ýͼÏñ¡£
(10) ¡°Save¡±¼ü£º±£´æ±ê¶¨½á¹û¡£½«ÄÚ²ÎÊý±ê¶¨½á¹ûÒÔ¼°ÉãÏñ»úÓë°Ð±êÖ®¼äµÄÍâ²ÎÊý±£´æÎªmÎļþCalib_results.m£¬´æ·ÅÓÚtoolbox_calibĿ¼ÖС£
(11) ¡°Load¡±¼ü£º¶ÁÈë±ê¶¨½á¹û¡£´Ó´æ·ÅÓÚtoolbox_calibĿ¼Öеı궨½á¹ûÎļþCalib_results.mat¶ÁÈë¡£
(12) ¡°Exit¡±¼ü£ºÍ˳ö±ê¶¨¡£
(13) ¡°Comp. Extrinsic¡±¼ü£º¼ÆËãÍâ²ÎÊý¡£
(14) ¡°Undistort image¡±¼ü£ºÉú³ÉÏû³ý»û±äºóµÄͼÏñ²¢±£´æ¡£
(15) ¡°Export calib data¡±¼ü£ºÊä³ö±ê¶¨Êý¾Ý¡£·Ö±ðÒ԰бê×ø±êϵÖÐµÄÆ½Ãæ×ø±êºÍͼÏñÖеÄͼÏñ×ø±ê£¬½«Ã¿Ò»·ù°Ð±êͼÏñµÄ½Çµã±£´æÎªÁ½¸ötexÎļþ¡£
(16) ¡°Show calib results¡±¼ü£ºÏÔʾ±ê¶¨½á¹û¡£
1.1.3 ÄÚ²ÎÊý±ê¶¨
Ô¤ÏȽ«ÃüÃûΪImage1¡«Image20µÄtif¸ñʽµÄ20·ù°Ð±êͼÏñ±£´æÔÚtoolbox_calibĿ¼ÖС£µ±È»£¬²É¼¯µÄ°Ð±êͼÏñÒ²¿ÉÒÔ²ÉÓò»Í¬µÄ¸ñʽ£¬Èçbmp¸ñʽ¡¢jpg¸ñʽµÈ¡£µ«Ó¦×¢Ò⣬ÓÃÓڱ궨µÄ°Ð±êͼÏñÐèÒª²ÉÓÃÏàͬµÄͼÏñ¸ñʽ¡£ÉãÏñ»úµÄÄÚ²ÎÊý±ê¶¨¹ý³Ì£¬ÈçÏÂËùÊö¡£ (1) Ö¸¶¨Í¼Ïñ»ù±¾ÃûÓëͼÏñ¸ñʽ
ÔÚͼ2ËùʾµÄ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°åµã»÷¡°Image names¡±¼ü£¬ÔÚMatlabÃüÁî´°¿Ú·Ö±ðÊäÈë»ù±¾ÃûImageºÍͼÏñ¸ñʽt£¬³öÏÖÏÂÊö¶Ô»°ÄÚÈÝ£º
Basename camera calibration images (without number nor suffix): Image Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t
Loading image 1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18...19...20... done
ͬʱ£¬ÔÚMatlabµÄͼÐδ°¿ÚÏÔʾ³ö20·ù°Ð±êͼÏñ£¬Èçͼ3Ëùʾ¡£
2
Calibration images ͼ3 °Ð±êͼÏñ
(2) ÌáÈ¡½Çµã
ÔÚͼ2ËùʾµÄ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°åµã»÷¡°Extract grid corners¡±¼ü¡£
? ÔÚMatlabÃüÁî´°¿Ú³öÏÖ¡°Number(s) of image(s) to process ([] = all images) =¡±Ê±£¬
ÊäÈëÒª½øÐнǵãÌáÈ¡µÄ°Ð±êͼÏñµÄ±àºÅ²¢»Ø³µ¡£Ö±½Ó»Ø³µ±íʾѡÓÃȱʡֵ¡£Ñ¡Ôñȱʡֵʽ£¬¶Ô¶ÁÈëµÄËùÓеİбêͼÏñ½øÐнǵãÌáÈ¡¡£
? ÔÚMatlabÃüÁî´°¿Ú³öÏÖ¡°Window size for corner finder (wintx and winty): ¡±Ê±£¬·Ö
±ðÔÚ¡°wintx ([] = 5) =¡±ºÍ¡°winty ([] = 5) =¡±ÊäÈëÐÐÖÐÊäÈë½ÇµãÌáÈ¡ÇøÓòµÄ´°¿Ú°ë¿ímºÍ°ë¸ßn¡£mºÍnΪÕýÕûÊý£¬µ¥Î»ÎªÏñËØ£¬È±Ê¡ÖµÎª5¸öÏñËØ¡£Ñ¡¶¨mºÍnºó£¬ÃüÁî´°¿ÚÏÔʾ½ÇµãÌáÈ¡ÇøÓòµÄ´°¿Ú³ß´ç(2n+1)x(2m+1)¡£ÀýÈ磬ѡÔñȱʡʱ½ÇµãÌáÈ¡ÇøÓòµÄ´°¿Ú³ß´çΪ11x11ÏñËØ¡£ ? ÔÚMatlabÃüÁî´°¿Ú³öÏÖ¡°Do you want to use the automatic square counting mechanism
(0=[]=default) or do you always want to enter the number of squares manually (1,other)? ¡±Ê±£¬Ñ¡Ôñȱʡֵ0±íʾ×Ô¶¯¼ÆËãÆåÅ̸ñ°Ð±êÑ¡¶¨ÇøÓòÄڵķ½¸ñÐÐÊýºÍÁÐÊý£¬Ñ¡ÔñÖµ1±íʾÈ˹¤¼ÆËã²¢ÊäÈëÆåÅ̸ñ°Ð±êÑ¡¶¨ÇøÓòÄڵķ½¸ñÐÐÊýºÍÁÐÊý¡£ ? µ½ÏÔʾËùÑ¡Ôñ°Ð±êͼÏñµÄͼÐδ°¿Ú£¬ÀûÓÃÊó±êµã»÷É趨ÆåÅ̸ñ°Ð±êµÄÑ¡¶¨ÇøÓò¡£µã
»÷µÄµÚÒ»¸ö½Çµã×÷Ϊ°Ð±ê×ø±êϵµÄԵ㣬˳Ðòµã»÷4¸ö½ÇµãÐγÉËıßÐΡ£×¢Ò⣬ËùÐγɵÄËıßÐεıßÓ¦ÓëÆåÅ̸ñ°Ð±êµÄÍø¸ñÏß»ù±¾Æ½ÐС£·ñÔò£¬Ó°Ïì½ÇµãÌáÈ¡¾«¶È£¬ÉõÖÁµ¼Ö½ǵãÌáÈ¡´íÎó¡£ ? ÔÚMatlabÃüÁî´°¿Ú³öÏÖ¡°Size dX of each square along the X direction ([]=100mm) = ¡±
ºÍ¡°Size dY of each square along the Y direction ([]=100mm) = ¡±Ê±£¬·Ö±ðÊäÈë·½¸ñ³¤¶ÈºÍ¿í¶È£¬µ¥Î»Îªmm¡£·½¸ñ³¤¶ÈºÍ¿í¶ÈµÄȱʡֵ¾ùΪ100mm¡£
? ÔÚMatlabÃüÁî´°¿Ú³öÏÖ¡°Need of an initial guess for distortion? ([]=no, other=yes) ¡±
ʱ£¬Èç¹ûÑ¡ÔñnoÔò²»ÊäÈë»û±ä³õʼֵ£¬Èç¹ûÑ¡ÔñyesÔòÊäÈë»û±ä³õʼֵ¡£ÊäÈëµÄ»û±ä³õʼֵ£¬½«Í¬Ê±¸³Öµ¸øÐèÒª¹À¼ÆµÄ5¸ö»û±äϵÊý£¬¼´¾¶Ïò»û±äϵÊýkc(1)¡¢kc(2)¡¢kc(5)ºÍÇÐÏò»û±äϵÊýkc(3)¡¢kc(4)¡£Èç¹û²»¹À¼Æ6½×¾¶Ïò»û±äϵÊýkc(5)£¬Ôòkc(5)±»¸³ÖµÎª0¡£
°´ÕÕÉÏÊö²½Ö裬¶ÔÓÃÓڱ궨µÄÿһ·ù°Ð±êͼÏñ½øÐнǵãÌáÈ¡¡£ÀýÈ磬m=5£¬n=5ʱ£¬½ÇµãÌáÈ¡ÇøÓòµÄ´°¿Ú³ß´çΪ11x11ÏñËØ£¬Î´ÊäÈë»û±ä³õʼֵ£¬´ËʱͼÏñImage6µÄ½ÇµãÌáÈ¡½á¹ûÈçͼ4Ëùʾ¡£Í¼4(a)Ö»±ê³öÁË´ýÌáÈ¡½ÇµãµÄλÖã¬Í¼4(b)±ê³öÁ˽ǵãÌáÈ¡ÇøÓò´°¿ÚºÍÌáÈ¡³öµÄ½Çµã¡£´Óͼ4ÖпÉÒÔ·¢ÏÖ£¬Í¼4(a)ÖеÄÊ®×Ö±ê¼ÇλÖÃÓë½Çµã¾ßÓÐÃ÷ÏÔÆ«²î£¬µ«Ôڽǵ㸽
3
½ü£»Í¼4(b)ÖеÄÿ¸ö½ÇµãÌáÈ¡ÇøÓò´°¿Ú°üº¬Á˽ǵ㣬±íʾ½ÇµãÌáÈ¡½á¹ûµÄÊ®×Ö±ê¼ÇλÖÃÓë½ÇµãλÖþßÓкܺõÄÎǺ϶ȡ£Í¬ÑùÔÚm=5£¬n=5ʱ£¬Î´ÊäÈë»û±ä³õʼֵ£¬µ«Í¨¹ýÊó±êµã»÷É趨ÆåÅ̸ñ°Ð±êµÄÑ¡¶¨ÇøÓòʱ£¬ËùÐγɵÄËıßÐεıßÓëÆåÅ̸ñ°Ð±êµÄÍø¸ñÏ߳ɽϴó¼Ð½Ç£¬´ËʱͼÏñImage1µÄ½ÇµãÌáÈ¡½á¹ûÈçͼ5Ëùʾ¡£´Óͼ5ÖпÉÒÔ·¢ÏÖ£¬Í¼5(a)ÖеÄÊ®×Ö±ê¼ÇλÖÃÓë½Çµã¾ßÓÐÃ÷ÏÔÆ«²î£¬²¿·ÖÊ®×Ö±ê¼ÇÔ¶Àë½Çµã£»Í¼5(b)Öеĺܶà½ÇµãÌáÈ¡ÇøÓò´°¿ÚûÓаüº¬½Çµã£¬±íʾ½ÇµãÌáÈ¡½á¹ûµÄÊ®×Ö±ê¼ÇλÖò¢²»ÔڽǵãλÖã¬ËµÃ÷½ÇµãÌáÈ¡´æÔÚ´íÎó¡£
The red crosses should be close to the image corners50100150200250300350400450100200YOX300400500600
(a)
Extracted corners50100150Yc (in camera frame)200250300350400450100200300400Xc (in camera frame)500600dYOdX
(b)
ͼ4 ºÏÊʵİбêÑ¡¶¨ÇøÓòÓë½ÇµãÌáÈ¡½á¹û£¬(a) °Ð±êÑ¡¶¨ÇøÓò£¬(b) ½ÇµãÌáÈ¡½á¹û (3) ÄÚ²ÎÊý±ê¶¨
¶ÔÓÃÓڱ궨µÄÿһ·ù°Ð±êͼÏñ½øÐнǵãÌáÈ¡ºó£¬ÔÚͼ2ËùʾµÄ±ê¶¨¹¤¾ßÏä²Ù×÷Ãæ°åµã»÷¡°Calibration¡±¼ü£¬¼´¿ÉÍê³ÉÉãÏñ»úµÄÄÚ²ÎÊý±ê¶¨¡£
ÄÚ²ÎÊý±ê¶¨Ê±£¬Matlab¹¤¾ßÏäÊ×ÏȽøÐгõʼ»¯£¬¼´½«Í¼ÏñÖÐÐĵã×ø±ê×÷ΪÖ÷µã×ø±êµÄ³õʼֵ£¬²ÉÓÃÆ½Ãæ°Ð±êÍø¸ñµÄÏûʧµã¹À¼Æ³öÉãÏñ»úµÄÄÚ²ÎÊý×÷ΪÄÚ²ÎÊýµÄ³õʼֵ£¬»û±ä³õʼֵÉèΪ0¡£¾µÍ·»û±ä²ÉÓðüÀ¨¾¶Ïò»û±äºÍÇÐÏò»û±äµÄBrown»û±äÄ£ÐÍ£¬²¢¼ÙÉè6½×¾¶Ïò»û±äϵÊýkc(5)=0¡£¼ÙÉèÉãÏñ»úµÄxÖáÓëyÖáÑϸñ´¹Ö±£¬¼´Í¼Ïñ×ø±ê(u, v)Óë¹éÒ»»¯³ÉÏñÆ½ÃæÄڵijÉÏñµã×ø±ê(xc1, yc1)½âñks=0£¬ÄÚ²ÎÊý²ÉÓÃ4²ÎÊýÄ£ÐÍ¡£Êý×éest_dist(1:5)ÊÇ»û±äϵÊýkc(1:5)ÊÇ·ñ±ê¶¨µÄ±êÖ¾£¬Ö»¶Ô±ê־ȡֵΪ1µÄ»û±äϵÊý±ê¶¨£¬±ê־ȡֵΪ0µÄ»û±äϵÊý²»±ê¶¨¡£
4