今回はOpenCVネタです。
いままでチュートリアルを追ってきましたが、そろそろ本題の春のパン祭り集計を考えていこうかと。
使えそうな手
今までチュートリアルを見てきた中で、いくつか有用そうなテクニックがありました。
- 射影変換
台紙を真正面から撮影していなくても、真正面からの視点に変換できます。
ロバスト性を上げるのにいいかと。 - ヒストグラム、2値化
春のパン祭りだと、年によりますがシールの色が濃いピンク色、台紙はだいたい白となっていて、この色味でシール領域、台紙領域を区別できます。 - 画像の平滑化
普通の2Dフィルタだとシールのエッジもぼけてしまいますが、バイラテラルフィルタだといい感じにエッジが残っていました。これも適用しておいてもいいかも。暗いところでの撮影で有効かもしれません。 - エッジ検出
Canny法でシールや台紙のエッジが取れますが、その後が難しいかな。次の輪郭検出のほうが使えそう。 - 輪郭検出
2値化した後、輪郭情報を得ます。輪郭の面積や外接円などの情報から、それが台紙の外周なのか、シールの外周なのか、といったことが分かります。これは使えそう。 - テンプレートマッチング
これは使えそうです。春のパン祭りのシールは0.5点、1点、1.5点、2点、2.5点とある(それ以上ももしかしたら?)ので、それらのテンプレートを用意して一致度を出せば、どの点数か調べることができます。シールを貼るときに傾いたり、そもそも上向きに貼らない人も考えられるので、回転角の考慮が課題かと。 - ハフ変換による円検出
シールの領域を探すのに使えるかもしれませんが、上の輪郭検出のほうで十分かな? - 特徴量検出、マッチング
色々やってみましたが、今回は用なしかな。またステレオビジョンなどで使ってみたいとは思います。
方式検討
いくつかのステップを踏む必要がありそうです。
- 台紙外形を取得する
射影変換をするのと、スケーリング(台紙を基準として画像サイズを調整する)に必要になります。 - 射影変換実施
- シール外形、中心点取得
- シール位置でテンプレートマッチング
テンプレートを回転させながら試す必要がある?
少し考えたこと
- 自分で撮った画像を見ても、台紙が曲がってしまっていることがあるので、 輪郭検出した後にハフ変換で直線検出をし、4本の直線を検出、その交点を射影変換行列計算に与える点とする、というのでどうだろう?
- 画像特徴量を勉強したとき、回転不変性を持つ特徴量も紹介されていた。
今までやったところでは、特徴点を検出してからそこの特徴量を計算する、という形だったが、任意の点から特徴量を計算してもらうことはできるのか?
ここまで
今回はここまでの検討で。
考えたことだけなので面白い記事にはならず…
次回からここで挙げた項目を1つずつ検討していきたいと思います。