วันอังคารที่ 7 กันยายน พ.ศ. 2553

finding intrinsic parameter [ K ] and extrinsic parameter [ R, t ] ( camera calibration ) with OpenCV

เด๋วนี้ อะไรๆ ก็ง่าย ไม่ต้องไป mark จุด ใน matlab library ให้เมื่อยตุ้ม

โปรแกรมนี้นี้มาจากการรวมพลังกันของ 3 ฟังก์ชั่น นั่นคือ cvFindChessboardCorners, cvFindCornerSubPix, และ cvCalibrateCamera2

ซึ่งอันที่จริงแล้ว cvCalibrateCamera2 กับ cvFindExtrinsicCameraParams2 เหมือนกันนะอิอิ ถ้ารู้ intrinsic parameter มาแล้ว หนีไปใช้ cvFindExtrinsicCameraParams2 เพื่อหา rotation vector กับ translation vector ก็ได้

อยู่ใน demo ของ opencv version 2.0 นั่นแหละ

วิธีใช้ จ้า

ไม่บอก [input] อะไรแสดงว่า ใช้ค่าจาก webcam
$ ./calibration.o -w 8 -h 6 [input] 
[input] จะใส่เป็นไฟล์วีดีโอ
หรือ จะใส่ [input] เป็นไฟล์ calib.txt ก็ได้

calib.txt
/mnt/disk/AIT/Thesis/image/sonycam/DSC08606.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08607.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08608.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08609.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08610.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08611.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08612.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08613.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08614.JPG
/mnt/disk/AIT/Thesis/image/sonycam/DSC08615.JPG
เคล็ดลับอยู่ที่เลข w กับ h เป็น เลข 8 กับ เลข 6 ถ้าใช้ calibration board [ pdf หรือ eps ] จาก caltech.edu ถ้าใส่เลขมั่วๆ มันจะหา chessboard ไม่เจอ


ส่วนวิธีเช็คว่า rotation vector กับ translation vector ที่ออกมานั้น ได้ถูกหรือเปล่า อธิบายได้จากรูปข้างล่าง

นี่คือ ค่าที่ได้
rotation_vector = [-3.02092 -0.112161 -0.0672419 ;]
translation_vector = [-5.44087 1.38825 14.4339 ;]
rotation หมุนไปทาง x ประมาณ 3 rad (180 degree)




ปล แกนน้ำเงิน z น่าจะพุ่งออกมากกว่า นะ รูปผิดๆ

ไม่มีความคิดเห็น:

LinkWithin

Related Posts Plugin for WordPress, Blogger...