もやしちょこれーと

りけじょのたまごのいろいろ

画像処理学習日記:猫の顔認識3

めっちゃ久しぶり。

画像処理の課題自体は7月半ば?くらいにすでに提出していたのですが、それから合宿に向けて論文読んだり、バイトしたりバイトしたりで割と忙しくて…と言い訳したいところですが、普通に提出して満足してどうでもよくなったやつです

努力の結果、提出した課題は満点もらったよ!やったね!!

 

で、どんなのが出来たのか、というと、実は期限前までに完成しませんでした。本当はwebアプリとして配信するところまでやりたかったんですが、配信どころか、肝心の似顔絵が出力されるところまでできなかったというね!!

でも発想と努力で満点もらったんでいいんです笑

前回grabcutがうまくいかないよ><ってところで終わっていたと思うんですが、よいサンプルコードが見つかり、それを用いてインタラクティブなシステムにすることで解決しました!こちらです!!

github.com

ペイントソフトみたいに領域内、外を描いて指定していくとどんどんgrabcutを更新していってくれるみたいなシステムです。ありがたや。

それを実行することでこんな結果になります。

f:id:moyachiyoco:20160827010358p:plain

左が入力画面で、右がgrabcutの結果。左の白とか黒の線がインタラクティブに入力する線です。

これでやっときれいに猫の顔の部分だけ切り出すことが出来ました!!!

で、この後何するのかというと

  1. 模様のテクスチャを作る
  2. 猫の目、鼻の色を解析して、色を割り出す
  3. 用意した猫の顔の形のテンプレートにテクスチャを貼り付ける
  4. 元の猫の顔を参考に、目の位置、鼻の位置を決定し、4に貼り付ける

で、似顔絵が完成…するはずでした。

実装は2までしか終わりませんでしたああああ

 

顔のテクスチャとは何か、というと、こんなの。

f:id:moyachiyoco:20160827010820p:plain

なにこの気持ち悪いの、って感じですが。やりたかったこととしては、写真から色数を減らしてイラスト調にするって感じだったんですけど、単純に色を減らすんじゃこんな風にあまりうまくいかなかったんですよ。

なぜか、というと、第一に陰影の問題。上の図の左側とか灰色になってますけど、実際には陰になっているだけで、灰色じゃないですね。白が陰になって灰色になっているのか、もとから灰色なのかを、私が実装したシステムでは区別できないのです。

これを改善するには今見ている領域が陰なのかそうでないのかを判断しなきゃいけないわけですが、私には簡単に実装できそうな対処策は思いつきませんでした。

第二に解像度の問題。1pixelずつ色を置き換えているだけなので、細かすぎる。イラストっぽくない。これは飛び地になっているようなpixelを無視することで少しは改善するんじゃないかなぁと思うんですが、どうかなぁ…

 

で、2の色の割り出しについてですが、これはRGBをHSVに変換し、Hについてヒストグラムを作り、ヒストグラムの最頻値をそのパーツの色にする、という方法で行いました。

機械学習で目の領域とか鼻の領域は切り出せてるので、例えば目の領域の色をHSVに変換し、H(色相)のヒストグラムを解析したら、青い目の猫だったら、青の当たりの色相が最頻値になるはずだ、という考え方です。これは割とうまくいって大満足。

 

出来たのはここまでです。

本当は、

f:id:moyachiyoco:20160827011651p:plain

こういう猫型のテンプレート(普通の猫、たれ耳、長毛種など、三種類くらい用意して、顔領域の縦横比や顔領域に対する目の位置などから判断して使い分け)に、先ほど作ったテンプレートをはめ込んで、さらにあらかじめ用意しておいた目や鼻のパーツに色付けしたものを合成して

f:id:moyachiyoco:20160827011703p:plain

この程度の似顔絵出すところまでは、提出課題でやるつもりだったんですよ…!!!!!!

(これはsaiで手で合成したものです

そのアルゴリズムまでは考えたんだけど、コード書くところまでは終わらなかった…

 

少し悔いの残る結果になりましたが、まあ、一応これで終わりです。

もう授業も提出も終わったので、この画像処理学習はこれで終えたいと思います!!

 

お付き合いありがとうございました!