外部パラメータのみのキャリブレーションを行う
#contents
*void cvFindExtrinsicCameraParams2( CvMat* world_points, CvMat* image_points, CvMat* A, CvMat* distortion, CvMat* rotation, CvMat* translation); [#pb109409]
座標の対応から外部パラメータのみを推定する
**引数 [#sbbbdb76]
-world_points:CvMat*型のパターンの世界座標
-image_points:CvMat*型のパターンの画像座標
-A:CvMat*型の内部パラメータ行列
-distortion:CvMat*型の歪み係数ベクトル
-rotation:CvMat*型の回転ベクトル(4元数表記)
-translation:CvMat*型の並進ベクトル
**返り値 [#i5d8e16b]
-void型なのでなし
*解説 [#c1d1e1d5]
-外部パラメータのキャリブレーションなので内部パラメータは既知の必要がある
-world_pointsのサイズは3xNかNx3
-image_pointsのサイズは2xNかNx2
-当然world_pointsとimage_pointsでサイズと型の整合性が取れてる必要がある
-Aは3x3の内部パラメータ行列
--fx, cx, fy, cy しかパラメータとして利用できない
-distortionには歪み係数ベクトルを入れる
--OpenCVで4次元の歪みパラメータを扱える
--分からなければNULLで省略可能
-rotationのサイズは3xNかNx3で回転ベクトルが返って来る
-translationサイズは3xNかNx3で並進ベクトルが返って来る
*サンプルコード [#h1f6ae3e]
#geshi(c++,number){{
const int patternX = 4;
const int patternY = 5;
CvCapture *camera;
IplImage *image;
CvPoint2D32f *corners;
camera = cvCaptureFromCAM(-1); // カメラ初期化
image = cvQueryFrame(camera); // 画像取得
corners = new CvPoint2D32f [patternX*patternY];
// 座標格納用配列
cvFindChessboardCorners(image, cvSize(patternX, patternY), corners);
// 点検出
// 画像座標行列を作成
for(int i = 0;i < patternX*patternY;i++){
cvSetReal2D(pointsMatrix, i, 0, corners[i].x);
cvSetReal2D(pointsMatrix, i, 1, corners[i].y);
}
cvFindExtrinsicCameraParams2(world_points, pointsMatrix, intrinsicParameters, distortionParameters, rotationParameters, translationParameters);
// 外部パラメータ計算
cvReleaseCapture(&camera); // 解放
delete [] corners; // 解放
}}
*実体ファイル [#f99e540b]
-cv/src/cvcalibration.cpp
-cv/include/cv.h
ジャンル[[:OpenCV]][[:OpenCV 1.0]]準拠