Мне нужен алгоритм, который может определить, являются ли два изображения «похожими» и распознает похожие образцы цвета, яркости, формы и т. Д. Мне могут понадобиться некоторые указатели относительно того, какие параметры человеческий мозг использует для «категоризации» изображений. ..
Я рассмотрел сопоставление на основе Хаусдорфа, но, похоже, оно в основном предназначено для сопоставления преобразованных объектов и шаблонов формы.
algorithm
math
image-comparison
кицунэ
источник
источник
Ответы:
Я сделал нечто подобное, разложив изображения на сигнатуры с помощью вейвлет-преобразования .
Мой подход заключался в том, чтобы выбрать n наиболее значимых коэффициентов из каждого преобразованного канала и записать их местоположение. Это было сделано путем сортировки списка кортежей (мощность, расположение) по abs (мощность). Похожие изображения будут иметь сходство в том, что они будут иметь значимые коэффициенты в одних и тех же местах.
Я обнаружил, что лучше всего преобразовать изображение в формат YUV, который позволяет эффективно взвешивать сходство по форме (канал Y) и цвету (каналы UV).
Вы можете найти мою реализацию вышеупомянутого в mactorii , над которой, к сожалению, я не работал так много, как должен :-)
Другой метод, который некоторые мои друзья использовали с удивительно хорошими результатами, - это просто уменьшить размер вашего изображения, скажем, до 4x4 пикселей и сохранить ваши подписи. Насколько похожи два изображения, можно оценить, скажем, вычислив манхэттенское расстояние между двумя изображениями с использованием соответствующих пикселей. У меня нет подробностей о том, как они выполняли изменение размера, поэтому вам, возможно, придется поиграть с различными алгоритмами, доступными для этой задачи, чтобы найти тот, который подходит.
источник
pHash может вас заинтересовать.
источник
Я использовал SIFT, чтобы повторно обнаружить один и тот же объект на разных изображениях. Это действительно мощно, но довольно сложно и может оказаться излишним. Если изображения должны быть очень похожими, некоторые простые параметры, основанные на разнице между двумя изображениями, могут многое вам сказать. Некоторые указатели:
источник
Моя лаборатория тоже нуждалась в решении этой проблемы, и мы использовали Tensorflow. Вот полная реализация приложения для визуализации сходства изображений.
Учебник по векторизации изображений для вычисления сходства можно найти на этой странице . Вот Python (опять же, полный рабочий процесс см. В публикации):
источник
Вы можете использовать Perceptual Image Diff
Это утилита командной строки, которая сравнивает два изображения с помощью метрики восприятия. То есть он использует вычислительную модель зрительной системы человека, чтобы определить, отличаются ли два изображения визуально, поэтому незначительные изменения в пикселях игнорируются. Кроме того, это резко снижает количество ложных срабатываний, вызванных различиями в генерации случайных чисел, различиями ОС или архитектуры машин.
источник
Это сложная проблема! Это зависит от того, насколько точным вам нужно быть, и от того, с какими изображениями вы работаете. Вы можете использовать гистограммы для сравнения цветов, но это, очевидно, не принимает во внимание пространственное распределение этих цветов в изображениях (то есть формы). Обнаружение краев с последующей некоторой сегментацией (например, выделение форм) может обеспечить шаблон для сопоставления с другим изображением. Вы можете использовать матрицы согласованности для сравнения текстур, рассматривая изображения как матрицы значений пикселей и сравнивая эти матрицы. Есть несколько хороших книг по сопоставлению изображений и машинному зрению - поиск на Amazon найдет их.
Надеюсь это поможет!
источник
Некоторые программные решения для распознавания изображений на самом деле не основаны исключительно на алгоритмах, а вместо этого используют концепцию нейронной сети . Посетите http://en.wikipedia.org/wiki/Artificial_neural_network, а именно NeuronDotNet, который также включает интересные образцы: http://neurondotnet.freehostia.com/index.html
источник
Есть похожие исследования с использованием нейронных сетей Кохонена / самоорганизующихся карт.
Существуют как более академические системы (Google для PicSOM), так и менее академические
( http://www.generation5.org/content/2004/aiSomPic.asp , (возможно, не подходящие для всех рабочих сред)) презентации.
источник
Вычисление суммы квадратов разностей значений цвета пикселей в резко уменьшенной версии (например, 6x6 пикселей) работает хорошо. Одинаковые изображения дают 0, похожие изображения дают маленькие числа, разные изображения дают большие.
Идея других ребят, упомянутых выше, проникнуть в YUV, сначала звучит интригующе - хотя моя идея отлично работает, я хочу, чтобы мои изображения вычислялись как «разные», чтобы получить правильный результат - даже с точки зрения дальтоника.
источник
Это похоже на проблему со зрением. Возможно, вы захотите изучить Adaptive Boosting, а также алгоритм извлечения строк Burns. Концепции этих двух должны помочь в решении этой проблемы. Обнаружение краев - еще более простое место для начала, если вы новичок в алгоритмах зрения, поскольку оно объясняет основы.
Что касается параметров категоризации:
источник
В зависимости от того, насколько точные результаты вам нужны, вы можете просто разбить изображения на блоки размером nxn пикселей и проанализировать их. Если вы получите разные результаты в первом блоке, вы не сможете остановить обработку, что приведет к некоторому повышению производительности.
Например, для анализа квадратов можно получить сумму значений цвета.
источник
Я нашел эту статью очень полезной, объясняющую, как это работает:
http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
источник
Вы можете выполнить какую-то оценку движения сопоставления блоков между двумя изображениями и измерить общую сумму остатков и затрат вектора движения (во многом как в видеокодере). Это компенсировало бы движение; для бонусных очков выполните оценку движения с аффинным преобразованием (компенсирует масштабирование, растяжение и т. д.). Вы также можете использовать перекрывающиеся блоки или оптический поток.
источник
В качестве первого прохода вы можете попробовать использовать цветовые гистограммы. Однако вам действительно нужно сузить область своей проблемы. Общее сопоставление изображений - очень сложная проблема.
источник
Приносим извинения за то, что присоединились к позднему обсуждению
Мы даже можем использовать методологию ORB для обнаружения точек схожих характеристик между двумя изображениями. Следующая ссылка дает прямую реализацию ORB в python
http://scikit-image.org/docs/dev/auto_examples/plot_orb.html
Даже openCV имеет прямую реализацию ORB. Если вы больше информации, следуйте исследовательской статье, приведенной ниже.
https://www.researchgate.net/publication/292157133_Image_Matching_Using_SIFT_SURF_BRIEF_and_ORB_Performance_Comparison_for_Distorted_Images
источник
В другой ветке есть несколько хороших ответов по этому поводу, но мне интересно, сработает ли что-нибудь, связанное со спектральным анализом? То есть, разбейте изображение на информацию о фазе и амплитуде и сравните их. Это поможет избежать некоторых проблем с кадрированием, трансформацией и различиями в интенсивности. Во всяком случае, это всего лишь мои предположения, поскольку это кажется интересной проблемой. Если вы искали http://scholar.google.com, я уверен, что вы могли бы найти несколько статей по этому поводу.
источник