1 / 25

Выполнил : Миронов И.М.

Министерство образования и науки Российской федерации Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.И. Лобачевского» Радио ф изический факультет Лаборатория физических основ беспроводной связи.

clovis
Télécharger la présentation

Выполнил : Миронов И.М.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Министерство образования и науки Российской федерации Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.И. Лобачевского» Радио физический факультет Лаборатория физических основ беспроводной связи Выполнил:Миронов И.М. “Введение в OpenCV”

  2. Введение • OpenCV (OpenSourceComputerVision) — библиотека компьютерного зрения с открытым исходным кодом • Реализована на C/C++, также разрабатывается для Python, Ruby, Matlab, Lua

  3. Поддерживаемые платформы • Microsoft Windows: • MicrosoftVisual C++ (6.0-9.0, .NET) • Intel Compiler, • Borland C++, • Mingw (GCC 3.x). • qt • Linux(В том числе и MeeGo): • GCC (2.9x, 3.x), • Intel Compiler: «./configure-make-make install» • qt • Mac OS X: • GCC (3.x, 4.x) • Android: • Android-NDK+cmake

  4. Модули

  5. Модули • opencv_core — основная функциональность. Включает в себя базовые структуры, вычисления(математические функции, генераторы случайных чисел) и линейную алгебру, DFT, DCT, ввод/вывод для XML и YAWL и т. д. • opencv_imgproc — обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.). • opencv_highgui — простой UI, ввод/вывод изображений и видео. • opencv_ml — статистические модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.).

  6. Модули • opencv_features2d — распознавание и описание плоских примитивов (SURF, FAST и другие, включая специализированный фреймворк). • opencv_video — анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона). • opencv_objdetect— обнаружение объектов на изображении (нахождение лиц с помощью алгоритма Виолы-Джонса (англ.), распознавание людей HOG и т. д.). • opencv_calib3d — калибровка камеры, поиск стерео-соответстсвия и элементы обработки трехмерных данных.

  7. Модули • opencv_flann — библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV. • opencv_contrib— сопутствующий код, еще не готовый для применения. • opencv_legacy — устаревший код, сохраненный ради обратной совместимости. • opencv_gpu — ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidia

  8. Создание окон • intcvNamedWindow( constchar* name, intflags ); — создаёт окно, в которое мы будем выводить наше изображение. • Первый параметр — название окна • Второй — его размер, 0 — даёт возможность изменять размер окна во время выполнения программы, но обычно указывается флаг CV_WINDOW_AUTOSIZE, который указывает, что окно будет ровно тех же размеров, что и загружаемое в него изображение. • voidcvShowImage( constchar* name, constCvArr* image );— эта функия отображает изображение в окне; • первый параметр — название окна для вывода картинки, • второй параметр — изображение для вывода. • intcvWaitKey( intdelay=0 ); — эта функция останавливает программу и ожидает нажатия клавиши заданное число миллисекунд и продолжает программу, если ничего не нажато.

  9. Освобождение ресурсов • void cvReleaseImage( IplImage** image ); — функция освобождает память, выделенную под изображение и устанавливает указатель в NULL. void cvDestroyWindow( const char* name ); — эта функция закрывает окно и освобождает выделенную память.

  10. Структура изображения • IplImage – структур для хранения изображений • Наиболее часто используемые поля: • intnSize; • intnChannels; • int depth; • int width; • int height; • char *imageData; • intdataOrder;

  11. Загрузка изображения • IplImage* cvLoadImage( const char* filename, intiscolor=CV_LOAD_IMAGE_COLOR ); — загружает картинку из файла. • filename — имя файла • iscolor — определяет как представить картинкуiscolor > 0 — цветная картинка с 3-мя каналамиiscolor == 0 — картинка будет загружена в формате GRAYSCALE (градации серого)iscolor < 0 — картинка будет загружена как есть

  12. Простейшая программа на OpenCV • #include <highgui.h>int main(intargc, char** argv){IplImage *image = cvLoadImage(“testimage.jpg”, 1);        // окно для отображения картинкиcvNamedWindow(“Test”,CV_WINDOW_AUTOSIZE);        // показываем картинкуcvShowImage(“Test”, image);        // ждём нажатия клавишиcvWaitKey(0);        // освобождаем ресурсыcvReleaseImage(& image);        // удаляем окноcvDestroyWindow(“Test”); return 0;}

  13. Детектирование лиц • Детектор лица OpenCV использует метод П.Виолы и М.Джонса, который был опубликован в 2001 • Этот подход к детектированию объектов на изображении комбинирует четыре ключевые концепции: • Простые прямоугольные функции, называемые функциями Хаара. • Интегральное Изображение для быстрого обнаружения функции. • Метод машинного обучения AdaBoost. • Каскадный классификатор для эффективного совмещения множественных функций.

  14. Функции Харра • Функции Харра представляют собой прямоугольные волны одинаковой длины

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

  16. Метод машинного обучения AdaBoost

  17. Каскадный классификатор

  18. Работа с каскадами • CvHaarClassifierCascade * cascade– хранит данные классификатора, загруженного из xml файла. • Для загрузки XML-данных из файла можно использовать функцию cvLoad() • cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0);

  19. Буфер памяти • CvMemStorage*storage; - динамически расширяемый буфер памяти. В него пишется перечень найденных лиц. • storage = cvCreateMemStorage(0);- выделение памяти для буфера. • cvReleaseMemStorage(&storage);- освобождение памяти буфера.

  20. Последовательности данных • Последовательности - это самостоятельно связанные списки разных структур. • Единственный вид объекта, который может храниться в хранилище памяти, является последовательность. • В OpenCVпоследовательности описываются структурой CvSeq.

  21. Структура CvSeq typedefstructCvSeq { intflags; // разные флаги intheader_size; // размер заголовка последовательности CvSeq* h_prev; // горизонтально-предыдущая последовательность CvSeq* h_next; // горизонтально-следующая последовательность CvSeq* v_prev; // вертикально-предыдущая последовательность CvSeq* v_next // вертикально-следующая последовательность inttotal; // общее число элементов intelem_size; // размер элемента последовательности в байтах char* block_max; // максимальная граница последнего блока char* ptr; // текущий указатель на запись intdelta_elems; // сколько элементов выделено CvMemStorage* storage; // где хранится последовательность CvSeqBlock* free_blocks; // список свободных блоков CvSeqBlock* first; // указатель на первый блок последовательности }

  22. Доступ к элементам последовательности • char* cvGetSeqElem( seq, index )– возвращает элемент последоваетельности по индексу. • Необходимо делать преобразование типа возвращаемого значения к типу данных в зависимости от хранимых типов в последовательности. • Пример получение данных из последовательности for( int i=0; i<seq->total; ++i ) { CvPoint* p = (CvPoint*)cvGetSeqElem ( seq, i ); }

  23. Выделение контуров • Для выделения контуров в OpenCVсуществует несколько функций для оконтуривания • cvThreshold – бинаризует изображение • cvLaplace – вычисляет производную от изображения и находит локальные экстремумы • cvSobel– вычисляет оператор собеля • cvCanny – вычисляет фильтр кени

  24. Поиск контуров на изображении • intcvFindContours(CvArr* image,CvMemStorage* storage,CvSeq** first_contour,intheader_size=sizeof(CvContour),int mode=CV_RETR_LIST,int method=CV_CHAIN_APPROX_SIMPLE,CvPoint offset=cvPoint(0,0) );-производит поиск контуров и записывает их в хранилище последовательности

  25. Отрисовка контуров • void cvDrawContours(CvArr *img,CvSeq* contour,CvScalarexternal_color,CvScalarhole_color,intmax_level,int thickness=1,intline_type=8,CvPoint offset=cvPoint(0,0));- отрисовывает контуры записанные в последовательность

More Related