環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 18.04 |
ROS | Melodic |
OpenCV | 3.2.0 |
インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。
概要
過去の記事で色相で物体を検出するという例を作りましたが、これはカメラで正しい色を取得できていることが前提です。しかしカメラで取得できる色はカメラの性能や照明の条件でも変わってしまいます。そこでカメラ(と環境)の色校正を簡易的に行う方法をここで説明します。
原理としては「基準となる色」の物をカメラで撮ってどういう色として写るのかを調べて、各色(赤、緑、青)のゲイン値を求めます。
今回は「基準となる色」としてカラーチェッカーというものを使用します。ちゃんとしたもの(X-rite ColorChecker Classic)が良いですがそこそこ高いのでAliexpressで似たようなものを注文しました。カラーチェッカーには色とその色がRGBでどのように写るべきかというデータがついています。
ソースコード
- カメラ画像が
/image_raw
として出ていることが前提です。 - 起動するとopencv2で生成した画面が出現します。カラーチェッカーをカメラに写したららクリックをします。その後写っているカラーチェッカーの4隅をクリックすると24点の測定点を自動で計算します。もう一度計算すると結果をHTMLで吐き出します。
実行
ツールの実行
rosrun cam_lecture color_rectify_tool.py
実行後には以下のような結果になりました。Gianが大きい=本来の色よりも強く写っていると指します。
赤が弱く、青が強く写ってます。典型的な蛍光灯の傾向です。
コメント
- 今回は24個すべてのゲインを測定して中央値の12個の平均を採用しました。もし用途があるならばそれに対応する色を中心に補正情報を作るのが良いでしょう。
- 補正値が出たので、元画像の色をgainで割るor色判定の判定地にgainを掛けるなどして使います。