特徴量
エッジが強い→空間周波数がたかい
特徴点
特徴点は、角やエッジに現れる(輝度の変化がでかいところ)
エッジをガウス関数でぼかすと、幅が狭いガウシアンでもボケて大きく変化する
ガウシアンカーネルを、2^l(レベル)幅で増やしていく、そして、lごとの差分をとって、z軸上(z=l)に1枚づつ並べていく。xyz空間での差分の極大極小を探す。山登り法で全画素に対して(周辺を見てどんどん渡っていく)
つまり、xyz平面に出てくる(レベルというz軸が存在する)
特徴量
特徴点に対して、その向きを周辺の画素値を見て輝度の傾きにより決める。その向きの正方形領域を考える。
そして、その正方形の中の画素毎の輝度の傾き(Sobelフィルタ等により周辺を見て傾きの方向を求められる)を求めて、ヒストグラム化する。ちょっと大きめの領域(小領域)でそのヒストグラムをまとめる。そして、角度ごとの量が1次元を表すこととなる。小領域は16個に分かれており、それぞれ45°ごとの8個のヒストグラムがあるので合計128次元となる。
特徴点は、画素が粗いところや密なところ(z軸にあたる)に様々出現するが、粗いところでは正方形領域をでかくするなどすると拡大縮小にインバリアントなものになる
これがSIFT特徴量だ!
・SURF
・ORB
局所特徴量
人があったらその手先だけを見るみたいな感じ
画像の中でキーポイントだけで見る
SIFT
検出:ヘッセ行列の畳み込み→反応があるところが良い(エッジコーナーなど)=時間かかる
記述:8方向のエッジ
SURF(Speeded up Robust Feature)
検出:ヘッセ行列を01で表現したもので代用
FAST
決定木により端かどうかを出力する コーナー検出を学習する
BRIEF
128組の、中心からのガウシアン分布をもとにしたような良い点の組をとって、それをもとにした01学習を行う
ORB
FAST+BRIEFで回転を行う
まず、範囲内のxyの輝度差を見て傾きを判別し、それにより回転角を決める
特徴点の傾きを計算する
○○インバリアント
○○に影響されない
領域特徴量
人全体見るような特徴量
HOG
画像の局所領域(セル)それぞれのなかで輝度の勾配方向をヒストグラム化する
輝度変化が高いほど勾配はでかくなる
そうして、輪郭とかが出たらそれをSVMに突っ込む
局所特徴量は、それ全体が何を表すかということをまとめなけなければならない
簡単:
bug-of-features
特徴点同士をマッチングさせる。クエリに対してデータすべてから似ているものをマッチングして距離測るはごっつ大変
てことで、先にクラスタリングを考えて(ボキャブラリー的な)、それのどれに位置するかを決定して、最終的にクエリの集合で出来たヒストグラムの似ているものという感じで一致するものを探す。これにより高速化
⇛シャツチェック柄の人とズボンチェック柄の人が一緒のものとしてまう(チェックの量は同じだから)
ピラミッドマッチカーネル
画像を分割して、部分ごとのヒストグラムを出す、分割分割で階層的に出して、すべてのヒストグラム情報を利用する
全部ごっちゃにすると潰れるような情報を保持した特徴一致
コンストレーションモデル
特徴点同士のいち関係も考える(特徴点のグラフを作るとか)
バイクで、タイヤがここにあったらエンジンはここにあるとか
Implicit Shape model
特徴点と、ある一点の位置関係。例えばある中心からの位置関係など
各特徴点について、物体がありそうな位置に投票
投票が集まる点=物体があるところ
体の位置を、頭や手や足の出した物体位置候補から算出
各特徴点について前傾・背景を学習していけば、自動で領域抽出まで出来る
===
ある人が写った画像を取り込むと、頭や手の特徴を持った点がいっぱい出てくる
ただ、頭があるなら物体の位置はここ、手があるなら物体の位置がここみたいな位置関係を知っておいてその点を打っていけば、人が実際にいる位置は点がすごく密になる(いないところは散分する)ので、そこを人がいるとする。そして、それらの特徴量に対してそこが特徴なら輪郭こんな感じという前景背景情報もあるので、利用することによって人全体の輪郭も出せる
===
ボキャブラリーツリー
木構造でどの特徴点に入るかを探す。分けて投票する
スパースコーディング
KD-tree
半分に割って半分に割ってでどっちに所属するかで決定 最後のブロックのところでもっとも近いやつと一緒とする
それだと別のブロックにある可能性があるので、最も近い奴の距離内だけで近いのがないかもっかい探す