10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCVAdvent Calendar 2021

Day 6

キャリブレーションパターンを Python で作って見よう

Last updated at Posted at 2021-12-05

TL;DR

Ubuntu 18.04Python 3.6.9python-pptx 0.6.21

はじめに

  • 本記事はOpenCV Advent Calendar 2021 の6日目の記事です。

    • 5日目の記事はdandelion1124先生による最新のOpenCVで導入されたプラグイン制度の紹介です。是非お読み下さい。
    • その他の記事は目次をご覧ください。
  • キャリブレーションパターンというのは以下の写真のような、既知のサイズの円や正方形が描かれてるものを指します
    IMG_20170622_145547.jpg

  • このパターンを画像で撮影することで空間中のカメラの位置姿勢、レンズの画角などの特性を計算から求めることができます。

  • パターンの特徴としては簡単なものながら、こいつをきっちり作らないとキャリブレーションがちゃんと収束しないため、丁寧に作る必要があります

  • 4年前に公開したQiita記事では、パターンの大きさを測定する誤差をなくすために「パワーポイント」を使って、指定した長さ/大きさピッタリに印刷できるスクリプトを自作/公開/紹介しました

  • そのときはVisual Studio + CMakeというヘンテコな組み合わせでパワーポイントを作ったのですが、今回はPythonスクリプトの紹介です

使い方

$ ls
generator.py
$ python3 generator.py
$ ls
calibration_pattern.pptx  generator.py

工夫した点

  • 基本的には4年前に公開したスクリプトと同じで、以下の3種類のパターンを生成できます
    • チェッカーボード
    • 円形パターン(格子)
    • 円形パターン(互い違いに配置)
  • 内部的にはpython-pptxというライブラリを使用しており、これでパワーポイントが作れます。
    • 前回みたいなxmlのdirtyハックは不要です。
    • Pythonは個人的には嫌いで、できれば避けて通りたかったのですが業務でpython-pptxに触れざるを得ず、結果4年前の宿題を終わらせることに。
  • ベクタ形式で作れるので、変なピクセルのアンチエイリアスに悩む必要はありません
  • プリンタで出力される際に変なサイズに縮小/拡大される問題も、「等倍で印刷」すれば1mm以下の誤差で印刷ができます。
  • 印刷したチェッカーボードの位置やサイズを定規で測る必要もありません

工夫しなかった点

  • どうやらPythonには引数を受け取ったり、スクリプトを実行バイナリに落とし込む方法とかもあるみたいですが、そんな高等なことは一切しておりません。
  • サイズや個数を変える場合はハードコードされている定数やパラメータを直接書き換えて下さい。
    • Pull Request、いつでも受け付けております
  • 4年前のツールではヘッダファイルを生成することで、キャリブレーションパターンに関する情報をスムーズにC++のコードに読み込めるようにしましたが、今回はPython版なので、このあたりは割愛しました。
    • Pull Request、まじでいつでも受け付けております

スクリーンショット

チェッカーボード

image.png

円形パターン(格子)

image.png

円形パターン(互い違いに配置)

image.png

#その他

  • 本記事は以下のバージョンで確認しました

    • Python 3.6.9 -
    • python-pptx 0.6.21
    • Ubuntu 18.04 (x86_64)
  • ベクタ形式で作るだけならば、OpenCV本体内にsvgファイルを生成するPythonスクリプトが同梱されており、ドキュメントも公開されている

  • 本記事が気に入った方は、記事のLGTMの他、Githubのスター評価をしていただけると幸いです。

  • キャリブレーションはパターンをちゃんと平面にする必要があるし、撮影時の手ブレやカメラがずれることに神経を尖らせるのが常です。

    • 本スクリプトを使えば、少なくとも、「長さを定規で丁寧に測定する」手間が1ステップ省けます。
    • Happy Calibration Lifeを!
  • 明日はhon_no_mushiさんの担当で、「アイエエエエ! ニンジャ!? ニンジャナンデ!?」(OpenCV module開発のおともに)です。全OpenCVユーザ注目!!

10
3
1

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
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?