Графический редактор. При нажатии кнопки «Screenshot» приложение автоматически свернется, сделает снимок экрана и развернется обратно, а результирующий снимок будет выведен в окно графического редактора, который будет в свою очередь автоматически показан на экране.
В нижней части графического редактора находится панель, которая показывает информацию по текущему пикселю изображения, а именно его координаты (которые соответствуют его координатам на экране, если изображение не увеличено и если мы смотрим на скриншот экрана, а не на его часть или другую картинку), а также информация о цвете пикселя в стандарте RGB и HSV.
При появлении окна графического редактора в верхней части приложения становятся доступными кнопки работы с изображением. Если зажата кнопка «Magnifier» или не зажата ни одна из кнопок, то редактор находится в режиме увеличения, т.е. если кликнуть по изображению мышкой, то оно увеличится в 2 раза, если же сделать клик по изображению правой кнопкой мыши, то изображение будет уменьшено в 2 раза. Последующие нажатия приведут к повторению данного эффекта.
Зажатая кнопка «Cut» переводит графический редактор в режим вырезания куска изображения. В этом режиме, вы можете выделить, с помощью мыши, интересующий вас фрагмент изображения, и после того как левая кнопка мыши будет отпущена изображение в графическом редакторе будет заменено куском изображения ограниченного рамками прямоугольника который вы указали. Данный режим очень полезен при создании иерархических шаблонов в режиме «Borders», речь о котором пойдет ниже.
Зажатая кнопка «Delete Rect» переводит графический редактор в режим удаления фрагмента изображения. В данном режиме выделенный участок изображения будет залит белым цветом.
Кнопки «normal»,»borders»,»colmap» определяют какой фильтр будет наложен на изображение. При зажатой кнопке «normal» или если ни одна кнопка не зажата вообще, никакого фильтра к изображению применено не будет. В режиме «Border» изображение принимает следующий вид:
Изображение приводится к монохромному виду, при этом на нем остаются только границы объектов. Чувствительность фильтра можно настраивать с помощью параметра Treshold, который указывается в поле.
Данный фильтр не чувствителен к цветам на изображении, но чувствителен к значительному изменению яркости (причем если яркость изменится по всему изображению равномерно, то это также не окажет влияния на результат работы фильтра). Т.е. если поменяется яркость отдельных участков изображения, то результат будет уже другой, но если какие-то отдельные пиксели поменяют свой цвет, изображение с этим фильтром будет выглядеть абсолютно также. Таким образом, применение данного фильтра позволяет надежно находить объекты на динамически меняющемся изображении, не обращая внимание, на небольшие колебания цвета объекта. Изменения яркости в небольших диапазонах, также не оказывают существенного влияния на результаты поиска. Кроме того фильтр исключает из изображения графическую информацию не несущую полезной нагрузки для поиска, что облегчает создание шаблона и ускоряет время поиска. Также режим «borders» пытается определить, что является на изображении объектом, а что является фоном. От этого решения сильно зависит вид результирующего изображения, поэтому когда вы делаете шаблон на черном фоне, а ищете его на белом, либо в области поиска появляется большое белое окно (что заставляет программу думать, что фон стал белым) , то результат поиска станет неудовлетворительным, потому на другом фоне отфильтрованное изображение будет выглядеть по-другому. Это удобно при распознавании текста, но может стать проблемой при поиске изображения, т.к. хотелось бы находить его на любом фоне, поэтому в программу введен еще один режим Fix Borders. Перейдя по ссылке вы можете ознакомиться с особенностями его использования.
При активации режима «borders»,»Fix borders» или «colmap» с указанием конкретного цвета, становится доступной кнопка «Select», которая собственно и является главной и единственной кнопкой для создания шаблона. Т.е. шаблон может быть создан только из изображений с примененным фильтром. И только в этих режимах имеет смысл редактировать изображение, удаляя из него или добавляя графическую информацию. Кнопка «Pen» активирует режим рисования, на изображении черных точек. «Eraser Pen» действует противоположным образом, стирая черные точки с изображения. «Eraser» — квадратик, стирающий несколько пикселей за 1 клик.
На скорость поиска изображения влияет количество пикселей в шаблоне, поэтому имеет смысл перед созданием шаблона удалить из него избыточные пиксели (например, можно оставить только углы искомого изображения, а также фрагменты изображения характерные только для этого объекта). Чем больше шаблон относительно области поиска и чем меньше в нем пикселей — тем быстрее выполняется поиск. Кроме того в процессе изменения яркости на изображении некоторые пиксели на отфильтрованном изображении могут исчезать, поэтому необходимо оставлять только наиболее устойчивые к изменениям изображения участки объекта.
Подкрепим теорию практикой и попробуем создать шаблон, а также написать программу, которая найдет его. Делаем скриншот изображения при помощи кнопки «ScreenShot»:
Активируем режим «borders», либо если он уже был активирован, то скриншот сразу появится отфильтрованным. Будем делать шаблон из изображения кнопки «Eraser». Активируем режим Select и выделяем требуемую область изображения с помощью мыши, появляется рамка:
Нет необходимости выделять изображение точно по краям значимых пикселей. При добавлении шаблона в базу данных, области без пикселей по краям изображения будут автоматически исключены из шаблона. Теперь кликаем правой кнопкой мыши внутри выделенного прямоугольника. Появляется диалоговое окно:
В котором , необходимо указать имя создаваемого шаблона. Шаблон может иметь несколько (сколько угодно) изображений, поэтому необходимо также указать имя конкретного изображения в поле Item name. По умолчанию оно заполняется значением DefaultItem, если у вас один шаблон содержит одно изображение, то менять этого не нужно, в противном случае каждое изображение должно иметь уникальный внутри шаблона идентификатор. Поле MainColor для режима «Borders» должен иметь значение «None». В этом поле указывается, в каком цвете искать шаблон, т.к. в режиме выделения границ цвета не учитываются, то и цвет тут мы не указываем. Default Item — содержит имя экземпляра изображения, который будет искаться по умолчанию, соответственно, тут тоже можно ничего не менять, если у нас всего один экземпляр изображения. Шаблон может иметь родительский шаблон, для того чтобы указать родителя для создаваемого шаблона достаточно просто щелкнуть по шаблону родителю в дереве объектов и напротив надписи «Parent» появится имя шаблона родителя. Если родителя не выбрать, то шаблон будет помещен в корень раздела «Templates» в дереве объектов, именно это нам сейчас и нужно, поэтому мы просто в поле Object name указываем имя шаблона «sample1» и жмем кнопку Input. И если мы все сделали правильно, то в дереве объектов мы можем наблюдать следующую картину:
Шаблон готов.
Чтобы написать программу по его поиску, нам нужно вернуться к редактору форм. Открываем меню «Окна», находим там пункт дизайнер формы и выбираем его. Добавляем на форму кнопку2, и добавляем ей обработчик события «OnClick». Из дерева объектов перетаскиваем в текстовый редактор объект sample1 (можно просто набрать слово руками в текстовом редакторе). Далее вводим символ «.» появляется выпадающий список свойств и действий которые можно выполнить. Нас интересует функция FindPicture (найти картинку), выбираем ее, ставим в конце строки символ «;». Программирование окончено.
Если вы все сделали верно, то код в текстовом редакторе должен выглядеть как показано на рисунке. Нажимаем кнопку Save, и затем нажимаем кнопку Launch. В запущенном приложении жмем на Button2 и получаем сообщение (т.к. программа запущена в отладочном режиме)
о том, что изображение найдено, о месте его положения и степени совпадения изображения с шаблоном. Также в каталоге \каталог куда установлена программа\Debug\ вы можете обнаружить одноименный с шаблоном bmp файл, в котором вы обнаружите скриншот области поиска с выделенным красным прямоугольником объектом поиска. Таким образом, мы можем иметь представление о том, что же делает наша программа в действительности. Также в программе есть кнопка Debug Files List которая вызывает форму, в которой выводится список файлов содержащихся в папке Debug, если выбрать один из них, то он будет выведен в графический редактор. Таким образом, можно смотреть отладочные картинки, не выходя из программы.
Как вы можете убедиться, NOMAD не обременяет пользователя лишними деталями при программировании, поэтому код выглядит максимально просто и понятно. Наша картинка была найдена за 125 миллисекунд на изображении размером 1366 на 768, и это еще далеко не предел. Погрешность измерения времени поиска составляет 15-16 миллисекунд, т.е. даже если изображение будет найдено за 1 мс, система покажет 15-16 мс, это ограничение является аппаратным, и никак повлиять на него мы не можем. В отладочном режиме также время отнимает необходимость вывода отладочных сообщений, т.е. в обычном режиме поиск идет немного быстрее.
В режиме ColMap изображение также приводится к монохромному виду и все действия по созданию шаблона аналогичны. За исключением того, что необходимо в поле MainColor указывать цвет, к которому необходимо преобразовывать изображение при поиске. Подробнее о том как настроить фильтр для поиска в режиме ColMap будет рассмотрено в главе о дереве объектов.