外部パラメータのみのキャリブレーションを行う

void cvFindExtrinsicCameraParams2( CvMat* world_points, CvMat* image_points, CvMat* A, CvMat* distortion, CvMat* rotation, CvMat* translation);

座標の対応から外部パラメータのみを推定する

引数

  • world_points:CvMat*型のパターンの世界座標
  • image_points:CvMat*型のパターンの画像座標
  • A:CvMat*型の内部パラメータ行列
  • distortion:CvMat*型の歪み係数ベクトル
  • rotation:CvMat*型の回転ベクトル(4元数表記)
  • translation:CvMat*型の並進ベクトル

返り値

  • void型なのでなし

解説

  • 外部パラメータのキャリブレーションなので内部パラメータは既知の必要がある
  • 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で並進ベクトルが返って来る

サンプルコード

  1.  const int patternX = 4;
  2.  const int patternY = 5;
  3.  CvCapture *camera;
  4.  IplImage *image;
  5.  CvPoint2D32f *corners;
  6.  
  7.  camera  = cvCaptureFromCAM(-1);  // カメラ初期化
  8.  image   = cvQueryFrame(camera);  // 画像取得
  9.  corners = new CvPoint2D32f [patternX*patternY];
  10.                                   // 座標格納用配列
  11.  cvFindChessboardCorners(image, cvSize(patternX, patternY), corners);
  12.                                   // 点検出
  13.  // 画像座標行列を作成
  14.  for(int i = 0;i < patternX*patternY;i++){
  15.   cvSetReal2D(pointsMatrix, i, 0, corners[i].x);
  16.   cvSetReal2D(pointsMatrix, i, 1, corners[i].y);
  17.  }
  18.  cvFindExtrinsicCameraParams2(world_points, pointsMatrix, intrinsicParameters, distortionParameters, rotationParameters, translationParameters);
  19.                                   // 外部パラメータ計算
  20.  cvReleaseCapture(&camera);       // 解放
  21.  delete [] corners;               // 解放

実体ファイル

  • cv/src/cvcalibration.cpp
  • cv/include/cv.h

ジャンル:OpenCV:OpenCV 1.0準拠


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 11:18:14 (2738d)