Обычные алгоритмы хеширования или вычисления CRC плохо работают с данными изображения. Необходимо учитывать размерный характер информации.
Если вам нужен чрезвычайно надежный отпечаток пальца, такой, что учитываются аффинные преобразования (масштабирование, поворот, перевод, переворачивание), вы можете использовать преобразование Радона в источнике изображения для создания нормативного сопоставления данных изображения - сохраните его с каждым изображением и затем сравните только отпечатки пальцев. Это сложный алгоритм и не для слабонервных.
Возможны несколько простых решений:
- Создайте гистограмму яркости изображения в виде отпечатка пальца
- Создавайте уменьшенные версии каждого изображения в виде отпечатка пальца
- Объедините методики (1) и (2) в гибридный подход для повышения качества сравнения.
Гистограмма яркости (особенно та, которая разделена на компоненты RGB) представляет собой разумный отпечаток пальца для изображения - и может быть реализована довольно эффективно. Вычитание одной гистограммы из другой даст новую историограмму, которую вы можете обработать, чтобы определить, насколько похожи два изображения. Гистограммы, поскольку только они оценивают распределение и появление информации о яркости / цвете, достаточно хорошо обрабатывают аффинные преобразования. Если квантовать информацию о яркости каждого цветового компонента до 8-битного значения, 768 байтов памяти будет достаточно для отпечатка пальца изображения практически любого разумного размера. Гистограммы яркости дают ложные негативы при изменении информации о цвете в изображении. Если вы примените преобразования, такие как контраст / яркость, постеризация, смещение цвета, информация о яркости изменится.
Использование масштабированных изображений - это еще один способ снизить информационную плотность изображения до уровня, который легче сравнивать. При уменьшении менее 10% от исходного размера изображения обычно теряется слишком много информации, чтобы его можно было использовать - поэтому изображение размером 800x800 пикселей можно уменьшить до 80x80 и при этом предоставить достаточно информации для выполнения достойного снятия отпечатков пальцев. В отличие от данных гистограммы, вы должны выполнить анизотропное масштабирование данных изображения, когда исходные разрешения имеют разные соотношения сторон. Другими словами, уменьшение изображения 300x800 до миниатюры 80x80 вызывает деформацию изображения, так что по сравнению с изображением 300x500 (что очень похоже) будет вызывать ложноотрицательные результаты. Отпечатки миниатюр также часто дают ложноотрицательные результаты, когда задействованы аффинные преобразования. Если вы перевернете или поверните изображение,
Комбинирование обоих методов - разумный способ застраховать свои ставки и уменьшить количество ложноположительных и ложноотрицательных результатов.