Я хотел бы решить, присутствует ли изображение в списке, хранящемся в БД (например, изображения удостоверений личности, паспорта, карты Stu. и т. д.). Я подумал об использовании алгоритма KNN, который будет отображать K ближайших изображений.
Опции для метрики расстояния:
- сумма евклидова расстояния между каждым относительным пикселем (img1[pixel_i], img2[pixel_i])
- сумма евклидова расстояния между каждым пикселем друг от друга, умноженная на некоторый коэффициент, уменьшающийся с расстоянием (пиксель к пикселю)
- то же, что и выше, но с Манхэттеном...
Вы знаете/думаете о лучшем способе решения проблемы схожести изображений?
Ответ 1 · рейтинг 1 · pixelmitch
Я думаю, что использование необработанных значений уровня серого для вычисления расстояний - очень плохая идея. Это не инвариантно к освещению, перемещению и вращению (хотя я не думаю, что вращение является большой проблемой для изображений лиц).
Попробуйте использовать надежный и инвариантный дескриптор, извлеченный из каждого изображения (например, SIFT для ключевых точек), а затем вычислите расстояния между этими функциями. K-NN может работать. Кроме того, поищите литературу по поиску изображений для более продвинутых подходов.
Надеюсь это поможет!
Ответ 2 · рейтинг 1 · Mark Setchell
Если у вас есть большое количество изображений в вашей базе данных, будет довольно громоздко каждый раз вычислять сходство между данным изображением и каждым отдельным изображением в вашей базе данных. Вместо этого я бы рассмотрел что-то вроде Perceptual Hash (pHash), где вы можете предварительно вычислить параметр ОДИН РАЗ для каждого изображения в вашей базе данных и сохранить его, а затем, когда вы хотите сравнить изображение, вы вычисляете только его единственный pHash и сравниваете это со всеми сохраненными в вашей базе данных.