顔の分解 (4)

これすげえええ難しいことに気づきました。俺の教養にとって難問過ぎた。アアアア。でも何かかっこいい方法はあると思うんですよ。ググってもぜんぜん分からないですが。何についてググったらいいのかというところから分からない。分からないので自分でどうにかして考える必要があって、いろいろと考えているのですが、まったく違う方法でもっと簡単にできることに気づいたり、実際試したらできなかったりを繰り返しています。

ということで、すげえええあやしい今日のところの俺の解です。アイマスのキャラの顔を解析しています。
f:id:ultraist:20080416004449p:image
いまのアルゴリズムのダメな点は、

  1. きれいに囲えない
  2. 髪なども検出(これはしかたがない!)
  3. ループの中でループループループしまくりで三角関数使いまくりで遅い

1以外はどうにかなりそうですが、1ができないと変形用の変数に使えません。むずいいいぃ。3は、とりあえずsin,cosテーブルを作って、検索ループをハッシュテーブルの検索に置き換えたりすればちょっとはマシになる気がしています。ただ動画をリアルタイムで処理するには相当速くしないといけないので、そもそもダメかもしれないです。
今の方法は、 顔の分解 (1) - デーに書いたのと基本的に同じです。まず重みつきのヒストグラムで肌領域の色範囲を推測して抽出します。抽出された肌の2次元領域をY軸方向への変位を表す1次元データに変換して、それに大してCannyフィルタをかけることでゆれの激しいY座標を検出します。そこから次にゆれの激しいY座標までになにかがあると推測して、そのY座標範囲をX軸側から同じ方法で探してきます。変化の原因になっている箇所をしぼっていく感じです。これを-40°〜40°まで10°づつ回転させながら繰り返し処理を行います。この処理だけではたくさんの矩形が選択されるので、最後に検出された矩形の縦横比と肌以外の物体の占める割合から顔を構成する主なパーツとして妥当そうな範囲でフィルターしています。

だああ。時間はあるので、勉強を進めます。