初めに
「法政大学情報科学部 Advent Calendar 2023」 22 日目の記事になります。
どうも、いっせーです!
研究室では、画像処理の研究しています。
今回は、Pythonとopencvで画像の歪みを補正していきたいと思います。
概要
画像処理をしたいときに、画像が歪んでいたり、ズレていたりしたら処理に影響が出てしまいます。
カメラで撮った画像は、丸みを帯びていたり、歪みが生じている可能性があるので、この歪みを修正するために「カメラキャリブレーション」という処理を行います。
「カメラキャリブレーション」とは、内部・外部パラメーター、レンズの歪収差係数を求め、画像を補正する処理です。
簡単に言うと、どれくらい歪んでいるかを求めて、正しい画像に修正する処理です。
この処理を行うために、opencvのカメラキャリブレーションのライブラリを使用していきます。
今回はわかりやすいように、歪みが大きいステレオカメラで撮影した画像を使います(下の画像)。
カメラのパラメーター
写真を撮るときに、カメラは現実世界の3次元の世界を2次元のデータに変換します。
その時に歪みなどが生じます。
ですので、3次元のデータ(外部パラメータ)や2次元のデータ(内部パラメータ)を元に歪みを修正します。
内部パラメータとは、カメラの焦点距離や写真の歪みの値などのことで、
外部パラメータは、位置や向いている方向などの値のことを言います
実際にやってみる
- チェスボードを修正したいカメラで約20枚ほど撮る。取り方は左右上下いろんな角度からとりましょう。
- opencvのチュートリアルを見ながら、コードを実装。
- 撮った画像を使用してチェスボードのコーナーを見つけて、表示する。この時にチェスボードの格子点を数え、cv2.findChessboardConersとcv2.drawChessboardCornersの第二引数に入れる。チェスボードの格子点を使用しているコードを以下のように修正して、カメラキャリグレーションを行う