Можно ли провести сравнение двух изображений для определения их схожести?

Привет. <br/> Я хотел бы сравнить два или более изображения и определить процент их схожести. Я искал решения, но не нашел ничего простого. Например, у меня есть две картинки, в которых есть одинаковая часть. Вот: <br/>
  • 4 октября 2024 г. 6:24
Ответы на вопрос 2
Да, сравнение изображений для определения их схожести возможно, и существует несколько подходов для этого. Вы можете воспользоваться различными методами, чтобы определить процент схожести между двумя изображениями. Вот некоторые из них:

1. **Методы на основе гистограмм**: Вы можете сравнить гистограммы двух изображений. Это даст вам общее представление о цветовом распределении. Если гистограммы похожи, изображения могут быть похожими по цвету и освещению.

2. **Статистические методы**: Вы можете использовать такие метрики, как структура подобия (Structural Similarity Index, SSIM), которая оценивает изменения яркости, контраста и структуры. Метрика PSNR (Peak Signal-to-Noise Ratio) также может быть полезной, хотя она более ориентирована на качество воссоздания изображения.

3. **Сравнение особенностей**: Используйте алгоритмы для извлечения ключевых точек или признаков (например, SIFT, SURF, ORB). Эти алгоритмы сравнивают ключевые точки на изображениях и могут помочь определить степень их схожести.

4. **Нейронные сети**: Существуют предобученные модели для сравнения изображений, такие как Siamese сети, которые могут оценивать схожесть изображений на основе их представления в векторном пространстве.

5. **Библиотеки**: Попробуйте использовать библиотеки, такие как OpenCV, scikit-image или PIL в Python, которые предоставляют инструменты для анализа и обработки изображений.

Для начала вы можете попробовать простой подход с гистограммами или SSIM. Если вам нужна помощь в реализации одного из этих методов, дайте знать, и я могу предоставить пример кода.
1. Определить для себя что ты понимаешь под похожестью. В комментарии верное подмечено. 
2. Закодировать изображения в тензорное представления.
3. Сравнивать дистанции между двумя тензорами евклидова дистанция, cosine similarity и т.д.

Сейчас даже базы есть, я такую использовал в проекте недавно (chroma db), которые оптимизируют поиск ближайшей дистанции по изображениям / текстам. То есть пишешь запрос входной эмбединг а он тебе выдает запись с наименьшей дистанцией, к данному эмбедингу.
Похожие вопросы