Поиск обрезанных похожих изображений - PullRequest
1 голос
/ 18 мая 2009

2 изображения имеют одинаковый цвет, рисунок и т. Д. Одно изображение обрезается от другого. Алгоритмы, которые я нашел, в основном используют местоположение для сравнения различий между изображениями, поэтому оно дает ложный результат для обрезанного изображения. Как узнать, что эти 2 изображения похожи?

Спасибо

Ответы [ 5 ]

2 голосов
/ 07 сентября 2009

Вам действительно нужно предоставить больше информации, но, возможно, вы можете использовать алгоритм взаимной корреляции? Вы в основном скользите обрезанные изображения через каждую точку изображения, чтобы сопоставить, и находите сходство. Если есть точка, где они совпадают выше определенного порога, вы можете предположить, что меньшее изображение является подмножеством большего в этом месте.

Вы можете значительно ускорить процесс, используя алгоритм БПФ, вместо того, чтобы фактически его продвигать.

Википедия называет это " фазовая корреляция "

Пример MATLAB: Регистрация изображения с использованием нормализованной взаимной корреляции

alt text
(источник: mathworks.com )

1 голос
/ 23 мая 2009

Это может быть излишним, но я бы проверил алгоритм SIFT . Обычно это то, что используется при выравнивании изображений для панорам.

1 голос
/ 18 мая 2009

Было бы полезно узнать больше о вашей проблемной области. Например, вы пытаетесь выбрать, из какого из 100 изображений получен обрезанный образец? Или вы даже не знаете, будет ли обрезанный образец взят из каких-либо изображений в вашей библиотеке?

Я не специалист по обработке изображений, но я работал с одним или несколькими предметами. Первое, что приходит на ум, это то, что вы можете попробовать выполнить какое-то усреднение цвета, чтобы увидеть, сможете ли вы создать эффект, который позволит вам найти вероятных кандидатов.

Найти среднее значение RGB для обрезанного образца. Затем, чтобы увидеть, может ли это быть совпадение с образцом, найдите локальное среднее значение цвета RGB в нескольких точках на изображении. Если ваше усеченное среднее значение RBG слишком далеко от всех локальных средних на изображении, маловероятно, что они связаны.

Как только вы сузите несколько кандидатов, найти точное местоположение все равно будет сложно. Попробуйте поработать над версиями изображений с подвыборкой. Если оригинал изображение размером 2000x2000, сэмплируйте оба изображения по 10, чтобы получить основное изображение 200x200. Сделайте тот же подвыбор для обрезанного изображения и посмотрите, где вы лучше всего подходите. Затем итеративно уменьшите количество подвыборок и настройте точное местоположение вашего обрезанного изображения. Вы все еще используете некоторую грубую силу, но она на изображении в 100 раз меньше.

0 голосов
/ 27 января 2013

Если вы используете OpenCV, вам нужна функция MatchTemplate (), а затем MinMaxLoc () для поиска наилучшего соответствия.

0 голосов
/ 18 мая 2009

Хлоп! Я бился головой об этом много лет назад и никогда не придумал жизнеспособного ответа на мою проблему. У меня были некоторые мысли с тех пор, как я не пытался их реализовать, и я выброшу их на всякий случай, если они принесут вам пользу:

Я не согласен с утверждением Эла Кроули о средних значениях RGB - кадрирование вполне может быть удалением объекта, который сильно отличается от цели.

Кроме того, наблюдение: уменьшение изображения до миниатюры 8х8 (не то, что оно достаточно велико для человеческого глаза) и взятие квадрата разности каждого компонента делает довольно хорошую работу по выделению дубликатов и часто работает даже с небольшими культурами вокруг края. В идеале контраст должен быть нормализован перед созданием миниатюры, я не делал этого и обнаружил, что куча низкоконтрастных изображений дублирует друг друга, когда они вообще не имеют сходства. Этот подход использует только 192 байта на изображение и, таким образом, позволяет сравнивать большое количество изображений в памяти, хотя это все еще алгоритм O (n ^ 2). (Я сделал это, чтобы вы могли закрыть программу в любое время, она выдаст информацию о состоянии и закроется, в следующий раз она возобновит работу с того места, где она остановилась.)

Учитывая то, что вы описываете как проблему, я был бы склонен попытаться взять набор тестовых культур изображения и провести сравнение с каждой культурой. Когда вы найдете вероятного кандидата, тогда начните работать с большими изображениями и попытайтесь сузить его, пробежав несколько пикселей и посмотрев, станет ли он лучше или хуже. Я не могу представить ничего, кроме очень медленного исполнения от такой рутины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...