Python 2.6 と PIL を使用して、2 つの画像の類似度(読み取り:レーベンシュタイン距離)を計算しようとしています。
迅速な比較のためにpython-levenshteinライブラリを使用する予定です。
主な質問:
画像を比較するための良い戦略は何ですか? 私の考えは次のようなものです:
- RGB に変換 (透明 -> 白) (または、モノクロに変換しますか?)
- 小さい方を大きい方のサイズに拡大します
- 各チャンネル (= モノクロに変換された場合は唯一のチャンネル) をシーケンス (アイテム値 = ピクセルの色値) に変換します。
- 2 つのシーケンス間のレーベンシュタイン距離を計算します
もちろん、これはミラーリングされたイメージ、トリミングされたイメージなどのケースを処理しません。しかし、基本的な比較には、これは役立つはずです。
どこかに文書化されたより良い戦略はありますか?
編集:アーロン H は速度の問題について正しいです。Levelshtein の計算は、数百 x 数百ピクセルより大きい画像の場合、ほぼ永遠にかかります。ただし、100x100 と 200x200 にダウンスケーリングした後の結果の違いは、私の例では 1% 未満であるため、最大画像サイズを ~100px 程度に設定するのが賢明かもしれません...
編集: PreludeAndFugue に感謝します。その質問は私が探していたものです。
ちなみに、レーベンシュタイン距離は最適化できるようですが、背景に冗長な要素がたくさんあるためか、非常に悪い結果が得られます。他のいくつかのアルゴリズムを見なければなりません。
EIDT:二乗平均平方根偏差とピーク信号対雑音比は、実装がそれほど難しくなく、CPU の負荷がそれほど高くないように見える別の 2 つのオプションのようです。ただし、形状などを認識するための何らかのコンテキスト分析が必要になるようです。
とにかく、すべてのリンクと、NumPy/SciPy への方向性を指摘してくれてありがとう。