na_o_ysのブログ

プログラミングのメモ

どうぶつしょうぎの盤面認識アプリを作る (3) 盤面の正規化

(1) 準備編
(2) 勉強編
(3) 盤面の正規化
(4) 駒の認識


カメラで撮影した画像から、盤面のみを取り出して固定位置に正規化します。

  • 入力画像
    f:id:na_o_s:20150725170035j:plain:h300
  • 正規化後の入力画像
    f:id:na_o_s:20150726015732p:plain:h500

手法

  • 盤面のみの画像を用意する
  • 入力画像と盤面画像で特徴量抽出・マッチングする
  • マッチングで得られた射影変換を盤面画像全体に適用する

盤面画像

きれいな長方形になっている盤面画像を用意します。

f:id:na_o_s:20091210191228j:plain:h500

特徴量抽出

盤面画像と入力画像の特徴を抽出します。

今回は AKAZE 特徴量っていうのを使ってみました。

  • 盤面画像
    f:id:na_o_s:20150726015844p:plain:h500
  • 入力画像
    f:id:na_o_s:20150726015920p:plain:h300

盤面画像については、マス目の内側を特徴量抽出から除外しています。

マッチング

今回は速度面はどうでもいいので、Brute-Force Matcher を使います。

f:id:na_o_s:20150726020009p:plain

マッチングから射影変換を取り出して、入力画像に適用することで、正規化画像が得られます。

問題点

盤面の特徴点は「どうぶつしょうぎ」のロゴの部分に集中しています。

ロゴ部分の角度のみを反映した射影変換となるため、カメラレンズの歪みによって盤面がきれいな台形になっていない入力画像については、正規化後の画像が大きくはみ出してしまいます。

f:id:na_o_s:20150726020043p:plain:h500

使用する特徴量やパラメータの調整によって、ロゴ部分以外からもうまく特徴点を抽出できれば、ある程度改善できそうです。