LoginSignup
4
0

Python opencv で行うカメラキャリブレーション

Last updated at Posted at 2023-12-24

初めに

法政大学情報科学部 Advent Calendar 2023」 22 日目の記事になります。
どうも、いっせーです!
研究室では、画像処理の研究しています。
今回は、Pythonとopencvで画像の歪みを補正していきたいと思います。

概要

画像処理をしたいときに、画像が歪んでいたり、ズレていたりしたら処理に影響が出てしまいます。
カメラで撮った画像は、丸みを帯びていたり、歪みが生じている可能性があるので、この歪みを修正するために「カメラキャリブレーション」という処理を行います。
「カメラキャリブレーション」とは、内部・外部パラメーター、レンズの歪収差係数を求め、画像を補正する処理です。

簡単に言うと、どれくらい歪んでいるかを求めて、正しい画像に修正する処理です。

この処理を行うために、opencvのカメラキャリブレーションのライブラリを使用していきます。
今回はわかりやすいように、歪みが大きいステレオカメラで撮影した画像を使います(下の画像)。

カメラのパラメーター

写真を撮るときに、カメラは現実世界の3次元の世界を2次元のデータに変換します。
その時に歪みなどが生じます。
ですので、3次元のデータ(外部パラメータ)や2次元のデータ(内部パラメータ)を元に歪みを修正します。
内部パラメータとは、カメラの焦点距離や写真の歪みの値などのことで、
外部パラメータは、位置や向いている方向などの値のことを言います

実際にやってみる

  1. チェスボードを修正したいカメラで約20枚ほど撮る。取り方は左右上下いろんな角度からとりましょう。
  2. opencvのチュートリアルを見ながら、コードを実装。
  3. 撮った画像を使用してチェスボードのコーナーを見つけて、表示する。この時にチェスボードの格子点を数え、cv2.findChessboardConersとcv2.drawChessboardCornersの第二引数に入れる。チェスボードの格子点を使用しているコードを以下のように修正して、カメラキャリグレーションを行う

結果

以下のように、画像が修正されている。
Before

After

4
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0