日々現状維持

日暮れて道はなし

プロフィール

七橋綴(ななつ☆)

Author:七橋綴(ななつ☆)
大学生:♂
2013年―――気づけば今年誕生日を迎えると四捨五入で30歳
地獄の業界、SE業。
NEETになりたい(迫真)

カウンター

宣伝/広告


ブログ内検索

presentsed by nanatu

カレンダー

04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -


曲解 meanShift(顔認証などで)

今日というか昨日、
一心亭というラーメン屋の前で自転車ドリフト走行中のななしさんを見つけたななつ☆です。
こんばんわ。


タイトルの通りなんだけど、たぶん曲解した事書いてる可能性がある。
研究題材のひとつに検出器を作る研究があって、
画像処理の専門の方ならご存知の分類器を使ってる。

ちなみに専門の研究じゃないから本当に理論曖昧。

カスケードファイル(分類器)というのが、目的の――――
例えば顔なら、顔の正解画像や不正解画像を詰めたもの(ざっくり
―――を読み込ませて任意の画像内から目的のものを検出してくれるやつ。

これをもっとカスケードファイルの向上じゃなくて、
プログラムの部分で、よりいい結果が出せるように頑張ってみる。
とりあえず目標としては顔検出用のヘッダーファイルを自炊したい。
普通にOpenCVの関数でできそうなんだけど、
僕のちっぽけな頭じゃ理解できないから、自分で考えてみる。

主に顔検出などで活躍しているから、顔検出を主に話を進めてみる。

もちろん顔検出にも顔の特徴を捉えて検出をしているわけだけど、
これに良くあるのが、同じ部分を何度も検出しちゃう現象。
8437850_33p0
こんな感じで(撮影協力えーじぇんと株式会社

もちろん顔と関係ない部分まで検出しちゃう可能性もあるんだけど。
OpenCVで顔検出すると結構でたりして、
以前作った顔の動きを追跡する、オプティカルフローの時も誤検出多かった記憶がある。

で、mean-shift法?っていう手法があるらしいってのを今日聞いた。
このmean-shift法って日本語では”平均変位法”っていうらしく、
平均って言葉が付いてるくらいだから、平均するんだろうね。

よくよく紹介サイトさんをめぐってみたら、顔検出器などでは使ってる人見なかったけど、
所謂ラべリングのような感じで、ある密集地帯を一つのクラスとして保存して、
その平均を割りだしたりする手法みたい。

クラスというのが学校の1組、2組みたいな解釈でおk
簡単に言えば、「ここからここまでが1組」「ここからここまでが2組」・・・・
みたいに画像の領域内を任意の距離からグループ分けするようなもの。
91.jpg

で、顔検出の話に戻るわけだけど。
じゃあ逆に検出(誤検出も含)が密集して結果がでてる部分もクラス分けして、
代表の結果だけを最終的に出せばいいんじゃないかという結論。
つまり1組の代表はこれ、2組の代表は(ry

顔検出の結果は記憶が曖昧模糊としてるけど、
cv::Rect型のvecter配列で返却されているはずで、
他の帰り値にも、いくつ検出結果が出たかというint型か何かの情報が返却されてたはず。

cv::Rect型はこれも曖昧で悪いんだけど、四角形の左上の座標と右下の座標だったはず。
と言う事は、検出された座標から半径Nまでに同様の座標があれば、
同様のクラスとして扱えばいいということ。

ここで、検出された左上の点だけに取りあえず注目。
とりあえず、順番もあるんだけど、一番最初にとれた座標に注目。
ここから近くにある座標を全部グループ化する。
8437850_323p0

プログラムのアルゴリズムを考えると、
まず一点読み込み、残りの全部の座標を評価し、
範囲内ならば全て読み込み、これをクラス1と名付ける。
この範囲外だった場合は、次の座標を読み込み。
この処理をループさせる。

ちなみにコレ、クラスタリングっていうみたい(へー

それで、この左上座標群の全平均がクラス1の左上代表座標。
そして右下の座標群も同様に平均をだしてクラス1の右下代表座標に確定。
hhh.jpg
理想はこうなる・・・はず。

これを出力したら、重なって検出してしまう誤検出を回避できそう。
コードはまだないけど、そんなに時間がかからなさそう。
時間が空いた時にコーディングしてみます。
ただカスケードでの検出の引数を割とシビアにしたら、
案外重なりは外せるはずだから、そんなに必要ないかもとか、そういうオチ。

懸念材料を上げると、各座標群の平均が何気に検出結果をうまく囲ってくれるかどうか。
あとは、これ結構処理速度重いみたい。
実用化の段階でかなり耐久度が求められるかも。
スポンサーサイト