Upload
alina-vilk
View
337
Download
3
Embed Size (px)
Citation preview
Ruby && OpenCV
Computer Vision Intro(интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, определение
сходства, анализ перемещения объекта, определение формы объекта и слежение за объектом, 3D-реконструкция,
сегментация объекта, распознавание жестов )
Лена Седерберг 1972
Использование1. Google
Google Glass
Google Mobile
2. Робототехника и Arduino
3. Промышленное производство
Сложно или интересно?
1) Big Data? (Google Car 1 Гб/с , человеческий мозг ~ 45 Мб - 3Гб)
2) Алгоритмы? (тензоры, фильтрация)3) DeepLearning , MachineLearning
Из чего состоит ядро?
CXCORE
* содержит базовые структуры данных и алгоритмы:
— базовые операции над многомерными числовыми массивами
— матричная алгебра, математические ф-ции, генераторы случайных чисел
— Запись/восстановление структур данных в/из XML
— базовые функции 2D графики
CVмодуль обработки изображений и компьютерного зрения
— базовые операции над изображениями (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.)
— анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы)
— анализ движения, слежение за объектами
— обнаружение объектов, в частности лиц
— калибровка камер, элементы восстановления пространственной структуры
CVCAM CVAUX HIGHGUIHighgui — модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса
— захват видео с камер и из видео файлов, чтение/запись статических изображений.
— функции для организации простого UI (все демо приложения используют HighGUI)
Cvaux — экспериментальные и устаревшие функции
— пространств. зрение: стерео калибрация, само калибрация
— поиск стерео-соответствия, клики в графах
— нахождение и описание черт лица
Примеры патентов или стартапов?1) Виртуальная примерочная(17%
продаж за 2015 г)
http://zugara.com/virtual-dressing-room-technology
2) Распознавание автомобильных номеров (алгоритмы или нейронная сеть?)
Нейронные сети (механизмы обучения)
1) TensorFlow (Google)2) Theano, PyLearn2 && EcoSystem3) Torch4) Caffehttp://deeplearning4j.org/compare-dl4j-torch7-pylearn.html
Трудности построения системы1) Soft vs Железо2) Алгоритм vs Нейронная Сеть Tesseract OCR
Это открытое программное обеспечение, выполняющее автоматическое распознавание как единичной буквы, так и сразу текста. Tesseract удобен тем, что есть для любых ОС, стабильно работает и легко обучаем. Но он очень плохо работает с замыленным, битым, грязным и деформированным текстом.
K-nearest
Очень простой для понимания метод распознавания символов, который, несмотря на свою примитивность, часто может побеждать не самые удачные реализации SVM или нейросетевых методов.
Работает он следующим образом:
1) предварительно записываем приличное количество изображений реальных символов уже корректно разбитые на классы своими глазами и руками
2) вводим меру расстояния между символами (если изображение бинаризованно, то операция XOR будет оптимальна)
3) затем, когда мы пытаемся распознать символ, поочередно рассчитываем дистанцию между ним и всеми символами в базе. Среди k ближайших соседей, возможно, будут представители различных классов. Естественно, представителей какого класса больше среди соседей, к тому классу стоит отнести распознаваемый символ.
Типы данныхCvPoint — точка — (структура из двух переменных (x,y))
CvSize — размер — (структура из двух переменных (width,height))
CvRect — прямоугольник — (структура из 4 переменных (x,y,width,height))
CvScalar — скаляр — (4 числа типа double)
CvArr — массив — его можно считать «абстрактным базовым классом» для CvMat и далее IplImage (CvArr->CvMat->IplImage)
CvMat — матрица
IplImage — изображение
Загрузка картинкиcvLoadImage( filename, int iscolor=CV_LOAD_IMAGE_COLOR )// окно для отображения картинки
filename — имя файлаiscolor — определяет как представить картинкуiscolor > 0 — цветная картинка с 3-мя каналамиiscolor == 0 — картинка будет загружена в формате GRAYSCALE (градации серого)iscolor < 0 — картинка будет загружена как есть
cvNamedWindow("original",CV_WINDOW_AUTOSIZE); // показываем картинкуcvShowImage("original",image);
Информация, доступная после загрузкиimage->nChannels // число каналов картинки (RGB, хотя в OpenCV - BGR ) (1-4)image->depth // глубина в битахimage->width // ширина картинки в пикселяхimage->height // высота картинки в пикселяхimage->imageSize // память занимаемая картинкой (==image->height*image->widthStep)image->widthStep // расстояние между соседними по вертикали точками изображения (число байт в одной строчке картинки)- может потребоваться для самостоятельного обхода всех пикселей изображения)
Метод Виолы Джонса
Величина каждого признака вычисляется как сумма пикселей в белых прямоугольниках, из которой вычитается сумма пикселей в черных областях. Прямоугольные признаки более примитивны чем steerable filter, и, несмотря на то, что они чувствительны к вертикальным и горизонтальным особенностям изображений, результат их поиска более груб.
Свертка— это операция, показывающая «схожесть» одной функции с отражённой и сдвинутой копией другой.
cvFilter2D( src, dst, kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)))
Нейронные сети— классические 2-3х-слойные нейросети, обучающиеся градиентными методами с обратным распространением ошибок (3х-слойная нейросеть изображена на рисунке);
— так называемые deep-learning нейросети и сверточные сети.
Детектор границ CannyКрая(границы) — это такие кривые на изображении, вдоль которых происходит резкое изменение яркости или других видов неоднородностей.
Проще говоря, край — это резкий переход/изменение яркости.
Причины возникновения краёв:
* изменение освещенности
* изменение цвета
* изменение глубины сцены (ориентации поверхности)
Реализация ))) cvCanny( image, edges, threshold1, threshold2, CV_DEFAULT(3) );
image — одноканальное изображение для обработки (градации серого)edges — одноканальное изображение для хранения границ, найденных функциейthreshold1 — порог минимумаthreshold2 — порог максимумаaperture_size — размер для оператора Собеля
Шаги детектора
— Убрать шум и лишние детали из изображения
— Рассчитать градиент изображения
— Сделать края тонкими (edge thinning)
— Связать края в контура (edge linking)