Це повністю залежить від того, наскільки розумним ви хочете бути алгоритм.
Наприклад, ось кілька питань:
- обрізані зображення проти не обрізаного зображення
- зображення із доданим текстом порівняно з іншим без
- дзеркальні зображення
Найпростіший і найпростіший алгоритм, який я бачив для цього, - це просто виконати такі дії для кожного зображення:
- масштабувати до чогось маленького, наприклад, 64x64 або 32x32, не враховуючи пропорції, використовуйте комбінуючий алгоритм масштабування замість найближчого пікселя
- масштабуйте діапазони кольорів так, щоб найтемніший був чорним, а найсвітлішим - білим
- поверніть і переверніть зображення так, щоб найсвітніший колір був у верхньому лівому куті, а потім верхній правий - наступний темніший, нижній лівий - наступний темніший (наскільки це можливо, звичайно)
Редагувати алгоритм об'єднання масштабування є один , що при масштабуванні 10 пікселів вниз на один буде робити це з допомогою функції , яка приймає колір всіх цих 10 пікселів і об'єднує їх в одне ціле. Це можна зробити за допомогою таких алгоритмів, як усереднення, середнє значення або більш складних, таких як бікубічні сплайни.
Потім обчисліть середню відстань пікселів за пікселем між двома зображеннями.
Щоб знайти можливу відповідність у базі даних, збережіть піксельні кольори як окремі стовпці в базі даних, проіндексуйте купу з них (але не всі, якщо ви не використовуєте дуже маленьке зображення) та виконайте запит, який використовує діапазон для кожного значення пікселя, тобто. кожне зображення, де піксель на маленькому зображенні знаходиться між -5 і +5 зображення, яке потрібно шукати.
Це легко впровадити і досить швидко запустити, але, звичайно, не впорається з найсучаснішими відмінностями. Для цього вам потрібні набагато вдосконаленіші алгоритми.