2009-12-21 3 views

ответ

1

Это зависит от того, выполняется ли вы «точное» совпадение с побитовыми шаблонами или приблизительное (нечеткое) совпадение изображений. Если вы делаете точное совпадение, просто обрабатывайте растровые изображения как общий поиск массива 2D-данных.

Наименьшая, но очень простая реализация для точного соответствия может быть выполнена в N * M, где N - количество пикселей в стоге сена, а M - количество пикселей в игле.

С учетом размера Haystack (S, T) и размера бит иглы (U, V) вы можете перебирать стог с X = [0, S-U) & Y = [0, T-V). Для каждого местоположения вы можете посмотреть на 2D-под-массив того же размера, что и Needle [{X, Y}, {X + U, Y + V}) и сравнить его с иглой [{0,0}, { U, V}).

+0

Я хочу сделать нечеткое совпадение ... Я считаю, что это доступно в рамках AForge, который я использую? – Ropstah

+0

Я действительно понятия не имею, куда перейти от двух растровых изображений на нечеткой логике :) – Ropstah

+0

Ну, с нечетким совпадением, хотите ли вы масштабировать/вращать/допускать перекос? – Adisak

0

Вы можете сделать это через Image Registration, хотя я не знаю (хорошей) библиотеки .NET, пригодной для использования непосредственно для этого.

Если вы хотите использовать C++, у Insight Toolkit есть много инструментов, которые помогут вам сделать это, в том числе возможность для вашего «стога сена» точно не соответствовать «иглам» (то есть: «нечеткий» поиск/сопоставление).

0

Я никоим образом не специалист по обработке изображений. Просто поиграть с идеей из головы здесь :)

Скажите, что вы смотрите на линию пикселей в вашей иголке. Эта строка может служить основой для вычисления контрольной суммы для данной строки, поэтому давайте назовем ее отпечатком пальца. Теперь вы можете искать все горизонтальные линии в стоге сена для подмножеств одинаковой длины с той же контрольной суммой. Когда вы найдете своих горизонтальных кандидатов, вы можете проверить их для вертикального соответствия.

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

Я уверен, что есть много лучших способов сделать это, но я думал, что я хотел бы поделиться своими мыслями :)

Удачи

1

Вы можете посмотреть на «edge detection» родовое за то, что вы пытаетесь сделать.

Эти две ссылки выглядят полезными, но дело больше с регистрацией цвета, чем обработка изображений:

  1. Codeproject: Edge Detection
  2. Edge Detection in C#

суть того, что вы хотите сделать, это:

  1. Отрежьте изображение «Найти» до минимального размера
  2. Переверните «найти» изображение и убедитесь, что края являются чистыми (имеют высокие градиенты) как можно
  3. Сканирование «целевое» изображения и обнаружить все ребра
  4. Подразделите «мишень» изображение в разделы " найдите «размер (плюс некоторая ошибка)) и возьмите только регионы, где есть большое количество ребер.
  5. Передняя часть в« целевом »XOR« найти »изображение в разделе (при необходимости увеличивая) и посмотреть, порог ниже вашего обнаруженного порога

Итак, основы вы зажимаете свое изображение «найти», в vert it (для XOR позже), найдите все ребра в целевом изображении, затем примените карту XOR к этим регионам и найдите самый высокий процент соответствия.

В качестве альтернативы, если изображения достаточно малы, вы можете «скользить» применять ту же технику, инвертировать изображение поиска и перемещать его по «целевому» изображению в поисках соответствия.

Основная проблема с этими методами заключается в том, что составляет «соответствие», обычно это не 100-процентное совпадение, и у вас должен быть код, с которым приходится иметь дело, когда это произойдет.

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

Смежные вопросы