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