2009-06-12 16 views
7

私はこのようなユーティリティを構築しようとしていますが、http://labs.ideeinc.com/multicolr、 はどのアルゴリズムを使用しているのか分かりません。視覚的類似性検索アルゴリズム

+0

「視覚的な類似性」の検出はよく分かりません。色分け(色と面積の共有)に似ています。色は数値コンポーネントで構成されているため、これにクロールするアルゴリズムを構築することができます。 –

答えて

5

ヒストグラムをマッチさせるだけです。

画像のヒストグラムを作成します。ヒストグラムを画像のサイズで正規化する。 A ヒストグラムは、色と同数の要素を持つベクトルです。あなたは32,24、および16ビットの精度さえも必要とせず、これはあなたを遅らせるだけです。パフォーマンス上の理由から、ヒストグラムを4,8、および10〜12ビットにマップします。

  • すべての4ビットヒストグラムとサンプルカラーの間にファジィleast distance compareを実行します。
  • 次に、そのセットを取り、8ビットのヒストグラムを比較します。
  • 次に、残りのセットと比較して、10ビットまたは12ビットのヒストグラムになることがあります。小さな集合を見つけるために、合計集合と非常に少数の計算を比較しているので、これは最高のパフォーマンス検索になります。
  • その後、あなたは、計算数の多い小さなサブセット上で動作する、など

本当の大トリックは、同様のヒストグラムをマッチングするための最良のアルゴリズムを見つけることです。

  • 距離計算から始めます。 3次元では、私はそれがあったと思う:

    SQRT((X1-X2)^ 2 +(Y1-Y2)^ 2 +(Z1-Z2)^ 2)私はこれをやっている

をメモリからは、確認してください。

  • あなたの目的に合わせて3つ以上のディメンションが用意されているため、より多くの用語を使用できます。 4ビットヒストグラムは16項、8ビットは256項などです。この種類の計算は遅いので、実際にはSQRT部分を実行しないでください。あなたのイメージのサイズを十分に小さくする、つまり10,000ピクセルにすると、0,00,0000の値に対してx^2を実行すればよいことが分かります。ルックアップテーブルx^2を事前に計算します。ここで、xは0..10,000になります。その後、あなたの計算は速く進むでしょう。

  • パレットから色を選択するとき、その色= 10,0000のヒストグラムを作成するだけです。 2を選択すると、color1 = 5000、color2 = 5000などのヒストグラムを作成します。

  • 最終的にアプリケーションを現実の世界に一致させるためにファジーファクターを追加する必要がありますが、テストでこれらを見つけることができます。

+0

ありがとう私はimageJとこのプログラムのアルゴリズムを使用します http://rsb.info.nih.gov/ij/plugins/color-inspector.html – Emrah

+0

私はファジー最小距離の比較を行うことを言及します。私は薬にかかっていたと思う。ちょうど最小の距離を比較してください。 :) – johnnycrash

0

おそらく、画像で使用されている色のヒストグラムを作成してから、ユーザーが選択した色に最もよく合うようにします。

2

私はあなたのデータベースの画像に存在する色の何らかのクラスタリングをお勧めします。私は、データベース内の各画像のために、意味:

  • は画像
  • の各画素の色を集めるクラスタリングを行う(さんが5つのクラスタとのk平均クラスタリングを言わせて)収集した色に

ユーザーが1つ以上のクエリカラーのセットを指定すると、特定の色とカラーディスクリプタの間で最もよく一致するものを選択するような貪欲なマッチングが行われます(5つの象徴的な色)あなたのデータベースの各イメージの。

サイズにもよりますが、検索インデックスの中には、アロゴリスそのものよりも大きな問題がある可能性があるため、画像コレクションのサイズはどのくらいですか?

関連する問題