Я разработал простой и быстрый алгоритм в PHP для сравнения изображений по сходству.
Быстрое (~ 40 в секунду для 800x600 изображений) хеширование и неоптимизированный алгоритм поиска позволяют просматривать 3000 изображений за 22 минуты, сравнивая каждое из них с другими (3 / с).
Основной обзор: вы получаете изображение, масштабируете его до 8x8 и затем конвертируете эти пиксели для HSV. Затем оттенок, насыщенность и значение усекаются до 4 битов, и он становится одной большой шестнадцатеричной строкой.
Сравнение изображений в основном идет по двум строкам, а затем добавляет найденные различия. Если общее число меньше 64, то это же изображение. Разные изображения обычно около 600 - 800. Ниже 20 и очень похожи.
Есть ли какие-либо улучшения в этой модели, которые я могу использовать?
Я не смотрел, насколько релевантны различные компоненты (оттенок, насыщенность и значение) для сравнения. Оттенок, вероятно, довольно важен, но другие?
Чтобы ускорить поиск, я, вероятно, мог бы разделить 4 бита от каждой части пополам, и поместить самые старшие биты первыми, чтобы в случае неудачной проверки lsb вообще не нужно было проверять. Я не знаю эффективного способа хранения таких битов, но все же могу легко их искать и сравнивать.
Я использовал набор данных из 3000 фотографий (в основном уникальных), и никаких ложных срабатываний не было. Он полностью невосприимчив к изменениям размера и довольно устойчив к изменениям яркости и контрастности.