More than 1 year has passed since last update.

類似画像検索手法について簡単にまとめました。

はじめに

画像検索には主に2種類の手法がある。

  • TBIR (Text Based Image Retrieval)

    画像にテキストデータが紐付けられていて、テキストを元に検索する

  • CBIR (Content Based Image Retrieval)

    画像の特徴量を基盤として検索する

ライブラリ

Feature Extraction Library - FELib

http://appsrv.cse.cuhk.edu.hk/~jkzhu/felib.html

下記の5つの特徴を持つ画像から特徴量を抽出できるライブラリである。

  1. Color histogram, color moments.

    カラーヒストグラム・色統計)

  2. Edge histogram.

    輪郭のヒストグラム

  3. Gabor wavelets transform.

    Wavelet transformは与えられた信号から空間と振動数を抽出する。Gabor Wavelet transform は数学的かつ生物学的に印象深い性質を持ち、画像処理の研究で頻繁に使われる処理である。

  4. Local Binary Pattern.

    画像のバイナリパターン

  5. GIST.

    GISTとは画像のシーン推定のために使用されるデータである

    • 低 : 色・コントラスト
    • 中 : 形状・テクスチャ情報
    • 高 : 光景を文脈的に推理する(屋外と判定できたら車の可能性が高い...など)
  • OpenCV ベースのライブラリ。研究等で使われている。

Libpuzzle

http://www.pureftpd.org/project/libpuzzle

Github
jedisct1/libpuzzle

The Puzzle library is designed to quickly find visually similar images (gif, png, jpg), even if they have been resized, recompressed, recolored or slightly modified. The library is free, lightweight yet very fast, configurable, easy to use and it has been designed with security in mind.

画像を扱う部分は完全にC言語で書かれている。Command Line と PHPのラッパーがある。

Cライブラリは完全に枯れていて、現在PHPのラッパーだけ更新されている。

まだ試せてないのでなんとも言えないが、上記の2つを用途によって使い分けるのがうまいやり方かな。

アルゴリズム

Average Hash 手法

かなり簡易化された画像の類似度検出アルゴリズム。
前処理がかなり簡単でそれなりの精度で類似した画像を探すことができる。
サクッと説明
1. グレースケール化
2. 画像を縮小
3. 画素の平均値を調べる
4. 各画素を走査して平均値より上なら1、下なら0という風にハッシュ化していく

同じような画像なら似たハッシュが生成される!!

詳しくは下記のリンクを参照。
簡単な画像の類似度計算手法「Average Hash」

pHash

http://phash.org/

前述で説明されたAverage Hashを簡易化しないアルゴリズムがpHashである。
開発も頻繁に続けられているので、安心安全。
Demo ページ

pHAshをRubyでラッパーしたもの!!便利そう
westonplatter/phashion

メモ書き

参考サイト