はじめに
当サイトでは、2D/3DのOpenCVプログラムを一つのプロジェクトに纏めて作成しています。また、Input/Output Dataはプロジェクト内で共有されています。本稿では、カメラ校正に使うインプットファイルと校正後のアウトプットファイルについて、解説します。インプット/アウトプットファイルを以下の4項目に分けて説明します。
- Input Data File for Camera Calibration
- Image List
- Output Data File for Camera Calibration
- Output Data File for Stereo Calibration
それでは、参りましょう。
Input Data File for Camera Calibration について、ひとこと。
Input Data File Command Format は以下の2項目が基本です。
Comments & Remarks: <!-- ( Comments & Remarks ) -->
これはコメントのフォーマット。通常「( Comments & Remarks )」に Commands の説明があります。
Commands: < ( Command Name or Parameter ) > (Numerical Value for Parameter) </ ( Command Name or Parameter ) >
通常、上記の Comments & Remarks (説明) の直下に Commends ラインがあります。「(Numerical Value or Parameter)」に具体的な数値などを入力します。
下記のファイルにサンプルの Input Data がありますので、ご参照ください。
Sample File & Location: ../samples\cpp/tutorial_code/calib3d/camera_calibration/in_VID5.xml
Image List について、ひとこと。
ここで表示している Image List は Stereo Calibration に使用されています。入力は手動で行い、プログラム実行中の画像の保存は、ここに列記してある「画像」ファイル名の通りに行います。
Filename:stereo_calib0.xml
<?xml version="1.0"?> <opencv_storage> <imagelist> "leftImage0.jpg" "rightImage0.jpg" "leftImage1.jpg" "rightImage1.jpg" "leftImage2.jpg" "rightImage2.jpg" "leftImage3.jpg" "rightImage3.jpg" "leftImage4.jpg" "rightImage4.jpg" "leftImage5.jpg" "rightImage5.jpg" "leftImage6.jpg" "rightImage6.jpg" "leftImage7.jpg" "rightImage7.jpg" "leftImage8.jpg" "rightImage8.jpg" "leftImage9.jpg" "rightImage9.jpg" "leftImage10.jpg" "rightImage10.jpg" "leftImage11.jpg" "rightImage11.jpg" "leftImage12.jpg" "rightImage12.jpg" "leftImage13.jpg" "rightImage13.jpg" "leftImage14.jpg" "rightImage14.jpg" </imagelist> </opencv_storage>
Output Data File for Camera Calibration について、ひとこと。
2D Camera Calibration の出力ファイルでは、Camera Matrix の焦点距離のみを使用しています。OpenCV 3 の機能上 fx = fy となっています。また、ファイル名はプログラム中で決めています。
Camera Matrix: [fx, 0, cx, 0, fy, cy, 0, 0, 1]
fx, fy: Focal Length in pixel unit cx, cy: Principal Point, usually at image center
下記のファイルにサンプルの Output Data がありますので、ご参照ください。
Sample File & Location:
../samples/cpp/tutorial_code/calib3d/camera_calibration/out_camera_data.yml
詳しくは、The OpenCV Tutorials, Release 3.0.0-tp2
CALIB3D MODULE. CAMERA CALIBRATION AND 3D RECONSTRUCTION を参照してください。
Output Data File for Stereo Calibration について、ひとこと。
Stereo Calibration 実行時に、Output Data File として、「intrinsics.yml」と「extrinsics.yml」が作成されます。
「intrinsics.yml」
このファイルには、M1, D1, M2, D2 の順にデータが列記されています。
M1, D1 は第1カメラの Camera Matrix と Distortion Matrix、
M2, D2 は第2カメラの Camera Matrix と Distortion Matrix
となります。
M1, M2: Camera Matrix (残念ながら、OpenCV 3では左右カメラで同一のパラメーターと仮定しています。) Camera Matrix = [fx, 0, cx; 0, fy, cy; 0, 0, 1]
fx, fy: Focal Length in pixel unit cx, cy: principal point, usually at image center
D1, D2: Distortion Matrix (左右カメラの歪係数) Distortion Matrix = (k1,k2,p1,p2[,k3[,k4,k5,k6],[s1,s2,s3,s4]])
詳しくは、「The OpenCV Reference Manual, Release 3.0.0-tp CALIB3D. CAMERA CALIBRATION AND 3D RECONSTRUCTION 」を参照してください。
「extrinsics.yml」
このファイルには、Rotation matrix, Translation vector, Rectification transform, Projection matrix, Disparity-to-depth mapping の順にデータが列記されています。
R– Rotation matrix between the coordinate systems of the first and the second cameras. (2台のカメラ間のRotation Matrix) T– Translation vector between coordinate systems of the cameras. (2台のカメラ間のTranslation Vector) R1– Output 3x3 rectification transform (rotation matrix) for the first camera. (第1カメラの校正-Transform) R2– Output 3x3 rectification transform (rotation matrix) for the second camera. (第2カメラの校正-Transform) P1 – Output 3x4 projection matrix in the new (rectified) coordinate systems for the first camera. (第1カメラのProjection Matrix) P2 – Output 3x4 projection matrix in the new (rectified) coordinate systems for the second camera. (第2カメラのProjection Matrix) Q– Output 4×4 disparity-to-depth mapping matrix (see reprojectImageTo3D() ). (Disparity-to-Depth Mapping)
詳しくは、The OpenCV Reference Manual, Release 3.0.0-tp
CALIB3D. CAMERA CALIBRATION AND 3D RECONSTRUCTION を参照してください。
まとめ
如何でしたか。本稿では、カメラ校正に使うインプットファイルと校正後のアウトプットファイルについて、解説しました。最後までお読みいただき、ありがとうございました。