Вы находитесь на странице: 1из 82

П. В. БАЛАБАНОВ, А. Г. ДИВИН, А. С.

ЕГОРОВ

Т ам бов
И зд а т е л ь с к и й ц е н т р ФГБОУ ВО «ТГТУ»
2019
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Тамбовский государственный технический университет»

П. В. БАЛАБАНОВ, А. Г. ДИВИН, А. С. ЕГОРОВ

ТЕХНИЧЕСКОЕ ЗРЕНИЕ
РОБОТОТЕХНИЧЕСКИХ
КОМПЛЕКСОВ

Утверждено Учёным советом университета в качестве учебного пособия для


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

Учебное электронное издание

Тамбов
Издательский центр ФГБОУ ВО «ТГТУ»
2019
УДК 004.93
ББК 32.813+32.816
Б20

Рецензенты:
Кандидат физико-математических наук, доцент,
заместитель директора по НИР НИИ «Нанотехнологии и наноматериалы»
ФГБОУ ВО «ТГУ им. Г. Р. Державина»
А. И. Тюрин

Доктор технических наук, профессор, заведующий кафедрой


«ИСиЗИ» ФГБОУ ВО «ТГТУ»
В. В. Алексеев

Балабанов, П. В.
Б20 Техническое зрение робототехнических комплексов [Электронный
ресурс] : учебное пособие / И. В. Балабанов, А. Г. Дивин, А. С. Егоров. -
Тамбов : Издательский центр ФГБОУ ВО «ТГТУ», 2019. - 1 электрон, опт.
диск (CD-ROM). - Системные требования : ПК не ниже класса Pentium I I ;
CD-ROM-дисковод; 35,5 M b ; RAM ; Windows 95/98/XP ; мышь. - Загл.
с экрана.
ISBN 978-5-8265-2096-3

Рассмотрены основные алгоритмы обработки изображений, которые могут


быть реализованы в различных средах: как в LabView N1 VISION, так и
в OpenCV, Python, с помощью которых можно обрабатывать информацию
с видеокамер, а также управлять как промышленными манипуляторами, так и
мобильными роботами (в том числе беспилотными летательными аппаратами).
Предназначено для бакалавров и магистрантов, обучающихся по направле­
нию подготовки 15.03.06 «Механика и робототехника», а также для студентов
и аспирантов, изучающих информационные технологии и системы технического
зрения.
УДК 004.93
ББК 32.813+32.816
Все права на размножение и распространение в любой форме остаются за разработчиком.
Нелегальное копирование и использование данного продукта запрещено.

ISBN 978-5-8265-2096-3 © Федеральное государственное бюджетное


образовательное учреждение высшего образования
«Тамбовский государственный технический
университет» (ФГБОУ ВО «ТГТУ»), 2019
ВВЕДЕНИЕ

Техническое (компьютерное) зрение - теория и технология создания


машин, которые могут производить обнаружение, слежение и классификацию
объектов [1]. Как научная дисциплина компьютерное зрение относится
к теории и технологии создания искусственных систем, которые получают
информацию из изображений. Видеоданные могут быть представлены множе­
ством форм, таких как видеопоследовательность, изображения с различных
камер, или трёхмерными данными.
Существуют четыре основные задачи технического зрения.
1. Распознавание положения. Цель машинного зрения в данном приме­
нении - определение пространственного местоположения (местоположения
объекта относительно внешней системы координат) или статического положе­
ния объекта (в каком положении находится объект относительно системы
координат с началом отсчёта в пределах самого объекта) и передача информа­
ции о положении и ориентации объекта в систему управления или контроллер.
2. Измерение. В приложениях данного типа основная задача видеокаме­
ры заключается в измерении различных физических параметров объекта.
Примером физических параметров может служить линейный размер, диаметр,
кривизна, площадь, высота и количество различных объектов.
3. Инспекция. В приложениях, связанных с инспекцией, цель техниче­
ского зрения - подтвердить определённые свойства, например наличие или
отсутствие этикетки на бутылке, болтов для проведения операции сборки,
шоколадных конфет в коробке или наличие различных дефектов. В зависимо­
сти от вида используемых видеодатчиков и свойств объекта можно контроли­
ровать наличие дефектов в ультрафиолетовом, видимом или инфракрасном
диапазонах спектра [2].
4. Идентификация. В задачах идентификации основное назначение
видеокамеры - считывание различных кодов (штрихкодов, 2Б-кодов и т.п.)
для их распознавания с помощью камер или системного контроллера, а также
определение различных буквенно-цифровых обозначений.
В абсолютном большинстве случаев системы технического зрения
выполняют перечисленные выше задачи в рамках одного приложения.
Например, при оптической сортировке объектов растительного происхождения
(овощей и фруктов) необходимо определять размеры объекта, положение
центра тяжести его на конвейере, определять дефекты с использованием актив­
ных методов контроля и т.д.
Для эффективного решения поставленных задач существует множество
известных инструментов и алгоритмов, описанных в предлагаемом учебном
пособии.

3
1. ОСНОВЫ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ
https://t.me/it_boooks/2

Изображение - это массив значений, передающих яркость свечения


в формате 2D. Термин «изображение» по сути относится к цифровому пред­
ставлению изображения как способу обработки рисунка. Изображение - функ­
ция интенсивности светового излучения /(х, у), где/ - яркость точки с коорди­
натами (х, у), а точки х и у воспроизводят пространственные координаты
элементов рисунка, или пикселей.
По негласному соглашению, пространственное соотношение пикселя
с координатами (0, 0) расположен в верхнем левом углу рисунка. На рисунке 1.1
показано, что значение х возрастает при движении слева направо, и значение у
увеличивается при движении сверху вниз.
При обработке цифровых изображений датчик формирователя изображе­
ний представляет рисунок как конечное число пикселей. Датчик присваивает
каждому пикселю числовое значение и уровень яркости или уровень цветности,
относящиеся соответственно к яркости и цветности пикселя.
Оцифрованные изображения обладают тремя основными свойствами:
разрешающей способностью (или разрешением), резкостью и количеством ото­
бражаемых плоскостей.
Пространственная разрешающая способность изображения определяется
количеством строк и столбцов пикселей. Изображение, состоящее из т столб­
цов и п строк, имеет разрешение тхп. В таком изображении содержится т пик­
селей вдоль горизонтальной оси и п пикселей вдоль его вертикальной оси.

Рис. 1.1. Пространственное соотношение точки с координатами (0, 0)


4
Резкость изображения определяет количество уровней яркости света,
которые можно увидеть на рисунке. Разрядность цвета - это число битов, пред­
назначенных для шифрования значений пикселей. Для разрядности цвета с чис­
лом п изображение имеет резкость 2й, имея в виду, что каждый пиксель может
иметь 2й различных значений. Например, если п = 8, то пиксель может быть
представлен 256 значениями от 0 до 255. Если п = 16, то пиксель может иметь
65.536 значений от 0 до 65.535 или от -32.768 до 32.767.
В среде N1 Vision можно обрабатывать 8-, 10-, 12-, 14- и 16-битовые
изображения, изображения, кодированные числами с плавающей запятой,
и рисунки с кодировкой цвета. Способ, в соответствии с которым требуется
закодировать рисунок, зависит от средства получения изображений, от типа
обработки изображений, а также от того, какого типа анализ нужно выполнить.
Например, 8-битовое кодирование уместно, если нужно получить графическую
информацию о форме объекта. Однако в случае необходимости точного опре­
деления интенсивности светового излучения рисунка или его отдельного участ­
ка потребуется использовать 16-битовое кодирование с плавающей запятой.
Изображения с кодировкой цвета используются тогда, когда использова­
ние машинного зрения или метод обработки рисунков зависят от содержания
цвета объектов, которые необходимо проконтролировать или проанализировать.
Среда N1 Vision не поддерживает напрямую другие типы кодировок,
в частности 1-, 2- или 4-битовые закодированные изображения. В этом случае
N1 Vision автоматически трансформирует такие изображения в 8-битовые -
минимальная разрядность цвета, предусмотренная в N1 Vision - при открытии
файла.
Число битовых плоскостей изображения соответствует количеству масси­
вов пикселей, его составляющих. Чёрно-белые или псевдоцветные изображения
состоят из одной плоскости. Цветные рисунки образованы тремя плоскостями,
каждая из которых отвечает за красный, синий и зелёный компоненты соответ­
ственно.
В цветных рисунках составляющая интенсивности цвета пикселя кодиру­
ется тремя различными значениями. Цветное изображение - это набор трёх
5
массивов пикселей, соответствующих красному, синему и зелёному компонен­
там в рисунках формата RGB. Изображения формата HSL определяются пока­
зателями оттенка, насыщенности цвета и освещённости.
Библиотечные процедуры N1 Vision могут управлять тремя видами
изображений: чёрно-белыми, цветными и комплексными. Хотя среда N1 Vision
поддерживает все три формата изображений, выполнение некоторых опреде­
лённых операций со специальными типами рисунков невозможно. Например,
нельзя применить логический оператор AND (И) при работе с комплексными
изображениями.
Чёрно-белое изображение состоит из одинарного массива пикселей.
Каждый пиксель кодируется с использованием одного из следующих чисел:
- 8-битовое беззначное целочисленное значение, соответствующее
воспроизведению чёрно-белого изображения. Меняется от 0 до 255;
- 16-битовое беззначное целочисленное значение, соответствующее
воспроизведению чёрно-белого изображения. Меняется от 0 до 65.535;
- 16-битовое целочисленное значение с учётом знака, соответствующее
воспроизведению чёрно-белого изображения. Меняется от -32.768 до 32.767;
- число с плавающей запятой одинарной точности. Кодируется
четырьмя байтами, воспроизводя значения, соответствующие чёрно-белому
изображению в пределах от -оо до +оо.
Цветное изображение может кодироваться как в формате «красный,
зелёный, синий» (RGB - red, green, blue), так и в формате «оттенок,
насыщенность, освещённость» (HSL - hue, saturation, luminance). Пиксели,
образующие цветные изображения, состоят из четырёх значений. Рисунки в
формате RGB сохраняют информацию о цвете, используя 8 бит для кодировки
каждой из битовых плоскостей - красной, синей и зелёной; в то время как
изображения в формате HSL хранят цветовую информацию с кодировкой по 8
бит на оттенок, насыщенность и освещённость рисунка. Рисунки в формате
RGB U64 представляют данные о цвете, используя по 16 бит для кодировки
каждой битовой плоскости - красной, синей и зелёной. В цветовых моделях
RGB и HSL дополнительные 8 бит использованию не подлежат. Такое
представление известно как 4x8 бит, или 32-битовое кодирование. В цветовых
6
моделях RGB U64 не используются дополнительные 16 бит. Такое кодирование
называют 4-х 16 бит, или 64-битовым.
Комплексное изображение содержит информацию о частоте
повторяемости чёрно-белых составляющих. Можно создать комплексное
изображение,
используя быстрое преобразование Фурье (БПФ) для чёрно-белых рисунков.
После трансформации чёрно-белого изображения в комплексное возможно
осуществление операций в диапазоне частот полученного рисунка.
Каждый пиксель комплексного изображения кодируется двумя числами
с плавающей запятой одинарной точности, которые воспроизводят
действительную и мнимую составляющие комплексного пикселя. В любом
комплексном изображении можно выделить четыре основные части:
действительную, мнимую, величину и фазу.
Файл изображения состоит из заголовка, следующего за значениями
пикселей. В зависимости от формата файла заголовок содержит информацию
об изображении, а именно: горизонтальное и вертикальное разрешения,
резкость пикселей и информация об оригинальной палитре. Файлы изображе­
ний могут также хранить информацию о калибровке, шаблонах распознавания
образов и графических накладках. Далее описаны общепринятые форматы
файлов изображений:
- поразрядная битовая карта изображения (BMP - bitmap);
- теговый формат файлов изображения (TIFF - tagged image file format);
- переносимая сетевая графика (PNG - portable network graphics);
- формат хранения графических данных, разработанный объединённой
группой экспертов в области фотографии (JPEG - joint photographic experts
group format);
- формат хранения графических данных, разработанный объединённой
группой экспертов в области фотографии 2000 (JPEG2000 - joint photographic);
- внутренний формат файлов группы National Instruments (AIPD -
National Instruments internal image file format).

7
2. ОСНОВНЫЕ ЭТАПЫ СОЗДАНИЯ ПРИЛОЖЕНИЙ
В N1 VISION ДЛЯ ОБРАБОТКИ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ

Проекты машинного зрения, как правило, следуют чётко определённому


алгоритму разработки приложения, от оригинальной идеи до подтвержде­
ния работоспособности на целевом устройстве
N1 myRIO. Конкретные детали значительно изме­
няются от одного проекта к другому, но в целом
алгоритм разработки остаётся одним и тем же.
На рисунке 2.1 приведена процедура разработки
приложения, состоящая из 11 этапов.
Для каждого из этапов можно выделить сле­
дующие важные моменты.
1. Определение требований к приложению
машинного зрения:
- цели обработки, например, измерение и
калибровка, классификация и сортировка,
распознавание штрихкода;
- производительность, выраженная в
количестве деталей, обрабатываемых в секунду;
- минимальные размеры элемента и
количество пикселей, выделенных для этих
характеристик;
- размер поля зрения;
- устройства ввода-вывода для контроля
деталей, управления положением и отображения
информации.
2. Конфигурирование системы получения
Рис. 2.1. Алгоритм _
-
разработки приложения
изображении:
г

8
- определение минимального размера элементов в физических
единицах измерения, например в миллиметрах;
- определение количества пикселей, выделенных для элемента
минимального размера, и требуемого пространственного разрешения в
миллиметрах на пиксель;
- выбор разрешения камеры и расстояния между камерой и объектом
для достижения требуемого пространственного разрешения, поля зрения (FOV)
и частоты кадров;
- настройка системы освещения для получения высокой контрастности
интересующего элемента и подавления мешающих фоновых элементов,
которые усложняют последующую программную обработку и увеличивают
вычислительные затраты;
- если цвет не требуется для приложения, то лучше использовать
полутоновые изображения для повышения эффективности; цветные
изображения замедляют визуализацию, особенно при высоком разрешении.
3. Получение образцов изображений:
- подключение камеры к персональному компьютеру или к N1 myRIO;
- использование Vision Assistant для сбора изображений при различных
условиях. Выбор в качестве «Target» (целевое устройство) «This Computer»
(этот компьютер), если камера подключена к компьютеру, или «Select Network
Target» (выбор сетевого устройства), если камера подключена к myRIO;
использование ІР-адреса 172.22.11.2, если myRIO подключён USB-кабелем,
в противном случае используется IP-адрес, назначенный myRIO при
подключении к беспроводной сети;
- использование ручных настроек камеры, особенно фокуса;
- получение изображения одного или нескольких калибровочных
образцов при одинаковых настройках камеры.
4. Калибровка камеры, если в приложении требуются физические
единицы измерения:

9
- использование изображений калибровочных образцов, собранных
на предыдущем этапе;
- использование самой простой методики калибровки, которая
позволяет достичь требуемой точности измерений.
5. Разработка скрипта для обработки:
- использование автономной версии N1 Vision Assistant;
- преобразование цвета в яркость (разумеется, если в приложении
не требуется цвет);
- оценка производительности с использованием собранных ранее
образцов изображений;
- использование минимального количества этапов, удовлетворяющего
требованиям;
- периодическая оценка вычислительных затрат на каждый этап
с помощью измерителя производительности («Performance Meter») из Vision
Assistant.
6. Создание нового проекта Lab VIEW с N1 myRIO:
- подключение камеры к N1 myRIO.
7. Конфигурирование Vision Acquisition Express VI:
- выбор варианта «Continuous acquisition with in-line processing»
(непрерывный сбор с обработкой в реальном времени);
- настройка видеорежима и атрибутов камеры в соответствии
с настройками, записанными при выполнении третьего этапа.
8. Конфигурирование Vision Assistant Express VI:
- в скрипте Vision Assistant, созданном на этапе 5, удаляется этап
преобразования цвета в яркость (при условии, что камера настроена на
полутоновый режим).
- проверка правильности работы скрипта;
- выбор необходимых входных элементов управления и выходных
индикаторов;

10
- установка опции «Create Destination Image» (создать целевое
изображение);
- размещение Express VI в цикле While;
- создание необходимых элементов управления и индикаторов.
9. Дополнение блок-диаграммы кодом для устройств ввода-вывода:
- использование при необходимости доступных встроенных узлов,
например светодиодов, акселерометра, выхода ШИМ для серводвигателей и
переключателей;
- в руководстве N1 myRIO Project Essentials Guide можно получить
подробные инструкции о разнообразных полезных внешних устройствах, таких
как датчики расстояния и ЖК-дисплеи.
10. Проверка законченного приложения.
11. Конвертация VI в автономное приложение.
Шаблон проектирования Lab VIEW - особый стиль программирования
блок-диаграммы, сложившийся со временем и признанный множеством разра­
ботчиков как полезный способ разработки самых разных приложений. Спектр
шаблонов проектирования включает как очень простые, так и очень сложные,
но все они представляют систематический подход к превращению вашей кон­
цепции в функциональное и надёжное приложение. В этой главе описан попу­
лярный шаблон state machine (конечный автомат), в частности конечный авто­
мат с очередями («Queued State Machine»), служащий основой для шаблона
проекта Lab VIEW «Machine Vision Арр».
В отличном руководстве Effective Lab VIEW Programming (Эффективное
программирование в Lab VIEW) Томаса Дж. Бресса представлен целый ряд
шаблонов проектирования, основанных на конечном автомате. Состояние реа­
лизует конкретное действие, например инкремент счётчика, захват следующего
кадра вебкамеры, анализ изображения для нахождения штрихкода, сохранение
изображения на диск и т.п. Конечный автомат переходит из одного состояния
в другое либо безоговорочно (после состояния В всегда следует состояние С),
либо по условию (перейти в состояние С, если нажата конкретная кнопка
на лицевой панели, в противном случае перейти в состояние D).
11
Шаблон «Классический конечный автомат» состоит из цикла While, сдви­
гового регистра для сохранения текущего состояния и структуры Case для
реализации действий в каждом состоянии и определения следующего значения
регистра состояний. На каждой итерации цикла While считывается значение
регистра состояний и выбирается конкретная субдиаграмма структуры Case,
т.е. каждая субдиаграмма реализует одно состояние. В каждой субдиаграмме
вычисляется следующее значение регистра состояний, которое затем передаёт­
ся через сдвиговый регистр цикла While для получения очередного значения
регистра состояний.
Конечный автомат с очередями (Queued State Machine, QSM) - более
сложный подход, отделяющий действия состояний от механизма определения
следующего состояния. Это разделение упрощает разработку и сопровождение
QSM, потому что продвигает подход «разделяй и властвуй» для разбиения при­
ложения на легко управляемые, чётко определяемые функции. Каждое состоя­
ние можно разрабатывать и отлаживать независимо от остальных состояний.
Но как определяется следующее состояние? Об этом заботится особое состоя­
ние - планировщик (scheduler). Планировщик изучает результаты анализа изо­
бражений, состояние кнопок на лицевой панели и внешних датчиков, на осно­
вании чего определяет, какую задачу - упорядоченную последовательность
состояний - выполнять следующей. Планировщик подаёт упорядоченную
последовательность состояний, составляющих задачу, на вход очереди, или
памяти FIFO («первым вошёл - первым вышел»). Занесённые в очередь состоя­
ния считываются по одному, т.е. извлекаются из очереди, на каждой итерации
цикла While и определяют выбор связанных с субдиаграммой структуры Case
действий в правильной последовательности. Очередь выполняет ту же роль,
что регистр состояний в классическом конечном автомате. После занесения
в очередь задачи планировщик должен занести в очередь самого себя, чтобы
конечный автомат вернулся в состояние планировщика после выполнения
текущей задачи.
На рисунке 2.2 показана диаграмма задач универсального QSM для при­
ложений машинного зрения, разрабатываемых для N1 myRIO.

12
Запуск

условие А
Задача А

условие в
Задача В

Планировщик
состоянии
условнее
Задача С

Обновление
иначе изображений
и устройств

"стоп" или ошибка

Выключение

Рис. 2.2. Диаграмма задач конечного автомата с очередями


13
Каждый элемент соответствует состоянию, а группа состояний образует
задачу. QSM выполняет задачу запуска, а затем планирует выполнение задач
в соответствии с условиями, определяемыми результатами анализа, состояния­
ми кнопок лицевой панели, а также внешних элементов управления и датчиков.
Как правило, планировщик выбирает состояние по умолчанию, если условия
всех других задач ложны. Задача по умолчанию извлекает изображение из веб­
камеры, анализирует его, добавляет неискажающий изображение слой, считы­
вает данные из встроенных и внешних узлов N1 myRIO или записывает в них.
Когда нажата Stop на лицевой панели или обнаружена ошибка, планировщик
выбирает задачу выключения для останова приложения.
Скачайте zip-файл с главной страницы N1 myRIO Vision Essentials Guide
(https://learn.ni.com/teacli/resources/208), извлеките папку «Machine Vision Арр»,
откройте проект Lab VIEW «machine vision арр» (дважды щёлкните по файлу
.lvproj), а затем щёлкните дважды по Маіп.ѵі, чтобы открыть его блок-
диаграмму. Потратьте несколько минут на изучение структуры блок-
диаграммы и особенно субдиаграмм структуры Case, чтобы увидеть различные
состояния и выполняемые ими действия. Этот шаблон предоставляет общую
отправную точку для всех проектов в этом руководстве. По мере завершения
каждого проекта и разработки вашей собственной библиотеки приложений
машинного зрения вы можете прийти к выводу, что проще начать работу,
скопировав существующий проект, похожий по требованиям на новый.
В любом случае реализация нового приложения машинного зрения станет
относительно простой задачей, как только вы поймёте основные принципы
шаблона проектирования конечного автомата с очередями.

2.1. СТРУКТУРА QSM


На рисунке 2.3 показана диаграмма задач шаблона проекта «Machine
Vision Арр» (МѴА). В диаграмме задач только две задачи, но шаблон содержит
много пустых состояний, которые можно адаптировать под цели вашего
проекта.

14
<

f Л

"с о х р а н и ть Сохранение ►
изображ ение"
изображения
1
Планировщик
состояний ( ----------------------
Обновление
иначе
__________ ^ изображений
и устройств
V. ______ J _________________ _
"стол" и л и о ш и б к а

* Г
Г 1 V

Выключение

>______________ -

Рис. 2.3. Диаграмма задач «Machine Vision Арр» (МѴА)

В задаче по умолчанию к полученному с веб-камеры изображению при­


меняется детектирование контуров и отображается или обработанное изобра­
жение, или оригинальное изображение с камеры вместе с неискажающим
изображение слоем наложения, отображающим системные дату и время.
На рисунке 2.4 показана последовательность состояний задачи по умолчанию.
При нажатии управляющей кнопки save image на лицевой панели выби­
рается задача Save Image (на рис. 2.5); эта задача сохраняет визуализированное
изображение в файл на подключённый флеш-накопитель.
15
Рис. 2.4. Последовательность состояний и действий для задачи МѴА по умолчанию
16
^ save (image) - Сохранение изображения ^
• Проверка подключения флеш-накопителя
• Чтение ссылок на буферы изображений, которые нужно сохранить
• Определение, какой буфер сохранять на основании переключателей
режима и флагов
у» Слияние с наложенным слоем [если необходимо) и запись в файл j


( 1[ q s m ) release - Освобождение ^
• Реинициализация всех управляющих кнопок на лицевой панели в
состояние по умолчанию (не нажатое).

Рис. 2.5. Последовательность состояний и действий


для задачи MVA «save image» (сохранение изображения)

Управляющая кнопка остаётся нажатой, пока её не отпустят, поэтому за­


дача своим последним действием освобождает кнопку. Поскольку все задачи,
реагирующие на управляющие кнопки, должны завершаться подобным обра­
зом, освобождение кнопки реализовано отдельным состоянием, которое можно
включать в любую задачу. На рисунке 2.6 показана последовательность состоя­
ний задачи запуска. Эти состояния инициализируют значения данных, выделя­
ют память для буферов изображений, сбрасывают кнопки на лицевой панели,
конфигурируют встроенные и внешние устройства. На рисунке 2.7 показана
последовательность состояний для задачи выключения. Эти состояния останав­
ливают веб-камеру, выполняют «генеральную уборку», закрывая файлы журна­
лов и освобождая память, возвращают периферийные устройства в пассивное
состояние.
17
Рис. 2.6. Последовательность состояний и действий для задачи МѴА «start-ир» (запуск)

Рис. 2.7. Последовательность состояний и действий для задачи МѴА «выключение»

18
2.2. НАСТРОЙКА КАМЕРЫ
Настройка камеры - важный начальный шаг при разработке любого
приложения машинного зрения. Всё упирается в минимальный размер элемента
и количество пикселей, выделенных для него; эти два значения определяют
требуемое пространственное разрешение камеры, которое в свою очередь
можно настроить, изменяя расстояние между камерой и объектом. Настройка
камеры включает также калибровку, чтобы позволить приложению машинного
зрения выполнять измерения в реальных физических единицах, а не в пикселях.
Калибровка может также исправить, или, по крайней мере, ослабить влияние
различных нежелательных эффектов, таких как смещение матрицы и искажение
объектива.
В процессе калибровки камеры должны быть решены следующие задачи.
1. Измерить характеристическое отношение пикселя камеры.
2. Определить расстояние от камеры до объекта для получения
требуемой разрешающей способности.
3. Рассчитать поле обзора (FOV).
4. Откалибровать камеру для использования реальных единиц измерения.
5. Скорректировать искажение объектива и тангенциальное искажение.
Пространственное разрешение описывает расстояние, охватываемое
двумя соседними пикселями. Фиксированное пространственное разрешение
матрицы камеры отображается на плоскость объекта с переменным
пространственным разрешением изображения Rs, определяемым объективом
камеры и расстоянием от плоскости объекта. Доступное поле обзора (FOV)
аналогично определяется расстоянием от камеры. Установка правильного
пространственного разрешения является важным шагом для каждого
приложения машинного зрения. Начните с минимального размера элемента SF
(в физических единицах измерения, например в миллиметрах), которое должно
быть изображено, по крайней мере, NF пикселями. Разделите SF на NF, чтобы
получить требуемое пространственное разрешение Rs.

19
Для калибровки необходимо установить камеру на отображение линейки
в поле обзора (FOV) между 10 и 20 см. Линейка размещается горизонтально.
В качестве ориентира используется горизонтальная граница окна другого
приложения на рабочем столе компьютера, чтобы деления линейки следовали
вдоль одной и той же строки пикселей.
1. Измерение горизонтального пространственного разрешения
изображения Rsh-
2. Линейка размещается вертикально и измеряется вертикальное
пространственное разрешение Rsv.
3. Расчёт отношения двух пространственных разрешений.
4. Измерение и запись в таблицу пространственных разрешений
изображения, по крайней мере при четырёх расстояниях от камеры до объекта.
В качестве граничных значений используется наименьшее расстояние, при
котором обеспечивается резкая фокусировка, наибольшее расстояние,
определяемое пределами копировального стенда камеры, а также несколько
промежуточных значений. Отмечается состояние, используемое для камеры в
качестве внешней опорной точки. Производится расчёт константы камеры К и
расстояния d между опорной точкой и центром проекции. Необходимо
убедиться, что рассчитанное значение d находится в разумных пределах,
оценив положение объектива камеры относительно опорной точки.
5. На графике отображается зависимость расстояния камеры и двух
компонентов FOV от пространственного разрешения камеры. Для того чтобы
видеть точки измерений, необходимо включить маркеры на графике. График
можно сохранить как удобный способ настройки видеосистемы для других
проектов. Фиксируются размеры N h и N v массива матрицы камеры.
6. Производится настройка камеры таким образом, чтобы в 1 см
изображения линейки (по горизонтали) содержалось 80 пикселей.
Рассчитывается пространственное разрешение изображения Rs в миллиметрах
на пиксель, необходимое расстояние от камеры до объекта D и горизонтальный
компонент поля обзора FOV h.

20
7. Осуществляется измерение реального пространственного разрешения
изображения и сравнение с расчётным, определение значения ошибки в
процентах.
8. Изменяется положение линейки, чтобы деление «О мм» совпало
с левой границей изображения; правая граница изображения теперь отображает
горизонтальную компоненту FOV.
9. Описанный метод используется для калибровки камеры с помощью
изображения горизонтально расположенной линейки, деление «О мм» которой
находится на левой границе изображения.
N1 Vision Assistant предоставляет широкий набор эффективных
инструментов для калибровки камеры и обеспечения требований приложений
машинного зрения.
Калибровка по расстоянию между точками - самый простой способ
калибровки, практически не требующий вычислительных затрат. При этой
калибровке предполагается, что плоскость матрицы идеально выровнена
относительно плоскости объекта (нулевое тангенциальное искажение), и что
объектив тоже не вносит искажений.
При калибровке по сетке массив точек, находящихся на равном
расстоянии друг от друга, используется для оценки искажений объектива на
всём поле обзора. Опционально можно оценить и тангенциальное искажение.
При калибровке по сетке измеренным координатам точек ставится в
соответствие двумерный полином, что уменьшает ошибки, обусловленные
простотой калибровки по расстоянию между точками. В Vision Assistant
имеются удобные инструменты для оценки производительности коррекции и
выбора наилучшего баланса между производительностью и вычислительными
затратами.
Для калибровки камеры по сетке точек саму сетку из точек необходимо
распечатать на лазерном принтере. Измеряется расстояние между
калибровочными метками для проверки того, что сетка распечатана правильно.

21
10. Выполняется калибровка камеры по сетке. Записывается процентное
искажение и среднее значение погрешности для пяти доступных моделей
искажения.
Калибровку камеры следует повторять каждый раз после изменения
настроек камеры. Калибровка действует только для объектов, находящихся
в той же плоскости, что и сетка из точек, т.е. калибровка по сетке из точек
и заново выполненная фокусировка на более толстом объекте приведут
к некорректным результатам.

22
3. ВВЕДЕНИЕ В ОБРАБОТКУ ИЗОБРАЖЕНИЙ
СРЕДСТВАМИ OPENCV

https://t.me/it_boooks/2 3.1. ЗАГРУЗКА ИЗОБРАЖЕНИЯ ИЗ ФАЙЛА


И ЗАХВАТ ИЗОБРАЖЕНИЯ С КАМЕРЫ
Для чтения изображения из файла используйте функцию сѵ2 . im re a d ().
Считываемый файл должен находиться в рабочем каталоге, в противном случае
необходимо указать полный путь к нему. Пример программы для считывания
изображения из файла приведён в листинге 3.1.

Листинг ЗЛ

im p o r t numpy a s np
im p o r t c v 2
img = c v 2 . i m r e a d ( ' c o l o r . p n g 1 )
c v 2 . imshow( ' im a g e ' , img)
c v 2 . w a i t K e y (0 )
cv2 .destroyAHWindows ()

Второй аргумент функции im re a d () является флагом, определяющим,


в каком формате будет загружено изображение: 1 - цветной рисунок, 0 - рису­
нок в оттенках серого.
Для вывода загруженного изображения в графическое окно используйте
функцию imshow (). Первый аргумент этой функции задаёт название графиче­
ского окна, второй - имя переменной, куда было загружено изображение.
Можно открывать несколько графических окон. При этом не забудьте в конце
программы их закрыть, как показано в листинге 3.1. Функция w a itK e y (п)
ждёт п милисекунд, а затем передаёт управление в следующую строку про­
граммы. Если в качестве аргумента указан 0, то функция будет бесконечно
ожидать нажатия клавиши.
Полученное изображение можно записать обратно в файл. Для этого
необходимо применить функцию i m w r i t e O , первым аргументом которой
23
является имя файла, а вторым - переменная, содержащая изображение,
например сѵ2 .imwrite ( ' figure2 .png' ,img).
Аналогичным образом осуществляется захват изображения с камеры и
вывод его в графическое окно. Программа в листинге 3.2 иллюстрирует пример
захвата изображения с камеры и вывода изображения в графическое окно
с названием frame (рис. 3.1).

Листинг 3.2

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0,
(640,480))
while(cap.isOpened()):
ret,frame = cap.read()
if ret==True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame’,gray)
out.write(frame)
if cv2.waitKey(1) & OxFF == ord('q'):
break
else:
break
cap.release()
out.release ()
cv2 .destroyAHWindows ()

Для захвата изображения вначале необходимо создать видеообъект,


используя функцию VideoCapture (), аргументом которой является номер
камеры или имя файла, содержащего видео. Так, в приведённом примере была
использована встроенная в ноутбук камера.
24
S ех1 [C:\Users\pavel\PycharmPrqjects\ex1] - .Д е х атр і.ру [
File Edit View Navigate Code Help
" T e x a m p l ^ ^ U ехатрЗ.ру <■ ecamp2.py

im p o r t numpy a s n p
import c v 2
c a p = c v 2 . V id e o C a p t u r e (0)

while(cap.isOpened()):
r e t , fram e = c a p . re a d ()
i f re t= T ru e :

c v 2 .im s h ow (' fra m e ' , fram e)


i f c v 2 . w a itK e y ( l) & OxFF — o rd

cap . r e le a s e d

c v 2 . d e s tr o y A lltf in d o v s ()

PyCharm is ready to update.

Рис. 3.1. Графическое окно с захваченным с камеры изображением

Иногда видеообъект не создаётся (например, камера или видеофайл


не найдены). В этом случае генерируется ошибка, проверить которую можно,
используя функцию is O p e n e d O . Если эта функция возвращает True, то всё
в порядке и можно считывать кадры. После того как создан видеообъект,
можно кадр за кадром считывать изображение. Функция r e a d () возвращает
True, если кадр считан успешно, и False - если произошла ошибка. Таким обра­
зом, если кадр считан успешно, он помещается в графическое окно. Этот про­
цесс будет осуществляться до тех пор, пока не будет нажата клавиша с буквой
‘q \ В конце программы не забудьте освободить память, занятую видео, исполь­
зуя функцию r e l e a s e () .
Изображение можно вывести в различных цветовых оттенках. Для этого
необходимо использовать функцию c v tC o lo r ( ) , первым аргументом которой
является считанный кадр, а вторым - флаг, определяющий формат вывода
изображения. Например, для вывода кадра в оттенках серого можно
использовать следующий код:
g r a y = с ѵ 2 . c v t C o l o r ( f r a m e , c v 2 . COLOR_BGR2GRAY).
Захваченное с камеры изображение можно записывать в файл. Для этого
необходимо определить тип кодека, используя 4-байтный код FourCC.

25
Тип кодека зависит от используемой платформы. Можно использовать
следующие типы: DIVX, XVID, MJPG, Х264, WMV1, WMV2. Далее вызывается
функция V id e o W r ite r () , аргументами которой являются имя
записываемого файла, тип кодека, количество кадров в секунду и размер
кадров. В качестве последнего аргумента можно указать значение флага,
определяющего цветовые оттенки изображения.
Таким образом, мы сделали первый шаг на пути применения техническо­
го зрения, а именно научились загружать изображения из файлов и захватывать
изображения с камеры.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

Напишите программу, позволяющую с заданным интервалом времени


загружать кадры из видеофайла. Смонтируйте таким образом новый короткий
ролик и просмотрите его, загрузив покадрово в отдельное окно.

3.2. ОТСЛЕЖИВАНИЕ ОБЪЕКТА ПО ЕГО ЦВЕТУ

В библиотеке ОрепСѴ доступно более 150 функций, позволяющих


осуществлять преобразования цветовых пространств изображения. Рассмотрим
два наиболее распространённых вида преобразования: BGR^Gray и
BGR-^HSV. Функция c v t C o l o r ( in p u t_ im a g e , f l a g ) уже нам известна.
В зависимости от значения, указанного в переменной f l a g , будет меняться
тип преобразования: из BGR в Gray (флаг принимает значение
cv2.COLOR BGR2GRAY) или из BGR в HSV - флаг cv2.COLOR_BGR2HSV.
Для того чтобы просмотреть возможные значения флагов, введите
в терминале Python следующие команды:
» > import сѵ2
» > flags = [i for i in dir(cv2) if i.startswith('COLOR ')]
» > print flags

26
Следует отметить, что в формате HSV доступны следующие диапазоны:
диапазон Н (оттенки цвета) [0, 179], диапазон S (насыщенность цвета) [0, 255]
и диапазон V (значения) [0, 255].
Теперь, зная как осуществлять преобразования, напишем простую
программу для отслеживания объекта заданного цвета (в нашем примере это
будет фигурка ждуна синего цвета).
Как видно из кадра, захваченного веб-камерой (справа на рис. 3.2), в руке
я держу фигурку ждуна. А слева, на том же рисунке, имеется чёрный фон, на
котором эта фигурка выделена белым. Что же необходимо сделать для
получения такого результата? Всё достаточно просто (см. листинг 3.3).

S ехі (C:\Useri\pavel\PycharmProjects\ex1] - „ЛехатрЗ.ру [ехі ] - PyCharm

Рис. 3.2. Результат отслеживания фигурки

Листинг 3.3

import сѵ2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
blue = np.uint8([[[255,0,0 ]]])
27
hsv blue = cv2 .cvtColor(blue,cv2 .C0L0R_BGR2HSV)
lower_blue = np.array([105,150,150])
upper_blue = np.array([120,255,255])
mask = cv2 .inRange(hsv, lower_blue, upper_blue)
res = cv2 .bitwise_and(frame,frame, mask= mask)
cv2 .imshow( ’f r a m e ' ,frame)
cv2 .imshow( ’m a s k ’ ,mask)

к = cv2 .waitKey(5) & OxFF


i f к == 27:
break

cv2 .destroyAHWindows ()

После того как мы считали кадр в переменную f r a m e , необходимо


осуществить преобразование изображения из формата BGR в HSV. Самое
сложное в формате HSV найти диапазон значений пикселей, соответствующих
требуемому цвету. Напоминаю, что в нашем примере мы отслеживаем синий
цвет. Методом проб и ошибок подбираем необходимый диапазон и задаём его
в переменных lo w e r _ b lu e и u p p er_ _ b lu e. Для того, чтобы облегчить
задачу по подбору верхней и нижней границ диапазона, можно использовать
команды терминала Pyrhon, приведённые ниже:

»> g re e n = n p . u i n t 8 ( [ [ [0 ,2 5 5 ,0 ] ] ] )
» > h s v _ g r e e n = c v 2 . c v t C o l o r ( g r e e n , c v 2 . COLOR_BGR2HSV)
» > p r i n t h sv _ g re e n

В приведённом примере мы ищем значения пикселей для зелёного цвета.


Результат будет следующий: [ [ [ 60 255 2 5 5 ] ] ] . Теперь достаточно ука­
зать в качестве границ диапазона значения 60 ± 10.

28
После того как диапазон значений пикселей для выбранного цвета опре­
делён, достаточно вывести на экран изображение только в заданном диапазоне.
Это означает, что все цвета, кроме заданного, будут «преобразованы» в чёрный,
а интересующий нас цвет - в белый. Для выполнения этой операции воспользу­
емся функцией inRange (). Для выхода из программы необходимо нажать
кнопку esc.
Таким образом, мы научились находить и отслеживать объекты заданного
цвета.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ


Напишите программу, позволяющую одновременно отслеживать два и
более объекта, отличающихся цветами (например, красный, зелёный, жёлтый).

3.3. ПОРОГОВОЕ ПРЕОБРАЗОВАНИЕ ИЗОБРАЖЕНИЯ


Пороговое преобразование изображения - это одна из наиболее часто
применяемых операций в техническом зрении. Её суть состоит в следующем.
Если значение пикселя превышает некоторое заданное (пороговое) значение,
то ему присваивается значение, соответствующее, например, белому цвету,
в противном случае - чёрному цвету. Для выполнения этой операции
используют функцию threshold () . Первым аргументом этой функции
(см. листинг 3.3) является исходное изображение, которое обязательно должно
быть в формате grayscale. Второй и третий аргументы определяют диапазон
значений, в котором всем пикселям присваивается значение 1. Последний
аргумент определяет стиль преобразования (см. листинг. 3.4 и рис. 3.3).

Листинг 3.4

import сѵ2
import numpy as np
from matplotlib import pyplot as pit
img = cv2.imread('palitral.png',0)
29
ret,threshl =
cv2.threshold(img,150,255,cv2.THRESH_BINARY)
ret,thresh2 =
cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,150,255,cv2.THRESH_TRUNC)
ret,thresh4 =
cv2.threshold(img,150,255,cv2.THRESH_T0ZER0)
ret,thresh5 =
cv2.threshold(img,150,255,cv2.THRESH_TOZERO_INV)

titles = [’Original Im­


age ’,’BINARY’,’BINARY_INV',’TRUNC’, 'TOZERO’,’TOZERO_INV’]
images = [img, threshl, thresh2, thresh3, thresh4,
thresh5]

for i in range(6):
pit.subplot(2,3,i+1),pit.imshow(images[i],'gray')
pit.title (titles[i])
pit.xticks([]),pit.yticks([])
pit.show()
В приведённом примере мы рассмотрели случай порогового преобразова­
ния, когда диапазон значений пикселей задавался вручную. В большинстве
приложений для технического зрения это не удобно. Освещённость изображе­
ния, захватываемого с камеры, зачастую не постоянна. Это приводит к тому,
что для одного и того же объекта на изображении, полученном в различные
моменты времени, значения пикселей будут отличаться. Поэтому результат по­
рогового преобразования будет неоднозначным. Для решения этой проблемы
можно применить функцию адаптивного порогового преобразования
adaptiveThreshold().

30
O riginal Im age BINARY BINARY INV

TRUNC TOZERO TOZEROJNV

Рис. 3.3. Пример применения функции threshold()

Она позволяет выполнить пороговое преобразование небольшой площади


изображения (блока). Фактически это означает, что мы разбили наше исходное
изображение на несколько блоков и к каждому из них применили функцию
threshold(). У функции адаптивного порогового преобразования три основных
аргумента: метод преобразования (см. листинг 3.5), размер блока и константа,
меняя которую, можно убрать шумы на изображении.

Листинг 3.5

import сѵ2
import numpy as np
from matplotlib import pyplot as pit
img = cv2.imread('doska.jpg',0)
img = cv2.medianBlur(img,5)
ret,thl = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
th2 =
cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH BINARY,11,2)

31
th3
cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIA
N_C, \
cv2.THRESH_BINARY,11,2)
titles = [’Original Image’, 'Global Thresholding (v = 127)',
'Adaptive Mean Thresholding', 'Adaptive Gaussian Thre­
sholding ']
images = [img, thl, th2, th3]
for i in range(4):
pit.subplot(2,2,i+1),pit.imshow(images[i],'gray')
pit.title (titles[i])
pit.xticks([]),pit.yticks([])
pit.show()

На рисунке 3.4 приведён пример выполнения порогового преобразования


и адаптивного порогового преобразования.

G lob al T h re s h o ld in g {v = 1 2 7 )

A d a p tiv e M e a n T h re s h o ld in g A d a p tiv e G au ss ia n T h re s h o ld in g

Рис. 3.4. Примеры применения функции a d a p tiv e T h re s h o ld ()

32
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Изучите метод Отцу и реализуйте его алгоритм для бинаризации изобра­
жения.

3.4. ГЕОМЕТРИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ ИЗОБРАЖЕНИЙ


Вы можете осуществлять все виды преобразований, используя два вида
функций OpenCV: cv2.warpAffine и cv2.warpPerspective. Первая функция
использует матрицу преобразований размерностью 2x3, вторая - размерностью
3x3 в качестве входного параметра.
В качестве примера рассмотрим программу (листинг 3.6), позволяющую
загрузить фото чихуахуа, уменьшить в 2 раза масштаб изображения, сдвинуть
изображение на расстояние 100 и 50 по координатам х, у соответственно,
и повернуть изображение на 90 градусов (рис. 3.5).

а) б) в)

Рис. 3.5. Преобразования изображений:


а - масштабирование; б - сдвиг; в - переворот

Листинг 3.6

import сѵ2
import numpy as np
img = cv2.imread(’dog.webp’,0)
res = cv2.resize(img,None,fx=0.5, fy=0.5, interpolation =
cv2.INTER CUBIC)
33
rows,cols = res.shape
M = np.float3 2 ([[1,0,100], [0,1,50]])
dst = cv2.warpAffine(res,M,(cols,rows))
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst2 = cv2.warpAffine(res,M,(cols,rows))
cv2.imshow('img2',dst)
cv2.imshow('imgl',res)
cv2.imshow('img3',dst2 )
cv2.waitKey(0)
cv2 .destroyAHWindows ()

Рассмотрим более подробно использованные в программе функции.


Для выполнения операции изменения масштаба можно использовать
функцию cv2.resize(). Размер изображения можно изменить вручную или ис­
пользовать масштабирующую константу. При изменении масштаба использует­
ся несколько различных интерполяционных методов. Наибольшее предпочте­
ние отдаётся методу сv2.INTER AREA при уменьшении изображения и мето­
дам cv2.INTER CEfBIC (slow) и cv2.INTER LINEAR при увеличении изобра­
жения. По умолчанию используется метод cv2.INTER_LINEAR как для увели­
чения, так и для уменьшения изображения.
Следующей широко распространённой операцией является сдвиг изобра­
жения на заданное количество пикселей. Если требуется сдвинуть изображение
относительно исходных координат (х, у) на (tx, ty), то необходимо создать мат­
1 0
рицу М = , используя объект np.float32, а затем поместить её в каче­
о 1 у J
стве аргумента в функцию cv2.warpAffine().
Необходимо отметить, что третьим аргументом функции cv2.warpAffine()
является размер выходного изображения, который задаётся в формате
(width,height), где width - число пикселей по столбцам, height - по строкам.

34
Последняя, использованная в программе функция cv2.getRotation
Matrix2D предназначена для поворота изображения. Поворот изображения
на угол Ѳ обеспечивается применением матрицы трансформации
cosG -s in 0 ’
М
sin0 cosG
Следующая программа (листинг 3.7) иллюстрирует пример аффинного
преобразования (рис. 3.6).

Input O utput
О

200

400

0 200 400 600 ВСЮ 0 200 400 600 800

Рис. 3.6. Пример аффинного преобразования

Л истинг 3.7

im p o r t numpy as np
im p o r t cv2
fro m matplotlib im p o r t pyplot as pit
img = cv2.imread('affine.png')
rows,cols,ch = img.shape
ptsl = np.float32([[50,50], [200,50], [50,200]])
pts2 = np.float32([[10,100], [200,50], [100,250]])
M = cv2.getAffineTransform(ptsl,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
pit.subplot( 1 2 1 ) ,pit.i m s h o w ( i m g ) ,pit.title ( ' I n p u t ' )

p i t . s u b p l o t (1 2 2 ), p i t . im sho w (dst) , p i t . t i t l e ( 'O u t p u t ')

pit.show()
35
Для выполнения преобразования изображения необходимо задать коор­
динаты трёх точек на исходном изображении и координаты этих же точек
в результирующем изображении. В приведённом примере мы задали координа­
ты этих точек в переменных p t s l и p t s 2 соответственно. Указанные пере­
менные передаются в качестве аргументов функции cv2.getAffineTransform,
которая создаёт матрицу преобразования размерностью 2x3, которая далее
передаётся в качестве аргумента в функцию cv2. warpAffine, выполняющую
преобразование.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ


Изучите теоретические основы аффинного преобразования. Создайте
изображение, состоящее из параллельных линий. Отметьте на нём три точки
с заданными координатами и выполните аффинное преобразование.

3.5. ОТСЛЕЖИВАНИЕ ОБЪЕКТОВ


НА ОСНОВЕ АНАЛИЗА ИХ ГИСТОГРАММ

Поставим следующую задачу. Пусть имеется множество точек, располо­


женных в некоторой области с различной плотностью (рис. 3.7). Пусть также
имеется заданная геометрическая фигура, расположенная в произвольном месте
области точек. Требуется сместить геометрическую фигуру таким образом,
чтобы она ограничивала область с максимальной плотностью точек.
Алгоритм решения поставленной задачи рассмотрим на примере рис. 3.7,
где в качестве геометрической фигуры использована окружность «С1»
с центром, отмеченным прямоугольником. Необходимо найти центроид в пре­
делах заданной окружности (он отмечен точкой «С1_г») и переместить окруж­
ность таким образом, чтобы её центр совпал с точкой С1_г. После этого необ­
ходимо повторять итерации до тех пор, пока центр окружности и найденный
центроид совпадут (с некоторой погрешностью).
Рассмотрим пример практической реализации данного алгоритма средст­
вами ОрепСѴ. Программа, представленная в листинге 3.8, позволяет отслежи-
36
вать лицо человека в поле зрения камеры (рис. 3.8). Отслеживаемый объект оп­
ределяется по первому зафиксированному кадру, попавшему в поле, ограни­
ченное рамкой.

Рис. 3.7. Пояснение к алгоритму нахождения области с наибольшей плотностью точек

С irnj2 ■ img2

Рис. 3.8. Отслеживание лица


37
Листинг 3.8

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# взять первый кадр видео
ret,frame = cap.read()
# определить размеры и расположение рамки
r,h,c,w = 200,150,300,150
track_window = (c,r,w,h)
roi = frame[r:r+h, c:c+w]
hsv_roi = cv2.cvtColor(frame, cv2.C0L0R_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)),
np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask, [180],[ 0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
term_crit = ( cv2.TERM_CRITERIA_EPS |
cv2.TERM_CRITERIA_COUNT, 10, 1 )
while(1):
ret ,frame = cap.read()

if ret == True:
hsv = cv2.cvtColor(frame, cv2.C0L0R_BGR2HSV)
dst =
cv2.calcBackProject([hsv], [0],roi_hist, [0,180],1)
# применить смещение для определения нового положения
ret, track_window = cv2.meanShift(dst,
track_window, term_crit)
# нарисовать рамку на изображении
x,y,w,h = track_window
img2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
cv2.imshow('img2',img2)

38
к = cv2.waitKey(60) & Oxff
i f к == 27:
b re ak
e l s e : c v 2 . i m w r i t e (c h r (k ) + » . j p g » , i m g 2 )
e ls e :
b re ak
cv2 .destroyAHWindows ()
cap.release()

Для реализации алгоритма используется функция m e a n S h if t, первым


аргументом которой является анализируемое изображение в формате hsv,
второй аргумент - отслеживаемая область, третий - критерии отслеживания,
заданные в переменной term_crit: всего будет производиться 10 итераций или
перемещение области рамки на 1 пиксель. Размеры рамки и её первоначальное
положение (фактически она ограничивает отслеживаемый объект) заданы
переменными г, h, с, w. После чего вычисляется гистограмма для области, огра­
ниченной рамкой. Для этого используется функция calcHist. Её первым пара­
метром является исходное анализируемое изображение, имеющее тип данных
uint8 или float32. Оно обязательно должно быть в квадратных скобках. Второй
параметр - номер канала, для которого вычисляется гистограмма. Например,
если изображение в оттенках серого, то используется значение [0], для цветного
изображения - значения [0], [1] или [2], если гистограмма вычисляется для си­
него, зелёного или красного каналов соответственно. Третий параметр - маска
изображения. Если требуется вычислить гистограмму для всего изображения,
то указывается «None». В нашем случае вычисляется только для области, огра­
ниченной рамкой. Четвёртый параметр - размер гистограммы. Максимальное
значение - [256]. Последний параметр - диапазон. Обычно составляет [0, 256].
Один из недостатков представленной программы состоит в том, что при
приближении, удалении отслеживаемого объекта или изменении его угла
в пространстве ограничивающая объект рамка не меняет свои размеры или угол
поворота. Подумайте, как это можно исправить.

39
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

Модифицируйте программу таким образом, чтобы можно было её «обу­


чить», распознавать отслеживаемый объект. Например, имеется изображение
объекта (картинка, фото). Мы «показываем» её программе, после чего она на­
ходит и отслеживает объект.

3.6. ПРИМЕНЕНИЕ ФИЛЬТРОВ ПРИ ОБРАБОТКЕ ИЗОБРАЖЕНИЙ

ОрепСѴ предоставляет три типа высокочастотных фильтров: Собеля,


Шарра и Лапласа.
В основе различных фильтров лежит операция свёртки. Одна из важней­
ших свёрток - это вычисление производных. В математике и физике производ­
ные играют очень важную роль, то же самое можно сказать и про компьютер­
ное зрение. Но что же это за производная от изображения? Как мы помним,
изображения, с которыми мы работаем, состоят из пикселей, которые для
картинки в градациях серого задают значение яркости. То есть наша картинка -
это просто двумерная матрица чисел. Теперь вспомним, что же такое производ­
ная. Производная - это скорость изменения функции в заданной точке. Она
определяется как предел отношения приращения функции к приращению аргу­
мента при стремлении приращения аргумента к нулю. В нашем случае произ­
водная - это отношение значения приращения пикселя по у к значению прира­
щению пикселя по х: dl = dyldx. Работая с изображением /, мы работаем с функ­
цией двух переменных /(х, у), т.е. со скалярным полем. Поэтому более пра­
вильно говорить не о производной, а о градиенте изображения. Если каждой
точке М области многомерного пространства поставлено в соответствие неко­
торое (обычно - действительное) число, то говорят, что в этой области задано
скалярное поле. Итак, градиент для каждой точки изображения (функция
яркости) - двумерный вектор, компонентами которого являются производные
яркости изображения по горизонтали и вертикали grad /(х, у) = (<dl/dx, dl/dy).
В каждой точке изображения градиентный вектор ориентирован в направлении
40
наибольшего увеличения яркости, а его длина соответствует величине измене­
ния яркости. Вектор (в заданной точке) задаётся двумя значениями: длиной и
направлением. Длина определяется формулой sqrt(<іхЛ2 + ф л2 ); направление -
atan(dy/dx).
Для дифференцирования изображения используется так называемый
оператор Собеля. Оператор Собеля - это дискретный дифференциальный опе­
ратор, вычисляющий приближение градиента яркости изображения. Оператор
вычисляет градиент яркости изображения в каждой точке. Так находится
направление наибольшего увеличения яркости и величина её изменения в этом
направлении. Результат показывает, насколько «резко» или «плавно» меняется
яркость изображения в каждой точке, а значит, вероятность нахождения точки
на грани, а также ориентацию границы. Таким образом, результатом работы
оператора Собеля в точке области постоянной яркости будет нулевой вектор,
а в точке, лежащей на границе областей различной яркости, - вектор, пересе­
кающий границу в направлении увеличения яркости. Наиболее часто оператор
Собеля применяется в алгоритмах выделения границ. Оператор Собеля легко
вычислять, так как он основан на свёртках изображения с небольшими ядрами.
Из-за этого он аппроксимирует градиент со значительной погрешностью,
но качество аппроксимации оказывается достаточным для многих практических
приложений. Пусть дано исходное изображение в виде матрицы Аш . Вычис-
_
ляемыми данными являются матрица аппроксимации модуля градиента иx~iNKl
и матрица аппроксимации направления градиента Оым, имеющие те же разме­
ры, что и исходная матрица. Промежуточные горизонтальные и вертикальные
производные вычисляются с помощью следующих двумерных свёрток:
~+1 0 - Г
+ 2 0 -2 *А:
_+ 1 0 - 2_

~+1 + 2 + 1
Gу 0 0 0 * А.
-1 -2 -1
41
Аппроксимации для модуля и направления градиента можно получить по
формулам G = д^г +Gy, Q =atan(Gy/Gx)

Оператор Собеля представляет собой неточное приближение градиента


изображения, но он достаточно хорош для практического применения во мно­
гих задачах. Однако с увеличением градиентного угла у оператора Собеля
с ядром 3x3 растут неточности, которые, однако, можно компенсировать
используя оператор Шарра (просто представляет другую версию ядра 3x3).
Раз уж мы рассмотрели оператор Собеля, можно заодно отметить и оператор
Лапласа, который позволяет вычислить так называемый лапласиан изобра­
жения - суммирование производных второго порядка.
В приведённом в листинге 3.9 демонстрируется применение упомянутых
выше фильтров с ядром размерностью 5x5.

Листинг 3.9

im p o rt сѵ2
im p o rt numpy a s np
from matplotlib im p o rt pyplot a s pit
img = cv2.imread('dave.jpg',0)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
pit.subplot(2,2,1),pit.imshow(img,стар = 'gray')
pit.title('Original'), pit.xticks([]), pit.yticks([])
pit.subplot(2,2,2),pit.imshow(laplacian,стар = 'gray')
pit.title('Laplacian'), pit.xticks([]), pit.yticks([])
pit.subplot(2,2,3),pit.imshow(sobelx,стар = 'gray')
pit.title('Sobel X'), pit.xticks([]), pit.yticks([])
pit.subplot(2,2,4),pit.imshow(sobely,стар = 'gray')
pit.title('Sobel Y'), pit.xticks([]), pit.yticks([])
pit.show()
Рисунок 3.9 иллюстрирует полученный результат.

42
O riginal Laplacian

Рис. 3.9. Иллюстрация применения фильтров

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

1. Изучите теоретические основы рассмотренных в данном разделе


фильтров, используя источники в сети Интернет.
2. Изучите программу в листинге 6.1 и модифицируйте в соответствии
с индивидуальным заданием.

3.7. ОПРЕДЕЛЕНИЕ ГРАНИЦ ОБЪЕКТА НА ИЗОБРАЖЕНИИ

Границей изображения будем называть кривые, вдоль которых наблюда­


ется изменение яркости или другие виды неоднородностей. Причиной появле­
ния границы может быть изменение освещённости объекта, его цвета и т.д.
Наиболее часто для определения границ изображения используется
фильтр Кэнни (Саппу).
Важным шагом в данном алгоритме является устранение шума на конту­
рах, который может повлиять на результат, при этом необходимо максимально
сохранить границы. Алгоритм состоит из следующих этапов.
1. Сглаживание шумов и исключение лишних деталей из исходного
изображения с помощью функции Гаусса.
43
2. Поиск градиента (границы намечаются там, где градиент принимает
максимальное значение).
3. Выделение локальных максимумов. В каждой точке известно направ­
ление градиента и его абсолютная величина. Следовательно, можно сравнить
эту абсолютную величину с величиной градиента в соседних точках по направ­
лению этого самого градиента. Только локальные максимумы отмечаются
как границы.
4. Определение итоговых границ путём подавления всех краёв, не свя­
занных с определёнными границами. Реализация производится путём исполь­
зования двойной пороговой фильтрации.
Пример программной реализации данного алгоритма приведён в лис­
тинге 3.10.

Листинг ЗЛО

im p o r t сѵ2
im p o r t numpy a s np
f r o m matplotlib im p o r t pyplot a s pit
cap = cv2.VideoCapture(0)
w h i l e (c a p . isOpened( ) ) :
ret,frame = cap.read()
if ret==True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,200,200)
pit.subplot(121),pit.imshow(gray,стар = ’gray’)
pit.title('Original Image'), pit.xticks([]),
pit.yticks([])
pit.subplot(122),pit.imshow(edges,стар = ’gray’)
pit.title(’Edge Image’), pit.xticks([]), pit.yticks([])
pit.show()
if cv2.waitKey(1) & OxFF == ord('q'):
b re a k

44
e ls e :
b reak
cap.release()
out.release ()
cv2 .destroyAHWindows ()

Результат применения рассмотренного алгоритма к исходному изображе­


нию показан на рис. 3.10.

O riginal Image Edge Im a ge

Рис. 3.10. Применение алгоритма Кэнни к исходному изображению

Детектор Кэнни использует фильтр на основе первой производной от


гауссианы. Так как он восприимчив к шумам, лучше не применять данный
метод на необработанных изображениях. Сначала исходные изображения
нужно свернуть гауссовым фильтром.
Поскольку границы на изображении могут находиться в различных
направлениях, то алгоритм Кэнни использует четыре фильтра для выявления
горизонтальных, вертикальных и диагональных границ.
Воспользовавшись оператором обнаружения границ (напри­
мер, оператором Собеля), получается значение для первой производной в гори­
зонтальном направлении (Gy) и вертикальном направлении (Gx). Из этого
градиента можно получить угол направления границы Q = arctan(G*/Gv). Угол

45
направления границы округляется до 0, 45, 90 или 135. Затем идёт проверка
того, достигает ли величина градиента локального максимума в соответствую­
щем направлении.
Например, для сетки 3x3: если угол направления градиента равен нулю,
точка будет считаться границей, если её интенсивность больше, чем у точки
выше и ниже рассматриваемой точки; если угол направления градиента равен
90°, точка будет считаться границей, если её интенсивность больше чем у точки
слева и справа рассматриваемой точки; если угол направления градиента
равен 135°, точка будет считаться границей, если её интенсивность больше, чем
у точек, находящихся в верхнем левом и нижнем правом углах от рассматри­
ваемой точки; если угол направления градиента равен 45°, точка будет считать­
ся границей, если её интенсивность больше, чем у точек, находящихся в верх­
нем правом и нижнем левом углах от рассматриваемой точки.

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

1. Изучите теоретические основы алгоритма Кэнни, пользуясь


источниками в сети Интернет.
2. Изучите программу в листинге 3.10 и модифицируйте в соответствии
с индивидуальным заданием.

3.8. ВЫЧИТАНИЕ ФОНА

Одной из основных операций, выполняемых при обработке изображений


в приложениях технического зрения, является вычитание фона. Она использу­
ется в тех случаях, когда необходимо, например, написать приложение, позво­
ляющее осуществлять подсчёт входящих или выходящих из помещения посе­
тителей, или оценить трафик транспортного потока. Технически, для реализа­
ции подобных приложений необходимо извлечь движущийся передний план из
статического фона (рис. 3.11).
46
Рис. 3.11. Движущийся объект переднего плана извлечён из фона

Если имеется «эталонное» изображение фона без движущихся объектов,


то эта задача довольно простая. Достаточно вычесть из текущего изображения
эталонное. При этом вы получите объект переднего плана. Однако в большин­
стве случаев «эталонного» изображения может и не быть. Поэтому приходится
извлекать фон из любых имеющихся у нас изображений. Задача осложняется
тем, что в ряде случаев у движущихся объектов имеется тень. Поскольку тень
также движется, простое вычитание будет определять её так же, как объект
переднего плана. Для решения этой задачи было предложено несколько алго­
ритмов, три из которых реализованы в библиотеке ОрепСѴ.
Первый алгоритм имеет оригинальное название Gaussian Mixture-based
Background/Foreground Segmentation Algorithm. Его теоретические основы под­
робно описаны в статье «Ап improved adaptive background mixture model for real­
time tracking with shadow detection» от 2001 года. Он основан на моделировании
каждого пикселя фона смесью К гауссовских распределений (К от 3 до 5).
Вес каждого цвета в смеси пропорционален времени, в течение которого он
отображаются. Наиболее вероятным цветом фона является то значение, которое
имеет больший вес.
47
При написании программы, реализующей данный алгоритм, нам
необходимо создать фоновый объект с помощью функции
сѵ2 . createBackgroundSubtractorMOG (). Параметры этой функции
можно посмотреть в документации к библиотеке ОрепСѴ. После создания
объекта можно воспользоваться методом apply (), позволяющим извлечь
маску переднего плана из изображения.
Разновидностью описанного выше алгоритма является описанный
в статьях «Improved adaptive Gausian mixture model for background subtraction»
(2004 г.) и «Efficient Adaptive Density Estimation per Image Pixel for the Task
of Background Subtraction» (2006 г.) алгоритм, реализованный методом
createBackgroundSubtractorMOG2 () . Отличительной особенностью
этого алгоритма является то, что он предусматривает выбор соответствующего
числа гауссова распределения для каждого пикселя. Это обеспечивает лучшую
адаптируемость к изменению освещения и прочих шумов. При этом при
программной реализации в качестве параметра объекта, созданного функцией
createBackgroundSubtractorMOG2 (), имеется возможность указывать,
будет ли тень обнаружена или нет. Если в качестве параметра detectShadows
указать True (по умолчанию), то тень будет обнаружена и выделена серым
цветом. При этом уменьшается скорость обработки. Пример программы,
реализующей описанный метод, представлен в листинге 3.11.

Листинг ЗЛ1

im p o rt numpy a s np
im p o rt cv2
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorMOG2()

w h i l e (1 ):
ret, frame = cap.read()

fgmask = fgbg.apply(frame)

48
c v 2 . i m s h o w ( 'frame' , fgmask)
к = c v 2 . w a i t K e y (3 0 ) & Oxff
i f к == 27:
b re a k
c a p . r e l e a s e ()
cv2 . d e s t r o y A H W i n d o w s ()

Результаты вычитания фона описанными методами представлены


на рис. 3.12. Как видно из программы, параметры функции
createBackgroundSubtractorMOG2() указаны по умолчанию. Вы можете
попробовать их поменять и посмотреть полученный результат.

Рис. 3.12. Иллюстрация выполнения программы:


а - исходное изображение; б, в - результаты вычитания фона без тени и с тенью
соответственно
49
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ р а б о т ы

1. Изучите описанные алгоритмы, используя первоисточники, указанные


в данном разделе.
2. Напишите программу, позволяющую, например, подсчитывать
количество движущихся объектов.

3.9. СЕГМЕНТАЦИЯ ИЗОБРАЖЕНИЙ

Одной из основных задач обработки и анализа изображений является


сегментация, т.е. разделение изображения на области, для которых выполняется
определённый критерий однородности, например, выделение на изображении
областей приблизительно одинаковой яркости. Сегментация применяется
во многих областях, например в производстве для индикации дефектов при
сборке деталей, в медицине для первичной обработки снимков, также для
составления карт местности по снимкам со спутников.
Одним из широко распространённых алгоритмов сегментации является
алгоритм сегментации по водоразделам (Watershed). Алгоритм работает с изо­
бражением как с функцией от двух переменных / = І(х, у ), где координаты
пикселя. Значением функции может быть интенсивность или модуль градиента.
Для наибольшего контраста можно взять градиент от изображения. Если
по оси OZ откладывать абсолютное значение градиента, то в местах перепада
интенсивности образуются хребты, а в однородных регионах - равнины. После
нахождения минимумов функции /и д ё т процесс заполнения «водой», который
начинается с глобального минимума. Как только уровень воды достигает зна­
чения очередного локального минимума, начинается его заполнение водой.
Когда два региона начинают сливаться, строится перегородка, чтобы предот­
вратить объединение областей. Вода продолжит подниматься до тех пор, пока
регионы не будут отделяться только искусственно построенными перегородка­
ми (рис. 3.13).

50
Минимумы функцииf(x,y )

Рис. 3.13. Иллюстрация алгоритма Watershed

Такой алгоритм может быть полезным, если на изображении небольшое


число локальных минимумов, в случае же их большого количества возникает
избыточное разбиение на сегменты.
Рассмотрим реализацию алгоритма на примере задачи определения монет
бронзового цвета на исходном изображении (рис. 3.14).

S3 im a g e

Рис. 3.14. Исходное изображение

51
Исходное изображение монет загружается (см. листинг 3.12) из файла
money.jpg в переменную gray.

Листинг ЗЛ2

im p o r t numpy a s np
im p o r t cv2
f r o m m a t p l o t l i b im p o r t p y p l o t a s p i t
img = c v 2 . i m r e a d ('money.jpg')
g r a y = c v 2 . c v t C o l o r ( i m g , c v 2 . C0L0R_BGR2GRAY)
ret, thresh =
c v 2 . t h r e s h o l d ( g r a y , 0 , 2 5 5 , c v 2 . THRESH_BINARY_INV+cv2.THRESH
_OTSU)
r e s = c v 2 . r e s i z e ( i m g , N o n e , f x = 0 . 5, fy=0.5, interpolation =
c v 2 . INTER_CUBIC)
r e s t h r e s h = c v 2 . r e s i z e ( t h r e s h , N o n e , f x = 0 . 5, fy=0.5, inter­
p o l a t i o n = c v 2 . INTER_CUBIC)
cv2 . imshow( ' im a g e ' , r e s )
c v 2 . imshow( ' t h r e s h ' , r e s t h r e s h )
# убираем шумы
kernel = np. o n e s((3, 3) , np.u in t8 )
opening =
cv2.morphologyEx(resthresh,cv2.M0RPH_0PEN,kernel, itera­
t i o n s = 2)
# определяем фон
s u r e _ b g = c v 2 . d i l a t e (o p e n i n g , k e r n e l , i t e r a t i o n s = 1 0 )
# определяем область переднего плана
dist_transform =
c v 2 . d i s t a n c e T r a n s f o r m ( o p e n i n g , c v 2 . DIST_L2, 5 )
ret, sure_fg =
c v 2 . t h r e s h o l d ( d i s t _ t r a n s f o r m , 0 . 7 * d i s t _ t r a n s f o r m . m a x ( ) , 255
, 0)
52
cv2 . imshow( ' n o i s e ' , opening)
c v 2 . imshow( ' b a c k ' , sure_bg)
c v 2 . w a i t K e y (0 )
cv2 . d e s t r o y A H W i n d o w s ()

Применим к загруженному изображению операцию бинаризации


с ѵ 2 . t h r e s h o l d (рис. 3.15).

Е thresh — □ X

Рис. 3.15. Результат бинаризации изображения

Как видно из рисунка 3.15, интересующие нас монеты чёрного цвета.


Поскольку некоторые монеты расположены вместе, то на полученном
изображении они «слипаются». Уберём шумы внутри монет. Для этого мы
используем морфологический анализ cv2.morphologyEx (рис. 3.16).

Е noise □ X

Рис. 3.16. Изображение после применения функции morphologyEx

53
Чтобы удалить любые небольшие отверстия в объекте, мы можем
использовать морфологическое закрытие. Теперь мы определили, что области,
расположенные вблизи центра, являются объектами переднего плана.
Единственный регион, в котором мы не уверены, является пограничным
регионом монет. Поэтому нам нужно извлечь область, в которой мы
с уверенностью можем сказать, что там расположены монеты. Операция эрозии
удаляет граничные пиксели. После её применения мы можем быть уверены,
что в рассматриваемой области монета. Указанные операции срабатывают
в тех случаях, когда объекты не касаются друг друга. В нашем случае это
не так. Поэтому выходом может быть применение функции преобразования
расстояния cv2.distanceTransform и последующего применения порогового
преобразования. Далее нам нужно найти область, где мы уверены в отсутствии
монет. Для этого мы применяем функцию cv2.dilate. Полученный результат
представлен на рис. 3.17. Очевидно, что до «совершенства» нам ещё
необходимо поработать. Для этого нужно убрать лишние шумы на полученном
изображении. Подумайте, как это можно сделать.

Р~ back □ X

Рис. 3.17. Удаление фона на изображении

54
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ рабо ты

Изучите алгоритмы сегментации: MeanShift, FloodFill, GrabCut.


Изучите приведённую в листинге 3.12 программу, попробуйте её усовер­
шенствовать.

ЗЛО. ВВЕДЕНИЕ В МАШИННОЕ ОБУЧЕНИЕ

Одной из часто решаемых задач является классификация. Обычно клас­


сификация человеком выполняется на основе жизненного опыта. О свойствах
нового объекта мы судим, полагаясь на похожие знакомые наблюдения. На­
пример, встретив незнакомого человека на улице, мы можем догадаться о том,
иностранец ли он, или наш соотечественник по речи, жестам и внешности. Для
этого мы сопоставляем образ человека с образом наиболее похожего человека,
хранящимся в нашей памяти. Если подобную задачу требуется выполнить с по­
мощью вычислительной техники, то необходимо использовать специальные ал­
горитмы, например алгоритм ^-ближайших соседей (^-nearest neighbor
algorithm, KNN).
Этот алгоритм является одним из простых алгоритмов классификации.
Задача классификации в машинном обучении - это задача отнесения объекта к
одному из заранее определённых классов на основании его формализованных
признаков. Каждый из объектов в этой задаче представляется в виде вектора в
N-мерном пространстве, каждое измерение в котором представляет собой опи­
сание одного из признаков объекта. Допустим нам нужно классифицировать
яблоки: измерениями в нашем пространстве параметров будут цвет, сорт, раз­
мер и другие. Для обучения классификатора необходимо иметь набор объектов,
для которых заранее определены классы. Это множество называется о б у ч а ю щ е й
вы боркой, её разметка проводится вручную, с привлечением специалистов
в исследуемой области. В задаче классификации может быть более двух клас­
сов (многоклассовая), каждый из объектов может принадлежать более чем
к одному классу (пересекающаяся).

55
Алгоритм KNN способен выделить среди всех наблюдений к известных
объектов (^-ближайших соседей), похожих на новый неизвестный ранее объект.
На основе классов ближайших соседей выносится решение касательно нового
объекта. Важной задачей данного алгоритма является подбор коэффициента А:-
количество записей, которые будут считаться близкими. Алгоритм KNN широ­
ко применяется в Data Mining.
Задача классификации состоит в следующем. Пусть имеет­
ся т наблюдений, каждому из которых соответствует запись в таблице. Все за­
писи принадлежат какому-либо классу. Необходимо определить класс для но­
вой записи. Например, имеется 100 наблюдений о свойствах яблок: цвет, диа­
метр плода, длина черешка. Данные параметры позволяют однозначно опреде­
лить сорт (класс) яблока. Пусть имеется яблоко неизвестного сорта. Необходи­
мо определить его сорт на основе информации о цвете, диаметре плода и длине
черешка.
На первом шаге алгоритма [2, 3] следует задать число к - количество
ближайших соседей. Если принять к= 1, то алгоритм потеряет обобщающую
способность (т.е. способность выдавать правильный результат для данных,
не встречавшихся ранее в алгоритме), так как новой записи будет присвоен
класс самой близкой к ней. Если установить слишком большое значение,
то многие локальные особенности не будут выявлены.
На втором шаге находятся к записей с минимальным расстоянием до век­
тора признаков нового объекта (поиск соседей). Функция для расчёта расстоя­
ния должна отвечать следующим правилам:
1. d{x, у) > 0, d(x, у) = 0 тогда и только тогда, когда х = у;
2. d(x, у) = d(y, х);
3. d(x, z) < d(x, у) + d(y, z) при условии, что точки х, у, z не лежат
на одной прямой.
Здесь х, у, z - векторы признаков сравниваемых объектов.

56
Для упорядоченных значений атрибутов находится евклидово рас­
стояние:

De = Щ ъ - уі )2,

где п - количество атрибутов.


Часто перед расчётом расстояния необходима нормализация, которая вы­
полняется по нижеприведённым выражениям.
Минимаксная нормализация:

Х -т іп ( Х )
max(X) - min(X)

Нормализация с помощью стандартного отклонения:

-ѵх
<*х

где <зх - стандартное отклонение; Хср - среднее значение.

При нахождении расстояния иногда учитывают значимость атрибутов.


Она определяется экспертом или аналитиком субъективно, полагаясь на собст­
венный опыт. В таком случае при нахождении расстояния каждый /-й квадрат
разности в сумме умножается на коэффициент Z ,. Например, если атрибут А
в 3 раза важнее атрибута В (Z A = 3, ZB = 1), то расстояние будет находиться
следующим образом:
п
De = Z 3(ха - У а )2 + (хв ~У в )2-
г

Следует отметить, что если для записи В ближайшем соседом является А,


то это не означает, что В - ближайший сосед А. Данная ситуация представлена
на рис.3.18. При к = 1 ближайшей для точки В будет точка А, а для А - Х .
При увеличении коэффициента до к = 7, точка В также не будет входить
в число соседей (см. рис. 3.18).
57
с с с с с
с
с

с
X
X X
с
X А в
X X
X

Рис. 3.18. Ближайшие соседиЛ и В

На следующем шаге, когда найдены записи, наиболее похожие на новую,


необходимо решить, как они влияют на класс новой записи. Для этого исполь­
зуется функция сочетания (combination function). Одним из основных вариантов
такой функции является простое невзвешенное голосование (simple unweighted
voting).
Вначале, задав число к, мы определили, сколько записей будет иметь пра­
во голоса при определении класса. Затем мы выявили эти записи, расстояние
от которых до новой оказалось минимальным. Теперь можно приступить к про­
стому невзвешенному голосованию.
Расстояние от каждой записи при голосовании здесь больше не играет
роли. Все имеют равные права в определении класса. Каждая имеющаяся
запись голосует за класс, к которому принадлежит. Новой записи присваива­
ется класс, набравший наибольшее количество голосов.
Но что делать в случае, если несколько классов набрали равное количест­
во голосов? Эту проблему снимает взвешенное голосование (weighted voting).
В такой ситуации учитывается также и расстояние до новой записи. Чем мень­
ше расстояние, тем более значимый вклад вносит голос. Голоса за класс нахо­
дятся по следующей формуле:

58

где d (X , Yj) - квадрат расстояния от известной записи Yi до новой X; п -


количество известных записей класса, для которого рассчитываются голоса;
class - наименование класса.
Решим задачу классификации для яблок. Имеется набор данных
о 150 яблоках трёх классов: антоновка, пепин, китайка, по 50 записей для каж­
дого. Известны диаметр плода и длина черешка всех яблок. Необходимо опре­
делить класс двух яблок со следующими значениями диаметра плода в дюймах
и длины черешка в сантиметрах: 5,3 и 1,6 (первое яблоко), 6,1 и 4,8 (второе).
На рисунке 3.19 показано размещение новых (светло-зелёная точка - яблоко 1,
красная - яблоко 2) записей среди уже известных.

* Китайка
Пепин
Антоновка
Яблоко 1
Яблоко 2

Яблоко 2

Яблоко 1

Рис. 3.19. Диаграмма размещения классов яблок

Для первого яблока будем искать трёх ближайших соседей, т.е. к= 3. Для
первого яблока ближайшими соседями будут три яблока со следующими значе­
ниями диаметра плода и длины черешка: И (5,3; 1,5), 5(5,2; 1,5) иС(5,2; 1,5).
Вычислим евклидово расстояние

De (яблоко 1, А) = ^ " ( 5 , 3 - 5 , 3 ) 2 +(1,6-1,5)2 = 0,1,

59
D e (яблоко 1, C) = д/Z " (5,3-5,2)I2 + (1,6-1,5)2 =0,1414,

^ (я б л о к о 1, С) = ^ (я б л о к о 1, В ).

Полученные данные объединим в таблицу.


Запись Диаметр плода Длина черешка De Класс
Яблоко 1 5,3 1,6 — -
А 5,3 1,5 0,10 Китайка
В 5,2 1,5 0,14 Китайка
С 5,2 1,5 0,14 Китайка

Для определения класса нового яблока воспользуемся простым невзве­


шенным голосованием. Так как все три яблока Я, В и Г принадлежат к классу
«китайка», то он получает 100% голосов, и первому яблоку присваиваем этот
класс.
Аналогичным образом проводим классификацию для яблока 2. Немного
усложним наши расчёты, предположив, что такой признак, как длина черешка
в 2 раза важнее при классификации, чем диаметр яблока. Ближайшими соседями
будут следующие: А ( 6,1; 4,7), В (6 ; 4,8), С(6,2 4,8). Для них получим
/ф,(яблоко2, А ) = 0,1414, /ф. (яблоко2, В ) = 0,1, /^(яблоко2, С) = D E(яблоко 1, В).
Полученные данные объединим в таблицу.
Запись Д иаметр плода Д лина череш ка De К ласс

Яблоко 2 6,1 4 ,8 — -
А 6Д 4 ,7 0 ,1 4 Пепин
В 6,0 4 ,8 0 ,1 0 Антоновка
С 6,2 4 ,8 0 ,1 0 Антоновка

Проведём взвешенное голосование:

ѵсйелДпепин) = — —- = 50,
0,142
I I
ѵгйслѵ(антоновка) = — - + — г- = 200.
ОД2 ОД2
60
Таким образом, второе яблоко можно классифицировать как «антоновку».
Рассмотрим программную реализацию приведённого выше алгоритма.
Вначале инициализируются библиотеки и генерируются исходные данные
(листинг 3.13) - красные треугольники и синие квадратики. В приведённом
примере используется двумерное пространство, в котором случайным образом
в интервале 0 до 100 по каждой из осей выбирается местоположение каждого
объекта (рис. 3.20).

Листинг ЗЛЗ

im p o r t сѵ2
im p o r t numpy a s np
im p o r t m a t p l o t l i b . p y p l o t a s p i t
# Feature set containing (x,y) values of 25
known/training data
trainD ata =
n p . r a n d o m . r a n d i n t ( 0 , 1 0 0 , ( 2 5 , 2 ) ) . a s t y p e ( n p . f l o a t 32)
# Labels each one either Red or Blue with numbers 0 and 1

responses =
n p . r a n d o m . r a n d i n t ( 0 , 2 , ( 2 5 , 1 ) ) . a s t y p e ( n p . f l o a t 32)
# Take Red families and plot them
red = trainData[responses.ravel()==0]
pit.scatter(red[:,0],red[:,1],80,'r ','л ')
# Take Blue families and plot them
b l u e = t r a i n D a t a [r e s p o n s e s . r a v e l ( ) ==1]
p i t . s c a t t e r ( b l u e [ : , 0 ] , b l u e [ : , 1 ] , 80, ' b ' , ’s ’ )
newcomer =
n p . r a n d o m . r a n d i n t ( 0 , 1 0 0 , ( 1 , 2 ) ) . a s t y p e ( n p . f l o a t 32)
p i t . s c a t t e r ( n e w c o m e r [ : , 0 ] , newcomer[ : , 1] , 8 0 , ' g ' , ' o ’ )
knn = c v 2 . m l . K N e a r e s t _ c r e a t e ()
k n n . t r a i n ( t r a i n D a t a , c v 2 . m l . ROW S AMP LE , res po n s es )

61
ret, results, neighbours, dist =
knn.findNearest(newcomer, 3)
p rin t (« re s u lts : «, results,»\n»)
p rin t (« n e ig h b o u rs : «, neighbours,»\n»)
p rin t (« d is ta n c e s : «, d is t)

pit.show()

Рис. 3.20. Сгенерированные данные

Затем генерируется объект, подлежащий классификации - зелёный


кружок. Далее для имеющейся выборки и классифицируемого объекта можно
реализовать сам алгоритм классификации. Полученный результат показывает,
что исследуемый объект можно отнести к классу «синий квадрат»,
results: [[1.]]
neighbours: [[1. 1. 1.]]
distances: [[137. 208. 245.]].

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

Изучите алгоритм KNN.


Изучите приведённую в листинге 3.13 программу, модифицируйте её
под свою задачу.
62
4. СИСТЕМА ТЕХНИЧЕСКОГО ЗРЕНИЯ РОБОТА FANUC

4.1. ОСОБЕННОСТИ РАБОТЫ СИСТЕМЫ ТЕХНИЧЕСКОГО ЗРЕНИЯ


РОБОТА С НЕПОДВИЖНЫМ РАБОЧИМ ОБЪЕКТОМ

2D-контроль позволяет работать на плоскости (в координатах X , Y) либо


в плоском повороте (используется радиус поворота R).
При контроле необходимо обеспечить перпендикулярность оптической
оси камеры к плоскости XY, когда робот двигается для захвата рабочего объекта
(рис. 4.1).
Для 2Б-контроля с использованием одной камеры рекомендуется приме­
нять калибровочную сетку.
Система iRVision может сохранять изображения нераспознанных объек­
тов на карту памяти, находящуюся в главном блоке управления роботом.
Рекомендуется подключать карту памяти во время старта и загрузки системы.
Если делать так, то можно отрегулировать параметры системы для нераспо­
знанных изображений. Когда система переустановлена после перемещения
объекта, можно сравнить изображения до и после выполнения операции
и найти отличия.

Камера

Оптическая ось камеры


Высота рабочего объекта

Рабочий объект
Паллета

Рис. 4.1. Расположение объекта контроля относительно камеры

63
Карту памяти также можно использовать для сохранения информации
работы блока управления роботом. Информация по его работе и видеоинфор­
мация поддерживаются одновременно.
Процедура настройки системы технического зрения включает несколько
этапов: запись информации на камеру; установку TCP для робота; установку
калибровочной сетки; установку системы координат; калибровку и запись дан­
ных; создание видеопрограммы; создание программы для робота; контроль
операции компенсации.
Процедура установки камеры.
1. Нажмите кнопку [MENU], выберите [8 iRVision], а затем [1 Vision
setup]. Отобразится экран добавления камеры. Нажмите F4 [VTYPE] и выбе­
рите [Camera Setup Tools] из списка. Появится экран, показанный на рис. 4.2.
2. Нажмите F2 [CREATE],
3. Зайдите в меню [Туре] и выберите тип камеры. В зависимости от
доступных камер, вы сможете выбрать тип камеры [KOWA Digital Camera]
или другую.

Рис. 4.2. Экран iRVision


64
4. В поле [Name] введите имя камеры. Имя камеры может состоять из
34 букв и цифр. Имя не должно начинаться с цифры.
5. Нажмите F4 [ОК]. Созданная камера отобразится в списке камер.
6. Выберите созданную камеру, нажмите F3 [EDIT], Появится окно, пред­
ставленное на рис. 4.3.

■ M l > 10 *
ті
I ІКѴІЧПЛ S f l u p Ч Л ІП - CA^F-P-A

В I « I JBj 5» - S J A Digit nf С яіппгя


СЧяггиг: 1*
5С1ЭЗЕ QAr
Ст* Ю В Л j X3TJ n-i В] '
:t b f k JC ih . 1

Iff»
■С тГТФ-г » BC Dt / D .t

(e c u O J . t l f 1 .1 *

. W | O H s w
■' :1 J
Рис. 4.3. Окно редактирования камеры

7. Поместите объект в поле зрения камеры. Нажмите F3 [SNAP] и полу­


чите снимок объекта.
8. Нажмите F2 [LIVE], чтобы настроить фокус и диафрагму.
9. Нажмите F5 [END EDIT], чтобы закончить редактирование камеры.
Процедура калибровки камеры.
1. Нажмите кнопку [MENU], выберите [8 iRVision], а затем [1 Vision
setup]. Отобразится окно настройки технического зрения. Нажмите F4 [VTYPE]
и выберите [Camera Calibration Tools]] из списка.
2. Нажмите F2 [CREATE],
3. В меню [Туре] выберите [Camera Calib. For Vis. Track],
65
4. В поле [Name] введите имя калибровочного процесса. Имя может
состоять из 34 букв и цифр. Имя не должно начинаться с цифры.
5. Нажмите F4 [ОК]. Созданный калибровочный процесс появится
в списке.
6. Выберите созданный калибровочный процесс и нажмите F3 [EDIT],
Появится экран, представленный на рис. 4.4.

Рис. 4.4. Окно калибровки камеры

7. Выберите созданную камеру в поле [Camera],


8. Задайте время экспозиции в поле [Exposure Time],
9. В поле [Grid spacing] задайте расстояние между центрами кружков
калибровочной сетки.
10. В поле [Projection] выберите [Perspective].
11. Поместите калибровочную сетку под камеру. Сделайте снимок.
12. Обведите сетку из кружков фиолетовой рамкой (рис. 4.5) и нажмите
F4 [ОК].
66
Рис. 4.5. Задание области калибровки

13. Появится окно, представленное ниже (рис. 4.6).


14. Убедитесь, чтобы число найденных кружков совпадало с числом
кружков на калибровочной сетке. Сохраните полученный результат.

й т/n T2 10%
IRVlsIon 8otUp Main VTGALIB
Zoom: 50% v

о © о e e © ©
о о о © © ©
e e ф @ © © ©
© ©О Ф e © ®
© © © © © © ©
© © • • • • • *123

Рис. 4.6. Окно результатов калибровки

Процедура создания видеопроцесса.


1. Нажмите кнопку [MENU], выберите [8 iRVision], а затем [1 Vision
setup]. Нажмите F4 [VTYPE] и выберите [Vision Process Tools] из списка.
2. Нажмите F2 [CREATE],
3. В появившемся окне в поле [Туре] выберите [Single-View Visual
Tracking],
67
4. В поле [Name] введите имя процесса, не превышающее по длине
34 символа.
5. Нажмите F4 [ОК]. Созданный процесс отобразится в списке.
6. Выберите созданный процесс и нажмите F3 [EDIT],
7. В появившемся окне в поле [Camera Calibration] выберите камеру.
8. В поле [Exposure Time] выберите время экспозиции.
9. Выберите меню tree view в левой части экрана. Нажмите [GPM Locator
Tool 1] и teach a GPM locator tool. Появится окно, представленное на рис. 4.7.

Рис. 4.7. Окно обучения системы технического зрения

10. Поместите под камерой объект, распознавать который вы хотите


обучить робота. Нажмите F3 [SNAP],
11. Нажмите кнопку [Teach], Обведите объект фиолетовой рамкой и
нажмите F4 [ОК].
12. Введите значения в оставшиеся поля (при необходимости).
13. Нажмите F10 [SAVE], а затем F5 [END EDIT],
68
ПРАКТИЧЕСКИЕ ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

1. Создайте камеру.
2. Проведите калибровку созданной камеры.
3. Обучите робота распознавать заданный объект.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Поясните порядок создания камеры.


2. Поясните порядок калибровки камеры.
3. Поясните порядок обучения робота распознавать объект.

4.2. ОСОБЕННОСТИ РАБОТЫ СИСТЕМЫ ТЕХНИЧЕСКОГО ЗРЕНИЯ


РОБОТА С ПОДВИЖНЫМ РАБОЧИМ ОБЪЕКТОМ

В данном параграфе рассмотрен процесс настройки работы робота с сис­


темой технического зрения и конвейером. Для облегчения настройки робота,
конвейера и программного обеспечения используется программа iRPickTool.
Общая процедура настройки включает несколько этапов (рис. 4.8),
а именно: настройку робота, способ укладки, конвейера, камеры и написание
управляющей программы.

Рис. 4.8. Основные этапы настройки объектов в iRPickTool

69
Основные операции в программе iRPickTool осуществляются с компо­
нентами, к которым относятся роботы и конвейеры. Эти компоненты называ­
ются объектами. Ниже приведены процедуры создания и редактирования пара­
метров объектов.
Для создания объекта необходимо нажать кнопку [6 SETUP] и выбрать
[iRPickTool], нажав кнопку FI [TYPE] на пульте обучения. Запустится про­
грамма iRPickTool с экраном, показанным на рис. 4.9.

Рис. 4.9. Окно создания объекта в iRPickTool

В дереве объектов, показанном на рис. 4.9, необходимо выбрать вид


объекта, который необходимо создать. Например, если необходимо создать
объект типа «робот», выберите [Robots], затем нажмите кнопку [1. CREATE],
имеющую вид чистого листа. Эта кнопка размещена выше дерева объектов
(рис. 4.10).
При нажатии кнопки CREATE появится окно, показанное на рис. 4.11.
В нём потребуется ввести имя создаваемого объекта. Имя не должно превы­
шать 20 символов и не должно содержать символа тире или начинаться
с цифры. После ввода имени нажмите F4 [ОК]. А для выхода из меню создания
объекта нажмите F5 [CANCEL],

70
Рис. 4.10. Создание нового объекта

Рис. 4.11. Окно задания типа и имени объекта


71
В зависимости от того, какой объект создан, появится окно редактирова­
ния свойств. При создании робота появится окно, показанное на рис. 4.12.

** іч
j
з ю*

I>
э System SeSuv
F < t:i ( t r S w
VJT :
С ч и Р Іж . Й т г і Г
I- ikunroit ■
рZti ■: [Г5 —Sip иР^влІ пгіIи--
“ 11 ■] ' Г*. ||

Т.іч I t Г It.tt

Рис. 4.12. Окноредактированиясвойствобъектатипа«робот»

В этом окне необходимо задать следующие свойства.


Указать контроллер, который управляет роботом. Для этого в списке
Controller необходимо выбрать нужный контроллер.
Поля, описанные ниже, заполняют при необходимости. В частности,
можно указать следующие элементы.
Номер группы (Group Num) заполняется при наличии нескольких робо­
тов, подключённых к заданному контроллеру.
В поле Dynamic Error Adjustment записывается значение ошибки, которая
может возникнуть при работе робота. При задании вида ошибки необходимо
руководствоваться документацией на робота.
Например:
$SLTK GRP [number of servo conveyor group].$SRVO DELAY
Поле Skip outbound motion задаётся после завершения обучения робота
базовым движениям. Данные поля заполнять не обязательно.
72
4.3. ЗАДАНИЕ СВОЙСТВ ТИПА УКЛАДКИ

После создания способа укладки (TRAY) появится окно задания свойств


укладки (рис. 4.13). Способ укладки можно рассматривать как коробку, в кото­
рую по заданному алгоритму будут укладываться (или изыматься) объекты.

Рис. 4.13. Окно задания свойств укладки

Весь TRAY делится на отдельные ячейки. Каждая ячейка имеет свои


координаты х, у, z. Для того чтобы добавить ячейку, куда будет укладываться
объект, нажмите кнопку [1. ADD CELL], Для удаления ячейки выделите её и
нажмите [2. DEL CELL],
Введите координаты выделенной ячейки. Координаты могут отсчиты­
ваться от заданного начала координат. Начало координат может располагаться
в любом месте коробки. Например, в заданном углу или по центру.
Например, начало координат располагается в верхнем левом углу короб­
ки (рис. 4.14).
73
Рис. 4.14. Указание начала координат в коробке

С учётом заданного начала координат вводят координаты всех ячеек.

Рис. 4.15. Схематичное изображение ячеек

Знак (+) на рис. 4.15 означает центр каждой ячейки. В соответствии


с рис. 4,15 задаются координаты ячеек (рис. 4.16).

1Susy 1
1 t'tu. |0М l0<
iKPidtlool tfetup
■I b k l X
14 Sjj'tfurkcnll SystemSetup
He bats L*y*rnumber: l
ПОРОТ1 c«*| Щят) ф а) РДОЧ) 4fCW IT.-
i -- ф н о е э тг
I «КО 500 «JO 0-0 1
~ -^ T r o r s
2 510 іэ д о -ЮЛ o.c J

Э 150.0 іо д -50 0 fl-0 1


В Chnyrfap* 4 m o SM -ад oo 1
-■#ТСГ.-М Ч.!
: lUsEh 1
; jfccsTm
l-4 citHI
F'X Sr.at ліа
Edit ■*
# ІTNl Ji^minn) rtw n ) Л пм л) « (4 * 4 ) Mode Ю
# ІГ N * ‘ 1 tM -0 | !0& | «9 1 1

f nwi ] [S O tr TKtl-l

Рис. 4.16. Задание координат ячеек

74
Для каждой ячейки может быть указано значение в поле model ID. Значе­
ния, указанные в этом поле, применяют в случае, когда разные объекты должны
быть уложены в заданные ячейки. В случае, когда с конвейера снимаются одно­
типные изделия, данное поле заполнять не требуется.
Если требуется добавить новый слой в коробку, то нажмите [1. ADD
LAYER], Для удаления слоя нажмите [2. DEL LAYER],
Настройка конвейера. После создания объекта типа конвейер откроется
окно задания его свойств (рис. 4.17). В этом окне необходимо задать следую­
щие свойства конвейера.

-Dm j 1/ 1
1 0 % I

іЮ 'іпі- N m l U g |ti|i

l | - 1 1 > 1 1 1 c o w i

Н .,11 K y s lrro R pttip


®jTII Allot* Tririfing Cm*У
— ф H rtR .- t !
Convener r
TV.r sttAu»
-■ ^ НОВОТ!
%Тиг»
Оѵлгілр Тпктлгтгг г ПО Р»
Lj-іг Б*sn« j m S* For вЛ -псітЧ Ю і v
Ф \ѵй,-Л ■LЛЛ£І44 lOff
0 - i n ' - П ѴГіГ-
ID . ! 1. ^
^■□de' Юі t-зп-. *
.. TC'NVl ■Г S T S L
■ІІІ SEN -J
С5ПЙ
iA ■ n 1
6:.ия
ИJr Г^-ГНГ-
j

jp
Р г з ц г с jpir 1 L irj 1
В г Fi 1 Stet: ans

# rsm
Щ ■.■■NJ -J'J'w " J F r r t lt t l

f n»L ] [EDIT TRtEJ SE^ ІИ" ГПП LCSOU*

Рис. 4.17. Окно настройки свойств конвейера

В зависимости от типа конвейера задаётся линейный или круговой.


Выберите «Line» и «Circle». После выбора типа конвейера автоматически ини­
циализируются дочерние объекты, такие как, например, сенсоры, установлен­
ные на конвейере.
Далее необходимо указать способ укладки, созданный ранее.
75
Задайте начальное состояние коробки (т.е. заполнена она или пустая).
В случае, когда необходимо укладывать объекты с конвейера, укажите тип
[Empty], в противном случае выберите [Full].
В поле Overlap Tolerance можно указать значение по умолчанию 10 mm.
Фактически это абсолютная погрешность, с которой определяется объект,
т.е., если в пределах плюс-минус 10 мм обнаружено два идентичных объекта,
то система будет распознавать их как один.
В поле Load Balance указывается, сколько объектов может быть располо­
жено на конвейере. Если указано No, то объектов может быть сколько угодно.
В этом случае робот будет брать столько объектов, сколько успеет.
Если указано Self-paced, то робот возьмёт столько объектов, сколько
задано в его диапазоне. Остальные объекты браться не будут.
После заполнения необходимых полей нажмите кнопку Set TRK FRM.
Дальнейшая процедура настройки будет зависеть от типа выбранного
конвейера. Ниже описана процедура настройки линейного конвейера.
После нажатия кнопки F4 [SET TRK FRM] появится окно, в котором
выводится информация о порядке дальнейшей настройки. Если известны пара­
метры энкодера, их можно задать в этом окне. Далее следует положить сетку
в поле видимости камеры и нажать кнопку NEXT. Затем выбрать User Tool
и в этом режиме переместить робот таким образом, чтобы точка центра инст­
румента (TCP) попала в центр маркера на калибровочной сетке. Нажать NEXT.
Затем включить конвейер, переместив сетку на небольшое расстояние и вновь
в режиме User Tool коснуться инструментом точки в центре маркера на калиб­
ровочной сетке. После нажатия кнопки NEXT необходимо указать роботу
направлении оси Y. Для этого нужно переместить TCP примерно на 10 мм
в направлении оси Y (использовать правило правой руки при назначении
направлений осей). После этого настройка конвейера будет завершена.

76
ПРАКТИЧЕСКИЕ ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1. Создайте объект типа «робот» в программе iRPickTool.
2. Задайте TRAY, состоящий из 3 слоев. В каждом слое содержится
4 ячейки, в которые должны быть уложены объекты размером 50x50x20 мм
(ДхШхВ).
3. Обучите робота распознавать заданный объект.

КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Поясните порядок создания объекта типа «робот» в программе
iRPickTool.
2. Поясните порядок калибровки камеры.
3. Поясните порядок обучения робота распознавать объект.

77
ЗАКЛЮЧЕНИЕ

По сравнению с классическими информационно-измерительными систе­


мами, основанными на контактных датчиках, рассмотренные в учебном посо­
бии методы и подходы позволят обеспечить следующие преимущества.
1. Системы технического зрения обеспечивают высокую точность: при
проведении измерений. При этом нет необходимости прикасаться к объекту,
исключается возможность повреждения объекта контроля.
2. Непрерывность: при визуальном контроле человек устаёт, а роботизо-
рованные комплексы, оснащённые системой технического зрения, не знают
усталости и могут работать в неблагоприятных для человека условиях.
3. Экономическая эффективность: благодаря развитию технологий и
конкуренции производителей снижается стоимость компьютерных процессо­
ров, ремонта и эксплуатации систем технического зрения, снижаются затраты.
4. Гибкость: с помощью систем технического зрения можно осуществ­
лять оценку многих параметров продукции. В случае изменения области
применения меняется программное обеспечение или осуществляется его
модернизация.
В связи с приятой концепцией «Индустрия 4.0», развитием безлюдных
технологий, автоматизацией и роботизацией производства системы техниче­
ского зрения будут активно развиваться во всех сферах экономической
деятельности. По этой причине необходимо изучать уже известные алгоритмы,
методы и подходы, описанные в данном учебном пособии. Однако жизнь
и технологии не стоят на месте. Искусственный интеллект уже среди нас,
а значит самое интересное ещё впереди.

78
СПИСОК ЛИТЕРАТУРЫ

1. Компьютерное зрение // Википедия. [2018-2019]. Дата обновления:


26.08.2018. - URL : https://ra.wikipedia.org/7oldicH94730298 (дата обращения:
26.01.2019).
2. Algorithms for detecting potato defects using images in the infrared range
of spectrum / P. V. Balabanov, A. G. Divin, A. P. Savencov & G. V. Shishkina //
Paper presented at the Proceedings of the 2018 IEEE International Conference
«Quality Management, Transport and Information Security, Information Technolo­
gies», IT and QM and IS 2018, 417 - 419. - D o i: 10.1109/ ITMQIS.2018.8525033.
3. Руководство пользователя аппаратных средств N1 Vision // National
Instruments. - 2005. - 286 c.
4. Доуринг, Эд. Основы машинного зрения с N1 myRIO / Эд Доуринг //
National Instruments. - 2015. - 166 с.
5. Обработка и анализ цифровых изображений с примерами на
Lab VIEW и IMAQ Vision / Ю. В. Визильтер, С. Ю. Желтов, В. А. Князь,
А. Н. Ходарев. - М. : ДМК Пресс, 2008. - 464 с.
6. Mordvintsev, A. OpenCV-Python Tutorials Documentation / A. Mordvint-
sev, К. Abid. - 2017. - 269 p.
7. Berry, Michael J. A. Data mining techniques: for marketing, sales, and
customer relationship management / Michael J. A. Berry. - Gordon Linoff. - 2nd ed.
8. Larose, Daniel T. Discovering knowledge in data: an introduction to data
mining / Daniel T. Larose.

79
ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ.......................................................................................................... 3
1. ОСНОВЫ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ................................................ 4
2. ОСНОВНЫЕ ЭТАПЫ СОЗДАНИЯ ПРИЛОЖЕНИЙ В N1 VISION ДЛЯ 8
ОБРАБОТКИ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ..........................................
2.1. Структура Q SM ...................................................................................... 14
2.2. Настройка камеры.................................................................................. 19
3. ВВЕДЕНИЕ В ОБРАБОТКУ ИЗОБРАЖЕНИЙ СРЕДСТВАМИ 23
OPENCV.........................................................................................................
3.1. Загрузка изображения из файла и захват изображения с камеры...... 23
3.2. Отслеживание объекта по его цвету..................................................... 26
3.3. Пороговое преобразование изображения............................................. 29
3.4. Геометрические преобразования изображений.................................. 33
3.5. Отслеживание объектов на основе анализа их гистограмм.............. 36
3.6. Применение фильтров при обработке изображений.......................... 40
3.7. Определение границ объекта на изображении.................................... 43
3.8. Вычитание ф она...................................................................................... 46
3.9. Сегментация изображений..................................................................... 50
3.10. Введение в машинное обучение.......................................................... 55
4. СИСТЕМА ТЕХНИЧЕСКОГО ЗРЕНИЯ РОБОТА FANUC...................... 63
4.1. Особенности работы системы технического зрения робота 63
с неподвижным рабочим объектом..............................................................
4.2. Особенности работы системы технического зрения робота 69
с подвижным рабочим объектом..................................................................
4.3. Задание свойств типа укладки.............................................................. 73
Практические задания для самостоятельной работы................................. 77
Контрольные вопросы.................................................................................. 77
ЗАКЛЮЧЕНИЕ..................................................................................................... 78
СПИСОК ЛИТЕРАТУРЫ.................................................................................... 79

80
Учебное электронное издание

БАЛАБАНОВ Павел Владимирович


ДИВИН Александр Георгиевич
ЕГОРОВ Андрей Сергеевич

ТЕХНИЧЕСКОЕ ЗРЕНИЕ
РОБОТОТЕХНИЧЕСКИХ
КОМПЛЕКСОВ
У чебное посо би е

Редактор Л. В. Комбарова
Инженер по компьютерному макетированию Т. Ю. З о т о в а

ISBN978-5-8265-2096-3 Подписано к использованию 25.11.2019.


Тираж 50 шт. Заказ № 129
Издательский центр ФГБОУ ВО «ТЕТУ»
392000, г. Тамбов, ул. Советская, д. 106, к.
Телефон (4752) 63-81-08
E-mail: izdatelstvo@admin.tstu.ru
9 785826 520963

Вам также может понравиться