tl;dr
画像にはノイズが多く含まれており、単純なエッジ検出で特徴を抽出しようとしても、特徴が抽出しきれない場合があります。
そこで、「特徴的なエッジを維持し、ノイズが含まれている弱いエッジは近くの強いエッジに影響されて方向を滑らかにする」ことで、より画像の特徴をしっかりと抽出することが可能になります。その手法がEdge Tangent Flow(ETF)です。
こちらの論文で提唱されています。
http://umsl.edu/mathcs/about/People/Faculty/HenryKang/coon.pdf
私はETFを何に使用したか。
綺麗な絵をロボットに描かせるためにETFを使用しました。産業用ロボットアームに筆を持たせて書きました。
綺麗な絵を描くには、筆の軌跡が重要です。つまり画像からストローク情報を生成する必要があります。画像の特徴をきちんと捉えたストローク情報を生成するために、ETFを使用しました。
作った作品はこちらです。(チームメンバーと作成しました。)
http://aroboto.strikingly.com/
ETFを使うと画像がどうなるか。
上のgifは、ETFを何周か適用した時のベクトルの動きをgifにしたのです。画像をクリックしてよく見てみると、矢印が動いていると思います。
女性の右目のまつ毛あたりを見ると、最初別の方向を向いていた矢印が、周りのベクトルの向きに引っ張られて揃っていくのがわかると思います。
ETFのロジック
左辺は、注目画素のベクトル値です。
右辺について、下記1~4で簡単に説明します。
1.フィルター内かどうか判定。
2.注目画素のベクトルに与える影響度を算出。
3.ベクトルの積を算出。
4.ベクトルの向きを反転させるか判定。
これだけです。
コード
githubで公開しています。
https://github.com/naotokimura/EdgeTangentFlow
まとめ
ETFの概要と、仕組みを説明しました。
Deep Learningで画像処理やるのも楽しいですが、今回のようにゴリゴリの画像処理も楽しいものでした。
ETFが物体認識の精度に貢献するのか気になります。