Python 備忘録

Python-ver: 3.6.3

Pythonで類似度検出① 検出の三つの手法

久しぶりの更新です。
自分でカスケード分類器を作ろうと思い画像収集のクローラーを作っていましたが、
思った以上に厄介なので、ひとまず置いときます。また今度に上げようかと思います。

最近仕事で、顔認証ができないかと類似度を検出する必要性に迫られています。
なので、今回から類似度検出をやっていきたいと思います。

類似度検出とは二つの画像を比べて、どれだけ似ているかを検出します。
最終的には、人物が特定できるような、顔認証まで進めたらいいなと思います。

類似度検出の三つの手法

今回は用語の整理に終わると思います。
画像認識には例のごとくOpenCVを使っていきます。

類似度検出には、主に三つの手法があります。

以上の三つです。ほかにもあるかもしれませんが、門外漢の私には全然わかりません。
一つ一つ確認していきましょう。

ヒストグラム比較

ヒストグラムとは、

ヒストグラム(英: histogram[1])とは、縦軸に度数、横軸に階級をとった統計グラフの一種で、データの分布状況を視覚的に認識するために主に統計学や数学、画像処理等で用いられる。

https://ja.wikipedia.org/wiki/%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0

つまり、こういうグラフのことです。
f:id:sh0122:20171123170216p:plain:h400
https://ja.wikipedia.org/wiki/%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0#/media/File:Histogram_of_Japanese_wikipedia_article_%22Histogram%22_page_views.png

ヒストグラム比較とは、まず画像の色がどのように分布しているかのヒストグラムを作成します。
そして、二つの画像のヒストグラムを比較して、同じような分布であれば、二つの画像は「似ている」ということになります。

色で判断するやり方ですね。

特徴点マッチング

特徴点マッチングとは、画像同士の特徴点の距離を測り、近ければ類似度が高いとみなす手法です。

特徴点とは何か。検索してもあまり明快な解答は得られませんでしたが、要は画像のマッチングをする上で重要になる部分、らしい。
人で言えば、輪郭や目鼻立ち、眼の大きさなどなど。人物の類似度を比較する上では一番重要になりそうな手法です。

特徴点を抽出する方法、アルゴリズムは主に二つあり、

  • ORB(Oriented FAST and Rotated BRIEF)
  • AKAZE(Accelerated KAZE)

の二つみたいです。

ORBは、特徴点、特徴量を抽出するアルゴリズムで、移動、回転、ズームのどれにも*ロバストネスがあるアルゴリズムです。
もともとSIFTというアルゴリズムが、移動、回転に加えてズーム対するロバストネスを獲得しました。ただSIFTは計算量が多く、低速だったため、速度を改良したSURFというアルゴリズムがでてきました。ただし、SIFTもSURFも特許で守られているため、使用するためには特許料を払う必要があります。
そこで、移動、回転、ズームの3つに対してロバストネスをもち、計算速度も速く、フリーで使うことができるORBというアルゴリズムが2011年に開発されました。

またOpenCV 3.0からは、2013年に開発されたAKAZEというアルゴリズムがサポートされています。AKAZEは、計算量がORBよりもやや多いものの、低周波領域、高周波領域の抽出精度がORBよりも優れていて、ハイスピードカメラのトラッキングでその威力を発揮するとされています。AKAZEとORBの比較動画はこちら(youtube)。


引用注 ロバストネス:「1 堅牢(けんろう)性。強靭(きょうじん)性。頑強性。ロバストネス。」
https://kotobank.jp/word/%E3%83%AD%E3%83%90%E3%82%B9%E3%83%88%E6%80%A7-1742511#E3.83.87.E3.82.B8.E3.82.BF.E3.83.AB.E5.A4.A7.E8.BE.9E.E6.B3.89

https://qiita.com/hitomatagi/items/62989573a30ec1d8180b

詳しいことはこちらに書いてありますので参考に。文字の強調はこちらで付けさせていただきました。

実際に特徴点を算出した画像がこちら。アルゴリズムはORBです。

画像はこちらから拝借しました。
無料の写真: 男性の顔, 目, Manとシリンダー - Pixabayの無料画像 - 2732206

f:id:sh0122:20171123172820j:plain:h400

要するに二つの画像でこちらのように特徴点を算出し、一つ一つの特徴点を比べあって一番距離が近い(似ている)特徴点同士を線で結び、比較する手法です。

テンプレートマッチング

テンプレートマッチングとは、

画像からテンプレート画像と一致する部分を検出するのがテンプレートマッチングです。テンプレートマッチングは、テンプレート画像を被検出画像上でスライドさせ、テンプレート画像と被検出画像の領域を比較し、類似度の高い領域を検出します。

http://www.tech-tech.xyz/archives/3065942.html#i1

つまり、画像の中から、類似度の高いある部分だけをマッチングさせる手法です。

こちらは、何らかのオブジェクトなどを検出するのに役立ちそうです。
たとえば、ゲームの中のコインの数や、街中の標識、信号機など、決まった形のものを検出するのに絶大な力を発揮してくれるでしょうか。

まとめ

画像の類似度を測るには主に三つの手法がある。

  • ヒストグラム比較
  • 色で比較するやり方。画像検索などに役立つ?
  • 特徴点マッチング
  • 画像の特徴を照らし合わせて比較するやり方。特徴点を算出するのにはORBとAKAZEという二つのアルゴリズムがある。 人物を特定するのに役立つか。
  • テンプレートマッチング
  • 画像のある部分のマッチングをかける方法。ある程度形が決まったものを特定するのに役立つか。

今回は用語の整理に終始してしまいましたが、次回からは手法を一つ一つ試していきます。
最終的には人物特定がしたいです。