Файл: Техническое зрение для системы управления сортировочного робота.pdf

ВУЗ: Не указан

Категория: Диссертация

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 993

Скачиваний: 17

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

60
Благодаря написанной программе была найдена маска для каждого цвета изделия по изображения с камеры №1.Результом работы данной программы представлен на рисунках 4.4 -4.7.
Рисунок 4.4 – Исходное изображение сцены
Рисунок 4.5 – Полученная маска для синнего цвета
Рисунок 4.6 – Полученная маска для красного цвета
Рисунок 4.7 – Полученная маска для зеленого цвета

61
Камера №2 служит для определения цвета изделия, которое достигается засчет белого заднего фона поэтому для нее была вычислена маска всех трех цветов. (рисунок 4.8)
Рисунок 4.8 – Маска для вычета белого фона с изображения камеры
№2
По полученным значениям можно программно выделить объект нужного цвета, используя функцию для выборки тех пикселей изображения, которые лежат в заданном интервале значений. Это функция inRange (Mat src,
Mat/Scalar lower, Mat/Scalar upper, Mat dst), она проводит поэлементную проверку элементов массива (пикселей) и проверяет, лежат ли значения массива между значениями элементов двух других массивов или скаляров.
Формула:
????????????(????????????) = ????????????????????(????????????) ≤ ????????????(????????????) <????????????????????(????????????)
Где: 1. src – исходный массив
2. lower – массив или скаляр с нижней границей (включая), если это скаляр (Scalar (x, y, z)), то пиксели, значения которых ниже, чем x, y и z для
HUE, SATURATION и VALUE считаются черными пикселями в результирующем изображении dst;
3. upper – массив или скаляр с верхней границей (не включая), если это скаляр (Scalar (x, y, z)), то пиксели, значения которых выше или равны x, y и z для HUE, SATURATION и VALUE считаются черными пикселями в результирующем изображении dst;

62 4. dst – массив для хранения результата
Результат этого преобразования такой же, как и в предыдущей программе, черно-белое изображение с выделенными объектами, которые подходят под заданные в аргументах условия.
4.3 Контурный анализ
Контурный анализ – это один из важных и очень полезных методов описания, распознавания, сравнения и поиска графических образов
(объектов). [23] Контур – это внешние очертания объекта. При проведении контурного анализа:

полагается, что контур содержит достаточную информацию о форме объекта;

внутренние точки объекта во внимание не принимаются. Поэтому накладывается ряд ограничений на область применения контурного анализа, которые, в основном, связаны с проблемами выделения контура на изображениях:

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

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


63
Чтобы оперировать полученным контуром, его необходимо как-то представить (закодировать). Например, указывать вершины отрезков, составляющих контур.
Библиотека OpenCV реализует удобные методы для детектирования и манипуляции с контурами изображения. Для поиска контуров на двоичном изображении используется функция findContours
Данная функция может находить внешние и вложенные контуры и определять их иерархию вложения.
Отобразить найденные контуры можно с помощью функции drawContours
Дополнительные полезные функции: boundingRect – возвращает прямоугольник, которым можно обвести контур
Функция возвращает прямоугольник, у которого стороны строго вертикальны и горизонтальны.
Существуют также и другие функции, которые часто используются, например, minAreaRect2(), которая возвращает минимально возможный прямоугольник, которым можно обвести контур, но который может быть повёрнут относительно системы координат изображения на определенный угол.
4.4 Алгоритм работы программы и её реализация
Для определения центра изделия с двух камер был разработан алгоритм работы программы. Суть заключается в следующем:
1.Кубик движется по конвейеру и при попадании в кадр камеры №2, благодаря вычитанию белого фона находится его контур. Как только центр изделия попадает в центр кадра, конвейер останавливается и определяется цвет преобладающий в полученном контуре.
2.После этого начинается работа с изображением камеры №1.Так как цвет изделия определен, то применяется конкретная маска цвета для определения контура кубика и нахождения его центра.
Его программная реализация представлена ниже: import numpy as np import imutils import cv2 from matplotlib import pyplot as plt cap = cv2.VideoCapture(0)

64
#листбумаги cap1 = cv2.VideoCapture(2) color_blue = (255,0,0) color_yellow = (0,255,255) min_val, max_val = 232.75, 257.25 lower_paper = np.array([0,66,0]) upper_paper = np.array([255,255,229]) lower_conv = np.array([0,0,0]) upper_conv = np.array([0,0,0]) def contour(image,mincolor,maxcolor,title): hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) thresh= cv2.inRange(hsv, mincolor, maxcolor) blur = cv2.blur(thresh,(5,5))
_, contours, hierarchy = cv2.findContours( blur.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) c = max(contours, key=cv2.contourArea) rect = cv2.minAreaRect(c) # пытаемся вписать прямоугольник box = cv2.boxPoints(rect) # поиск четырех вершин прямоугольника box = np.int0(box) # округление координат cv2.drawContours(image,[box],0,(255,0,0),2) imgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) mask = np.zeros(imgray.shape,np.uint8) cv2.drawContours(mask,[c],0,255,-1) mean_val = cv2.mean(image,mask = mask)
M = cv2.moments(c) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) cv2.imshow(title, image) return cx,mean_val
# load the image, convert it to grayscale, and blur it slightly while (1): ret,image = cap.read() img=image[120:290, 70:590]
#cv2.imshow('test', img)
X,mean_val=contour(img,lower_paper,upper_paper,'camera1') if min_val <= X <= max_val: cv2.putText(img, "Hello world!", (X,155), cv2.FONT_HERSHEY_SIMPLEX, 1, color_yellow, 2) if mean_val[2]>120: lower_conv = np.array([0,93,45]) upper_conv = np.array([5,255,255]) elif mean_val[0]>120: lower_conv = np.array([89,122,44]) upper_conv = np.array([140,255,255]) elif mean_val[1]>90: lower_conv = np.array([51,87,7]) upper_conv = np.array([72,255,255])
_,img1 = cap1.read() frame=img1[320:450, 0:640]
Y,_=contour(frame,lower_conv,upper_conv,'camera2')
#print(X,Y) k = cv2.waitKey(5) & 0xFF if k == 27: break


65 cap.release() cap1.release() cv2.destroyAllWindows()
Результом работы данной программы представлен на рисунках 4.9 -4.11.
Рисунок 4.9 – Нахождение двух центров красного кубика
Рисунок 4.10 – Нахождение двух центров зеленого кубика

66
Рисунок 4.11 – Нахождение двух центров синего кубика
1   2   3   4   5   6   7   8   9

4.5 Преобразование координат изделия в координатную систему робота Рассмотрим две системы координат: систему координат OXYZ(манипулятор) с осями OX, OY, OZ и систему OUVW(камера) с осями OU, OV, OW. (рисунок 4.12) Рисунок 4.12 – Системы координат камеры и манипулятора

67
Однородная матрица преобразования представляет собой матрицу размерностью 4х4, которая преобразует вектор, выраженный в однородных координатах, из одной системы отсчета в другую. [24] Однородная матрица преобразования может быть разбита на четыре подматрицы:
???? = [
????
3х3
????
3х3
????
3х3
????
3х3
] = [
Поворот
Сдвиг
Преобразование перспективы Масштабирование
]
Верхняя левая подматрица размерностью 3х3 представляет собой матрицу поворота; верхняя правая подматрица размерностью 3х1 представляет собой вектор положения начала координат повернутой системы отсчета относительно абсолютной; нижняя левая матрица размерностью 1х3 задает преобразование перспективы; четвертый диагональный элемент является глобальным маштабирующим множителем. Однородная матрица преобразования позволяет выявить геометрическую связь между связанной системой отсчета OUVW и абсолютной системой OXYZ.
Если вектор Р трехмерного пространства выражен в однородных координатах (т.е. ???? = (????
????
, ????
????
, ????
????
)
????
, то, используя понятие матрицы преобразования, можно сформировать однородную матрицу преобразования задающую преобразование поворота вокруг вектора k на угол Q и имеющую размерность 4х4. Однородная матрица поворота получается соответствующим расширением обычной матрицы поворота, имеющей размерность 3х3.
Так однородное преобразование, описывающее поворот вокруг оси Х на угол β будет иметь вид:
????????????(????, ????) = [
1 0
0 0
0 ????????????????
−????????????????
0 0
0
????????????????
0
????????????????
0 0
1
]
Поворот вокруг оси Y на угол β будет иметь вид:
????????????(????, ????) = [
????????????????
0
????????????????
0 0
1 0 0
−????????????????
0
????????????????
0
????????????????
0 0 1
]
Поворот вокруг оси Z на угол β будет иметь вид:

68
????????????(????, ????) = [
????????????????
−????????????????
0 0
????????????????
????????????????
0 0 0
0 0
0 1 0 0 1
]
Верхняя правая подматрица однородной матрицы преобразование, имеющая размерность 3х1, задает параллельный перенос системы координат
OUVW относительно абсолютной системы OXYZ на вектор
(????????, ????????, ????????)
????
???????????????????? = [
1 0 0 ????????
0 1 0
????????
0 0
0 0
1 ????????
0 1
]
Эта матрица размеронстью 4х4 называется однородной матрицей элементарного сдвига.
Правая нижняя подматрица однородной матрицы преобразования размерностью 1х1 определяет глобальное преобразование масштаба
[
1 0 0 0 0 1 0 0 0
0 0
0 1 0 0 ????
] [
????
????
????
1
] = [
????
????
????
????
], где s>0. Таким образом, четвертый диагональный элемент однородной матрицы преобразования определяет глобальное сжатие координат, если s>1, и растяжение, если 0Левая нижняя подматрица однородной матрицы преобразования размерностью 1х3 определяет преобразование перспективы.Действие ее эквивалентно эффекту линзы.
4.6 Распознавание QR кода
Понятие “QR код” (Quick Response code) возникло впервые в 1994 году в Японии [25].
Этот стандарт штрих-кодов был разработан и представлен компанией
“Denso-Wave” для отслеживания разных стадий производства продукции
Toyota на cвоих предприятиях. В скором времени этот стандарт получил большую популярность среди рекламных и маркетинговых компаний, так как
QR коды сделали процесс взаимодействия человека с объектом интерактивнее.


69
Простота и популярность QR кодов сделали возможным использование этих двухмерных штрихкодов во всех сферах человеческой жизни, а также промышленности.
QR код представляет из себя матричный (двухмерный) штрихкод, который позволяет зашифровать гораздо больше информации, по сравнению с обычными одномерными штрих-кодами (например,: “EAN/UPC”, “Code
128”), а также позволяют хранить различные типы данных (числа, символы, иероглифы, а так же смешанные типы данных). Этот стандарт штих-кодов получил большую популярность благодаря тому, что процесс распознавания не требует специального сканирующего оборудования такого, как специальный сканирующий луч, и может быть распознан при помощи любой камеры и установленного декодирующего программного обеспечения на устройстве
Ниже приведен алгоритм обнаружения QR кода, реализованный с помощью библиотек Pyzbar[26] и OpenCV. Алгоритм распознавания представляет из себя[27]:
1)
Получение изображение с веб-камеры или из файла
2)
Перевод изображения из цветного в изображение, состоящее из оттенков серого
3)
Бинаризация изображения, состоящего из оттенков серого цвета
4)
Разметка изображения на обособленные области (блобы)
5)
Обработка получившихся областей (вычисление числовых и геометрических характеристик)
6)
Фильтрация полученных областей
7)
Поиск областей, которые по характеристикам с большей вероятностью похожи на обязательные метки позиционирования на QR коде
Метка позиционирования - область QR кода, образованная тремя вложенными квадратами с отношением сторон 7:5:3 (рисунок 4.13).

70
Рисунок 4.13 – Метка позиционирования QR кода
8)
Выбор трех наиболее вероятных областей.
9)
Анализ расположения QR кода на изображении
10) Выделение QR кода из всего изображения, для последующей обработки
11) Определение необходимых преобразований
12) Применение необходимых преобразований к QR коду
13) Декодирование QR кода с помощью алгоритма, описанного в спецификации ISO/IEC 18004 Информационная технология - Автоматическая идентификация и сбор данных - Символика штрихового кода – QR Код [28].
14) При удачном завершении этапа декодирования, вывод на экран закодированной информации
Листинг программы по разнованию QR кода представлен ниже: from pyzbar.pyzbar import decode import numpy as np import cv2 color_yellow = (0,255,255) img=cv2.imread('1.jpg') a=decode(img) cv2.rectangle(img,(a[0].rect[0],a[0].rect[1]),
(a[0].rect[0]+a[0].rect[2],a[0].rect[1]+a[0].rect[3]),(0,255,0),3) qrcode=a[0].data.decode('utf-8') cv2.circle(img, (a[0].rect[0],a[0].rect[1]), 5, color_yellow, 2) cv2.circle(img, (a[0].rect[0]+a[0].rect[2],a[0].rect[1]+a[0].rect[3]), 5, color_yellow, 2) cv2.putText(img, qrcode, (a[0].rect[0],a[0].rect[1]-25), cv2.FONT_HERSHEY_SIMPLEX, 1, color_yellow, 2), print(a) cv2.imshow('code',img) cv2.waitKey() cv2.destroyAllWindows()