類似のカラーパレットを持つすべての画像を、類似度が降順でソートされた選択した画像にどのように見つけ出すかは、10,000個のJPEG、PNG画像があるとしますか?Pythonで同様のカラーパレットを持つ画像を見つける
答えて
各画像のカラーヒストグラムを作成します。次に、画像をコレクションに一致させたいときは、ヒストグラムが選択した画像のヒストグラムとどのくらい近いかによってリストを並べ替えるだけです。
バケットの数は、どれくらい正確であるかによって異なります。バケットを作成するために結合されたデータのタイプは、検索の優先順位をどのように定義するかを定義します。
あなたは色相の中で最も興味を持っている場合たとえば、あなたはイメージのあなたの個々のピクセルはようになりバケットを定義することができます:あなたはまた、一般的な照合をしたい場合は、することができます、
def bucket_from_pixel(r, g, b):
hue = hue_from_rgb(r, g, b) # [0, 360)
return (hue * NUM_BUCKETS)/360
は、完全なRGB値に基づいてバケットを選択します。
PILを使用すると、組み込みのhistogram
機能を使用できます。 「近さ」ヒストグラムは、任意の距離測定値を使用して計算できます。例えば、L1距離があってもよい:
hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored
dist = sum([abs(x) for x in (hist_sel - hist)])
L2は次のようになります
dist = sqrt(sum([x*x for x in (hist_sel - hist)]))
Normalize
ほんのいくつかの定数値(細かい1.0作品)に等しくなるようにヒストグラムの和を強制。これは、大きな画像を小さな画像と正しく比較できるようにするために重要です。 L1距離を使用する場合は、normalize
のL1測定値を使用する必要があります。 L2の場合はL2です。
@Frank、あなたの助言に感謝します。 Pythonでいくつかのサンプルコードを教えてください。 PILのbuild-in histogram()関数はリストを返します。二つの画像のヒストグラムがどのくらい近いかを調べるには? – jack
@Frank、10,000の候補の中から同様のヒストグラムを持つ画像を選ぶときに10,000の距離計算が必要なようですね。数値を各画像に関連付けてデータベースに格納することができるため、比較はいくつかのSQLクエリに単純化できますか? – jack
@ジャック、10,000の計算は本当に高価ではありません。このようなコードを高速化する最善の方法は、ヒストグラムを整数に減らすことではなく(考えることはできませんが)、結果を単純に**キャッシュ**することです。ソート順(イメージ単位)をデータベースにキャッシュするか、メモリにキャッシュします。ヒストグラムをデータベースまたはメモリに保存して、ソート順キャッシュを再構築するのに費用がかからないようにしてください。 –
あなたの質問はすでに回答済みです。
コメントがあります... – ChristopheD
私はそれが答えられたとは言いません。彼はPILの土地で立ち往生している。 –
- 1. pythonファイル内のパスを持つ画像を見つける
- 2. jquery表の行に同様のIDを持つセレクタを見つける方法
- 3. 同様にmysqlの2つのテーブルのデータを見つける
- 4. 3D画像でサーフェスを見つける
- 5. python/opencv pandasで標準画像を見つける
- 6. 画像内のパターンを見つける
- 7. 画像のURLを見つける
- 8. 画像内のエッジを見つける
- 9. 画像の十字を見つける
- 10. larggestデータベースで同様のメッセージを見つける方法
- 11. セルアレイMATLABで同様の地域を見つける
- 12. 画像の輪郭を見つけるPython OpenCV
- 13. 2つの画像で共通のものを見つける
- 14. 違いを見つける - 14x14画像
- 15. 2つの同様のグラフで異なるノードを見つける方法
- 16. 別の画像の中の画像を見つける
- 17. 複数の画像間の差分画像を見つける
- 18. データベース内のすべての同様のペアを見つける
- 19. Numpy画像の中にサブ画像を見つける
- 20. opencv画像を他の画像に見つける
- 21. 別の列に同じ値を持つ行を見つける - Python
- 22. Pythonで隣接リストを持つトーナメントでハミルトニアンパスを見つける
- 23. Microsoft Face API-リアルタイムビデオと同様の顔を見つける
- 24. 2つのベクトルの同じインデックスを持つ同じ要素を見つける
- 25. 2つの画像の差のバウンディングボックスを見つけるか?
- 26. 非テキスト属性を持つ同様の顧客を見つけるための類似検索の手法
- 27. .netお客様のアプリケーション設定を持つコアドッカー画像
- 28. python ElementTree特定のテキスト値を持つ子を見つける
- 29. 同様のcourse_idを持つphpのグループオブジェクト
- 30. 同様のオプションを持つサブコマンドを持つJavaコマンドラインパーサー
可能な重複:http://stackoverflow.com/questions/593925/how-do-i-find-images-with-aこれらの他のSOの答えを見てみましょう-similar-color-using-python-and-pil – ChristopheD
ええ、その質問には良い答えはありません。 :-) –
多くの似たような議論があります: http://stackoverflow.com/questions/1034900/near-duplicate-image-detection/1048723#1048723 – Paul