Сопоставление с образцом изображения (если существуют возвращаемые координаты)

В настоящее время я на C # пытаюсь найти способ найти конкретный узор в большом изображении, точнее на снимке экрана. Необходимо 100% совпадение, так что проблема довольно проста. http://www.myhideout.eu/temp/pattern.png (NB: прозрачные пиксели не имеют значения и не должны проверяться.) http://www.myhideout.eu/temp/test.png

Если шаблон будет найден, мне понадобится какая-то координата, чтобы я знал где, но это простая часть.

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

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

Однако меня больше всего беспокоит время. Это всего лишь небольшая часть длительного процесса, цель которого - сократить общее время выполнения до нескольких секунд. Представьте себе изображение 1920 * 1200, что примерно соответствует пределу, где шаблон находится в конце и несколько частичных совпадений происходят до этого.

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

Я также думал, можно ли преобразовать шаблон и тестовое изображение в какой-то вид bitset, а затем просто AND, SHIFT и / или MASK, но это выходит за рамки моих текущих возможностей.

Я думаю, что я ' Здесь я подробно описал свои проблемы. Прошу прощения за задержку с примерами кода, но то, что у меня есть, мало кому пригодится, а также немного смущает.

Я очень признателен за любую помощь.

6
задан Kara 10 September 2013 в 17:38
поделиться