これは、アルゴリズムをどれだけ賢くしたいかによって異なります。
たとえば、次のような問題があります。
- トリミングされた画像とトリミングされていない画像
- テキストが追加された画像とテキストが追加されていない画像
- 鏡像
これについて私が見た中で最も簡単で単純なアルゴリズムは、各画像に対して次の手順を実行するだけです。
- 64x64 や 32x32 などの小さなサイズにスケーリングし、縦横比を無視し、最も近いピクセルではなく結合スケーリング アルゴリズムを使用します。
- 最も暗い色が黒で最も明るい色が白になるように、色の範囲を調整します
- 最も明るい色が左上になり、次に右上が次に暗くなり、左下が次に暗くなるように画像を回転および反転します(もちろん可能な限り)
編集結合スケーリング アルゴリズムは、10 ピクセルを 1 に縮小するときに、10 ピクセルすべての色を取得してそれらを 1 つに結合する関数を使用して実行するアルゴリズムです。平均化、平均値、または双 3 次スプラインなどのより複雑なアルゴリズムで実行できます。
次に、2 つの画像間のピクセル単位の平均距離を計算します。
データベースで一致する可能性のあるものを検索するには、ピクセルの色をデータベースの個々の列として保存し、それらの束 (非常に小さな画像を使用しない限り、すべてではありません) にインデックスを付け、それぞれの範囲を使用するクエリを実行します。ピクセル値、つまり。小さな画像のピクセルが、検索したい画像の -5 から +5 の間にあるすべての画像。
これは実装が簡単で、かなり高速に実行できますが、もちろん、ほとんどの高度な違いを処理することはできません。そのためには、はるかに高度なアルゴリズムが必要です。