キャリブレーション

https://bitbucket.org/asama-yaya/opencv_cameracali...
クリックor'c'で撮影。
'q'で内部パラメータ計算する。

サブピクセル推定で、コーナーの検出精度を向上することができるが、
探索近傍サイズは大きすぎても小さすぎても駄目。

二値化は多分大津だが、うまくいかないならモルフォロジー演算をかますのもあり。
方法1
  • loop内で
cv::undistort(image, dist1, intrinsic, distortion, new_intrinsic);

これだけ。
しかし、毎回計算が入るので、後述のものを使うのが良いと思う。

ちなみにnew_intrinsicを入れると、こっちの内部パラメータで撮影した歪のない画像を作ってくれる。
これも後述。
方法2
  • initialization内で
cv::Mat MapX, MapY;
cv::Mat mapR = cv::Mat::eye(3, 3, CV_64F);
cv::Mat new_intrinsic = cv::getOptimalNewCameraMatrix(intrinsic, distortion, image.size(), 1);
cv::initUndistortRectifyMap(intrinsic, distortion, mapR, 
	new_intrinsic, image.size(), CV_32FC1, MapX, MapY);
  • loop内で
cv::remap(image, dist2, MapX, MapY, cv::INTER_LINEAR);

画素対応を直接求めておくというもの。
あらかじめ計算してくれるので、上述と比べて早い。

MapX,MapYには画素対応が入ってる。
GLSLにぶっこめば、歪補正がシェーダーでできる。

getOptimalNewCameraMatrixで、所望の画像サイズの内部パラメータを作ってくれる。
この結果を使えば、「new_intrinsicを持つ歪のないカメラ」で撮影したような画像を作れるわけです。

画像処理をするなら内部パラメータは大事になることが多いので、
この辺の変化はしっかり理解しとかないと危ない。

それと、getOptimalNewCameraMatrixの最後の引数を1にするか0にするかで結果が違う。
(左:入力、右:結果)
  • 0

  • 1

ステレオカメラの平行化

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます