Bu tamamen algoritmanın ne kadar akıllı olmasını istediğinize bağlıdır.
Örneğin, bazı sorunlar şunlardır:
- kırpılmış resimler ile kırpılmamış bir resim
- metin eklenmiş ve başka biri olmayan resimler
- yansıtılmış görüntüler
Bunun için gördüğüm en kolay ve en basit algoritma , her görüntü için aşağıdaki adımları uygulamaktır:
- 64x64 veya 32x32 gibi küçük bir boyuta ölçekleyin, en boy oranını göz ardı edin, en yakın piksel yerine bir birleşik ölçekleme algoritması kullanın
- en koyu siyah ve en açık beyaz olacak şekilde renk aralıklarını ölçeklendirin
- en açık renk sol üstte olacak şekilde görüntüyü döndürün ve çevirin ve ardından üst-sağ bir sonraki koyu, alt-sol bir sonraki daha koyu (tabii ki mümkün olduğunca)
Düzenleme Bir birleşik ölçekleme algoritması , 10 piksel küçültüldüğünde, tüm bu 10 pikselin rengini alan ve bunları tek bir pikselde birleştiren bir işlev kullanarak bunu yapacak bir algoritmadır . Ortalama, ortalama değer gibi algoritmalar veya bikübik eğriler gibi daha karmaşık algoritmalarla yapılabilir.
Ardından, iki görüntü arasındaki ortalama mesafeyi piksel piksel hesaplayın.
Bir veritabanında olası bir eşleşmeyi aramak için, piksel renklerini veritabanında ayrı sütunlar olarak depolayın, bir grup dizini dizinleyin (ancak çok küçük bir görüntü kullanmadığınız sürece hepsini değil) ve her biri için bir aralık kullanan bir sorgu yapın piksel değeri, yani. küçük resimdeki pikselin, bakmak istediğiniz görüntünün -5 ile +5'i arasında olduğu her görüntü.
Bu, uygulanması kolay ve oldukça hızlıdır, ancak elbette en gelişmiş farklılıkların üstesinden gelmeyecektir. Bunun için çok daha gelişmiş algoritmalara ihtiyacınız var.