質問: ### 類似画像を検索したい 画像データをDBに入れておいて、ある画像に類似している画像を検索するということをしたいと考えています。 ImageMagickを使えば2つの画像を比較することはできますが、SQLで検索した後の処理になるためやりたいことと違います。 Average Hashという類似度検出アルゴリズムを試したところ、画像をのハッシュ値を取得することができました。 このハッシュ値をDBに保存しておけば同じ画像を取得することは可能ですが類似画像を取得するには不十分です。 というところまではきているのですが、ここからどうしたら良いか皆目見当がつかない状態です。 上記の手法以外にも類似画像を検索するための方法等があれば教えていただけると幸いです。 よろしくお願いします。 Average Hashによる画像比較を行うクラス ### 環境 ruby2.3.1 ruby on rails5 postgreSQL
回答: まず最も単純なアプローチはタグ付けです。機械学習、または人手で画像にタグをつけてそれを検索します。 タグをつけずにやりたい場合は、以下のような方法も考えられます。これは一例に過ぎません。 1. 画像全体の距離尺度(特徴量)を決める 2. 特徴空間を圧縮 3. SQLで近傍を検索 例えば、画像の特徴量として画素ヒストグラムを使うことにします。次に、これをtSNEなどで低次元(3次元など)に圧縮し、データベースに格納します。 検索画像から検索用の圧縮表現を得て、SELECTでしきい値以下の範囲にある画像を取り出します。 大まかには以上のような方法があると思います。