Академический Документы
Профессиональный Документы
Культура Документы
ЕГОРОВ
Т ам бов
И зд а т е л ь с к и й ц е н т р ФГБОУ ВО «ТГТУ»
2019
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Тамбовский государственный технический университет»
ТЕХНИЧЕСКОЕ ЗРЕНИЕ
РОБОТОТЕХНИЧЕСКИХ
КОМПЛЕКСОВ
Тамбов
Издательский центр ФГБОУ ВО «ТГТУ»
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
3
1. ОСНОВЫ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ
https://t.me/it_boooks/2
7
2. ОСНОВНЫЕ ЭТАПЫ СОЗДАНИЯ ПРИЛОЖЕНИЙ
В N1 VISION ДЛЯ ОБРАБОТКИ ЦИФРОВЫХ ИЗОБРАЖЕНИЙ
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
Запуск
условие А
Задача А
условие в
Задача В
Планировщик
состоянии
условнее
Задача С
Обновление
иначе изображений
и устройств
Выключение
14
<
f Л
"с о х р а н и ть Сохранение ►
изображ ение"
изображения
1
Планировщик
состояний ( ----------------------
Обновление
иначе
__________ ^ изображений
и устройств
V. ______ J _________________ _
"стол" и л и о ш и б к а
* Г
Г 1 V
Выключение
>______________ -
1г
( 1[ q s m ) release - Освобождение ^
• Реинициализация всех управляющих кнопок на лицевой панели в
состояние по умолчанию (не нажатое).
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
Листинг ЗЛ
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 ()
Листинг 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 ()
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 :
cap . r e le a s e d
c v 2 . d e s tr o y A lltf in d o v s ()
25
Тип кодека зависит от используемой платформы. Можно использовать
следующие типы: DIVX, XVID, MJPG, Х264, WMV1, WMV2. Далее вызывается
функция V id e o W r ite r () , аргументами которой являются имя
записываемого файла, тип кодека, количество кадров в секунду и размер
кадров. В качестве последнего аргумента можно указать значение флага,
определяющего цветовые оттенки изображения.
Таким образом, мы сделали первый шаг на пути применения техническо
го зрения, а именно научились загружать изображения из файлов и захватывать
изображения с камеры.
26
Следует отметить, что в формате HSV доступны следующие диапазоны:
диапазон Н (оттенки цвета) [0, 179], диапазон S (насыщенность цвета) [0, 255]
и диапазон V (значения) [0, 255].
Теперь, зная как осуществлять преобразования, напишем простую
программу для отслеживания объекта заданного цвета (в нашем примере это
будет фигурка ждуна синего цвета).
Как видно из кадра, захваченного веб-камерой (справа на рис. 3.2), в руке
я держу фигурку ждуна. А слева, на том же рисунке, имеется чёрный фон, на
котором эта фигурка выделена белым. Что же необходимо сделать для
получения такого результата? Всё достаточно просто (см. листинг 3.3).
Листинг 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 .destroyAHWindows ()
»> 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
28
После того как диапазон значений пикселей для выбранного цвета опре
делён, достаточно вывести на экран изображение только в заданном диапазоне.
Это означает, что все цвета, кроме заданного, будут «преобразованы» в чёрный,
а интересующий нас цвет - в белый. Для выполнения этой операции воспользу
емся функцией inRange (). Для выхода из программы необходимо нажать
кнопку esc.
Таким образом, мы научились находить и отслеживать объекты заданного
цвета.
Листинг 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)
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
Листинг 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()
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
32
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Изучите метод Отцу и реализуйте его алгоритм для бинаризации изобра
жения.
а) б) в)
Листинг 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 ()
34
Последняя, использованная в программе функция cv2.getRotation
Matrix2D предназначена для поворота изображения. Поворот изображения
на угол Ѳ обеспечивается применением матрицы трансформации
cosG -s in 0 ’
М
sin0 cosG
Следующая программа (листинг 3.7) иллюстрирует пример аффинного
преобразования (рис. 3.6).
Input O utput
О
200
400
Л истинг 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 ' )
pit.show()
35
Для выполнения преобразования изображения необходимо задать коор
динаты трёх точек на исходном изображении и координаты этих же точек
в результирующем изображении. В приведённом примере мы задали координа
ты этих точек в переменных p t s l и p t s 2 соответственно. Указанные пере
менные передаются в качестве аргументов функции cv2.getAffineTransform,
которая создаёт матрицу преобразования размерностью 2x3, которая далее
передаётся в качестве аргумента в функцию cv2. warpAffine, выполняющую
преобразование.
С irnj2 ■ img2
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()
39
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
~+1 + 2 + 1
Gу 0 0 0 * А.
-1 -2 -1
41
Аппроксимации для модуля и направления градиента можно получить по
формулам G = д^г +Gy, Q =atan(Gy/Gx)
Листинг 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
Листинг ЗЛО
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 ()
45
направления границы округляется до 0, 45, 90 или 135. Затем идёт проверка
того, достигает ли величина градиента локального максимума в соответствую
щем направлении.
Например, для сетки 3x3: если угол направления градиента равен нулю,
точка будет считаться границей, если её интенсивность больше, чем у точки
выше и ниже рассматриваемой точки; если угол направления градиента равен
90°, точка будет считаться границей, если её интенсивность больше чем у точки
слева и справа рассматриваемой точки; если угол направления градиента
равен 135°, точка будет считаться границей, если её интенсивность больше, чем
у точек, находящихся в верхнем левом и нижнем правом углах от рассматри
ваемой точки; если угол направления градиента равен 45°, точка будет считать
ся границей, если её интенсивность больше, чем у точек, находящихся в верх
нем правом и нижнем левом углах от рассматриваемой точки.
Листинг ЗЛ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 ()
50
Минимумы функцииf(x,y )
S3 im a g e
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 ()
Е thresh — □ X
Е noise □ X
53
Чтобы удалить любые небольшие отверстия в объекте, мы можем
использовать морфологическое закрытие. Теперь мы определили, что области,
расположенные вблизи центра, являются объектами переднего плана.
Единственный регион, в котором мы не уверены, является пограничным
регионом монет. Поэтому нам нужно извлечь область, в которой мы
с уверенностью можем сказать, что там расположены монеты. Операция эрозии
удаляет граничные пиксели. После её применения мы можем быть уверены,
что в рассматриваемой области монета. Указанные операции срабатывают
в тех случаях, когда объекты не касаются друг друга. В нашем случае это
не так. Поэтому выходом может быть применение функции преобразования
расстояния cv2.distanceTransform и последующего применения порогового
преобразования. Далее нам нужно найти область, где мы уверены в отсутствии
монет. Для этого мы применяем функцию cv2.dilate. Полученный результат
представлен на рис. 3.17. Очевидно, что до «совершенства» нам ещё
необходимо поработать. Для этого нужно убрать лишние шумы на полученном
изображении. Подумайте, как это можно сделать.
Р~ back □ X
54
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ рабо ты
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)
-ѵх
<*х
с
X
X X
с
X А в
X X
X
58
'Л
* Китайка
Пепин
Антоновка
Яблоко 1
Яблоко 2
Яблоко 2
Яблоко 1
Для первого яблока будем искать трёх ближайших соседей, т.е. к= 3. Для
первого яблока ближайшими соседями будут три яблока со следующими значе
ниями диаметра плода и длины черешка: И (5,3; 1,5), 5(5,2; 1,5) иС(5,2; 1,5).
Вычислим евклидово расстояние
59
D e (яблоко 1, C) = д/Z " (5,3-5,2)I2 + (1,6-1,5)2 =0,1414,
^ (я б л о к о 1, С) = ^ (я б л о к о 1, В ).
Яблоко 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()
Камера
Рабочий объект
Паллета
63
Карту памяти также можно использовать для сохранения информации
работы блока управления роботом. Информация по его работе и видеоинфор
мация поддерживаются одновременно.
Процедура настройки системы технического зрения включает несколько
этапов: запись информации на камеру; установку TCP для робота; установку
калибровочной сетки; установку системы координат; калибровку и запись дан
ных; создание видеопрограммы; создание программы для робота; контроль
операции компенсации.
Процедура установки камеры.
1. Нажмите кнопку [MENU], выберите [8 iRVision], а затем [1 Vision
setup]. Отобразится экран добавления камеры. Нажмите F4 [VTYPE] и выбе
рите [Camera Setup Tools] из списка. Появится экран, показанный на рис. 4.2.
2. Нажмите F2 [CREATE],
3. Зайдите в меню [Туре] и выберите тип камеры. В зависимости от
доступных камер, вы сможете выбрать тип камеры [KOWA Digital Camera]
или другую.
■ M l > 10 *
ті
I ІКѴІЧПЛ S f l u p Ч Л ІП - CA^F-P-A
Iff»
■С тГТФ-г » BC Dt / D .t
(e c u O J . t l f 1 .1 *
. W | O H s w
■' :1 J
Рис. 4.3. Окно редактирования камеры
й т/n T2 10%
IRVlsIon 8otUp Main VTGALIB
Zoom: 50% v
о © о e e © ©
о о о © © ©
e e ф @ © © ©
© ©О Ф e © ®
© © © © © © ©
© © • • • • • *123
1. Создайте камеру.
2. Проведите калибровку созданной камеры.
3. Обучите робота распознавать заданный объект.
КОНТРОЛЬНЫЕ ВОПРОСЫ
69
Основные операции в программе iRPickTool осуществляются с компо
нентами, к которым относятся роботы и конвейеры. Эти компоненты называ
ются объектами. Ниже приведены процедуры создания и редактирования пара
метров объектов.
Для создания объекта необходимо нажать кнопку [6 SETUP] и выбрать
[iRPickTool], нажав кнопку FI [TYPE] на пульте обучения. Запустится про
грамма iRPickTool с экраном, показанным на рис. 4.9.
70
Рис. 4.10. Создание нового объекта
** іч
j
з ю*
I>
э System SeSuv
F < t:i ( t r S w
VJT :
С ч и Р Іж . Й т г і Г
I- ikunroit ■
рZti ■: [Г5 —Sip иР^влІ пгіIи--
“ 11 ■] ' Г*. ||
Т.іч I t Г It.tt
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
f nwi ] [S O tr TKtl-l
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
jp
Р г з ц г с jpir 1 L irj 1
В г Fi 1 Stet: ans
# rsm
Щ ■.■■NJ -J'J'w " J F r r t lt t l
76
ПРАКТИЧЕСКИЕ ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1. Создайте объект типа «робот» в программе iRPickTool.
2. Задайте TRAY, состоящий из 3 слоев. В каждом слое содержится
4 ячейки, в которые должны быть уложены объекты размером 50x50x20 мм
(ДхШхВ).
3. Обучите робота распознавать заданный объект.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Поясните порядок создания объекта типа «робот» в программе
iRPickTool.
2. Поясните порядок калибровки камеры.
3. Поясните порядок обучения робота распознавать объект.
77
ЗАКЛЮЧЕНИЕ
78
СПИСОК ЛИТЕРАТУРЫ
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
Учебное электронное издание
ТЕХНИЧЕСКОЕ ЗРЕНИЕ
РОБОТОТЕХНИЧЕСКИХ
КОМПЛЕКСОВ
У чебное посо би е
Редактор Л. В. Комбарова
Инженер по компьютерному макетированию Т. Ю. З о т о в а