質問

画像の類似性を比較するための、シンプルで高速なアルゴリズムを PHP で開発しました。

ハッシュ化が高速 (800x600 画像で 1 秒あたり約 40) で、最適化されていない検索アルゴリズムにより、22 分で 3,000 枚の画像を処理し、各画像を他の画像と比較できます (3/秒)。

基本的な概要は、画像を取得し、それを 8x8 に再スケールし、それらのピクセルを HSV に変換するというものです。次に、色相、彩度、および明度が 4 ビットに切り捨てられ、1 つの大きな 16 進文字列になります。

画像の比較は基本的に 2 つの文字列に沿って進み、見つかった違いを追加します。合計数が 64 未満の場合は、同じ画像です。さまざまな画像は通常 600 ~ 800 程度です。20未満と非常に似ています。

このモデルに使用できる改善点はありますか?さまざまなコンポーネント (色相、彩度、明度) が比較にどの程度関連しているかについてはまだ見ていません。色相はおそらく非常に重要ですが、その他はどうでしょうか?

検索を高速化するには、おそらく各部分の 4 ビットを半分に分割し、最上位ビットを最初に配置して、チェックに失敗した場合に最下位ビットをまったくチェックする必要がなくなるようにすることができます。そのようなビットを保存しながら、簡単に検索して比較できるようにする効率的な方法がわかりません。

私は 3,000 枚の写真 (ほとんどが固有のもの) のデータセットを使用してきましたが、誤検知はありませんでした。サイズ変更の影響をまったく受けず、明るさやコントラストの変化にもかなり耐性があります。

役に立ちましたか?

解決

使用したいものは次のとおりです。

  1. 特徴抽出
  2. ハッシュ化
  3. ローカル認識ブルームハッシュ。

  1. ほとんどの人が使っています シフト ただし、スケール不変ではないものの方が良い経験があります。基本的には、エッジ検出器を使用して興味深い点を見つけ、それらの点を中心に画像パッチを配置します。そうすることで、サブイメージも検出できます。

  2. 実装したのはハッシュメソッドです。試してみるべきものはたくさんありますが、あなたのものはうまくいくはずです:)

  3. 高速化するための重要なステップは、ハッシュをハッシュすることです。値を単項表現に変換し、ビットのランダムなサブセットを新しいハッシュとして取得します。20 ~ 50 のランダム サンプルでこれを行うと、20 ~ 50 のハッシュ テーブルが得られます。いずれかの特徴がこれら 50 のハッシュ テーブルのうち 2 つ以上に一致する場合、その特徴はすでに保存されているものと非常に似ています。これにより、abs(x-y) を変換できます。

お役に立てば幸いです。もし私が独自に開発した画像類似性検索を試してみたい場合は、hajo までメールを送ってください。 スプラットピクス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top