9

Python 2.6 と PIL を使用して、2 つの画像の類似度(読み取り:レーベンシュタイン距離)を計算しようとしています。

迅速な比較のためにpython-levenshteinライブラリを使用する予定です。

主な質問:

画像を比較するための良い戦略は何ですか? 私の考えは次のようなものです:

  • RGB に変換 (透明 -> 白) (または、モノクロに変換しますか?)
  • 小さい方を大きい方のサイズに拡大します
  • 各チャンネル (= モノクロに変換された場合は唯一のチャンネル) をシーケンス (アイテム値 = ピクセルの色値) に変換します。
  • 2 つのシーケンス間のレーベンシュタイン距離を計算します

もちろん、これはミラーリングされたイメージ、トリミングされたイメージなどのケースを処理しません。しかし、基本的な比較には、これは役立つはずです。

どこかに文書化されたより良い戦略はありますか?

編集:アーロン H は速度の問題について正しいです。Levelshtein の計算は、数百 x 数百ピクセルより大きい画像の場合、ほぼ永遠にかかります。ただし、100x100 と 200x200 にダウンスケーリングした後の結果の違いは、私の例では 1% 未満であるため、最大画像サイズを ~100px 程度に設定するのが賢明かもしれません...

編集: PreludeAndFugue に感謝します。その質問は私が探していたものです。

ちなみに、レーベンシュタイン距離は最適化できるようですが、背景に冗長な要素がたくさんあるためか、非常に悪い結果が得られます。他のいくつかのアルゴリズムを見なければなりません。

EIDT:二乗平均平方根偏差とピーク信号対雑音比は、実装がそれほど難しくなく、CPU の負荷がそれほど高くないように見える別の 2 つのオプションのようです。ただし、形状などを認識するための何らかのコンテキスト分析が必要になるようです。

とにかく、すべてのリンクと、NumPy/SciPy への方向性を指摘してくれてありがとう。

4

2 に答える 2

5

imgSeekをチェックしてください:

imgSeek は、無料のオープン ソースの視覚的類似性プロジェクトのコレクションです。クエリ (探している画像) は、ユーザーが描いたラフ スケッチ、または提供した別の画像 (またはコレクション内の画像) として表現できます。検索アルゴリズムは、クエリとデータベース イメージの多重解像度ウェーブレット分解を利用します。

于 2011-10-27T06:03:21.793 に答える
2

stsciライブラリを見ることができます。これは、画像を比較および分析するために作成されています。それはあなたが望むものを与えるはずですが、少しやり過ぎかもしれません.

シンプルに保ちたい場合は、最初に色の量と解像度を減らしてから距離を計算できます。

于 2010-04-08T23:01:01.177 に答える