Поиск объектов на изображении при помощи OpenCV

Нахождение дескриптора. Изучение детерменированных блоков, в которых вычисляется доминирующее градиентное направление, магнитуда. Использование гомографии. Алгоритм RANSAC в основе которого лежит итеративная оценка гомографии для случайно выбранных точек.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 08.04.2021
Размер файла 267,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное государственное автономное

образовательное учреждение

высшего образования

«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Институт математики и фундаментальной информатики

Базовая кафедра вычислительных и информационных технологий

Отчет о практике по получению профессиональных умений и опыта профессиональной деятельности

Поиск объектов на изображении при помощи OpenCV

Руководитель __________ Баранов С.Н.

подпись, дата

Студент ИМ19-06, 171942577 __________ Смирнов И.Б.

номер группы, зачетной книжки подпись, дата

Красноярск 2020

Содержание

  • Постановка задачи
  • Введение
  • Решение задачи
  • Список использованных источников

Постановка задачи

На вход подается изображение полки с объектами и изображение целевого плоского объекта (например книга). Задача: найти целевой объект на входном изображении.

Введение

OpenCV - библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом.

Для реализации поставленной задачи будем использовать h файлы core.hpp и opencv.hpp, отвечающие за базовые классы opencv и features2d.hpp, -- определяющий классы различных детекторов и дескрипторов (нас будет интересовать SURF).

#include <iostream>

#include "opencv2/opencv.hpp"

#include "opencv2/core/core.hpp"

#include "opencv2/nonfree/features2d.hpp"

#include <vector>

using namespace std;

using namespace cv;

void readme(string &message) { cout << message << endl; }

Далее начинается тело main, будем считать, что к исполняемому файлу мы передаем 1 параметр, -- путь к картинке образцу (плоскому объекту). Конструктор класса VideoCapture принимает на вход номер девайса (камеры), 0 -- устройство по умолчанию (вероятно встроенная камера). Далее считывается целевая картинка в img_object.

int main( int argc, char** argv )

{ if(argc != 2) {

string message = "Использование: ./cv_test <img_object>";

readme(message); return -1;

}

VideoCapture cap(1); // Открыть камеру (устройство 1). Для открытия встроенной камеры вызывать 0 устройство.

if(!cap.isOpened()) // Проверка корректности отработки {

string message = "Проверьте камеру или укажите другой номер устройства в коде";

readme(message); return -1;

}

Mat img_object = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );

В бесконечном цикле будем получать очередной кадр с устройства, это есть входное изображение сцены, в которой надо найти целевой объект.

for(;;) {

Mat frame;

cap >> frame; // Получить очередной фрейм из камеры Mat img_scene = frame; if( !img_object.data || !img_scene.data ) // Проверка наличия информации в матрице изображения

{

string message = " Ошибка чтения ";

readme(message);

}

Решение задачи

Нахождение дескриптора - дескриптор, вектор кодирующий геометрию локальной окрестности вокруг точки. В основе этого, как правило, лежит SIFT (SURF это быстрый SIFT). Принцип тут следующий:

Патч вокруг данной точки разбивается на детерменированные блоки, в каждом блоке вычисляется доминирующее градиентное направление и магнитуда + осуществляется поворот в сторону доминирующего направления (инвариантность к повороту). Данный «градиентный рисунок» описывает локальный патч.

SurfDescriptorExtractor extractor;

Mat descriptors_object, descriptors_scene;

extractor.compute( img_object, keypoints_object, descriptors_object );

extractor.compute( img_scene, keypoints_scene, descriptors_scene );

Сравнение дескрипторов - на следующем этапе мы должны «сматчить» вектора дескрипторов, т.е. найти соответствующие точки на целевом объекте и в сцене. Для этой цели можно использовать FlannBasedMatcher (его следует использовать для больших наборов ключевых точек) или BruteForceMatcher (наоборот). Далее мы отбираем из всех сматченных точек только те, расстояние между дескрипторами которых не более 3 * min_dist, где min_dist -- минимальное расстояние между дескрипторами.

FlannBasedMatcher matcher;

vector< DMatch > matches;

matcher.match( descriptors_object, descriptors_scene, matches );

double max_dist = 0; double min_dist = 100; //-- Вычисление максимального и минимального расстояния среди всех дескрипторов // в пространстве признаков

for( int i = 0; i < descriptors_object.rows; i++ ) {

double dist = matches[i].distance;

if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; }

printf("-- Max dist : %f \n", max_dist );

printf("-- Min dist : %f \n", min_dist ); //-- Отобрать только хорошие матчи, расстояние меньше чем 3 * min_dist

vector< DMatch > good_matches;

for( int i = 0; i < descriptors_object.rows; i++ ) {

if( matches[i].distance < 3 * min_dist ) {

good_matches.push_back( matches[i]);

} детерменированный гомография ransac градиентный

}

Mat img_matches; //-- Нарисовать хорошие матчи

drawMatches( img_object, keypoints_object, img_scene, keypoints_scene, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );

Использование гомографии - В компьютерного зрении любые два изображения одного и того же плоского объекта в пространстве связаны гомографией (если мы используем pin-hole модель камеры). Иными словами это преобразование плоскость -- плоскость. Т.е. имея набор точек на целевом объекте и сопоставленный ему набор точек в сцене мы можем найти между ними соответствие в виде матрицы гомографии H (и наоборот соответственно). В основе нахождения этого преобразования лежит алгоритм RANSAC в основе которого лежит итеративная оценка гомографии для случайно выбранных точек.

//-- Локализация объектов

vector<Point2f> obj;

vector<Point2f> scene;

for( int i = 0; i < good_matches.size(); i++ ) {

obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt );

scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt );

}

Mat H = findHomography( obj, scene, CV_RANSAC );

Далее необходимо взять 4 точки по краям целевого объекта и отобразить их с помощью найденного преобразования на изображении сцены. Таким образом, мы найдем bounding box объекта в сцене. Заметьте, что при рисовании линий, к каждой точке мы прибавляем Point2f( img_object.cols, 0), т.к. изображение img_matches предполагает смежное размещение картинки целевого объекта (слева) и сцены (справа).

//-- Получить "углы" изображения с целевым объектом

std::vector<Point2f> obj_corners(4);

obj_corners[0] = cvPoint(0,0);

obj_corners[1] = cvPoint( img_object.cols, 0 );

obj_corners[2] = cvPoint( img_object.cols, img_object.rows );

obj_corners[3] = cvPoint( 0, img_object.rows );

std::vector<Point2f> scene_corners(4); //-- Отобразить углы целевого объекта, используя найденное преобразование, на сцену

perspectiveTransform( obj_corners, scene_corners, H); //-- Соеденить отображенные углы

line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 );

line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );

line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );

line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); //-- Show detected matches

imshow( "Good Matches & Object detection", img_matches );

if(waitKey(30) >= 0) break;

} //-- Конец основного цикла обработки

Список использованных источников

1. SURF: Speeded Up Robust Features: https://people.ee.ethz.ch/~surf/eccv06.pdf

2. Planar homographies: http://www.sci.utah.edu/~gerig/CS6640-F2010/tutorial2-homographies.pdf

Размещено на Allbest.ru

...

Подобные документы

  • Существующие методы нахождения графических примитивов и программных реализаций. Базовое преобразование Хафа: поиск прямых, выделение окружностей на изображении, нахождение кривых высшего порядка. Составление руководства программиста и пользователя.

    курсовая работа [2,7 M], добавлен 20.03.2012

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

    дипломная работа [3,1 M], добавлен 27.06.2012

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

    курсовая работа [669,9 K], добавлен 20.05.2017

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

    курсовая работа [818,3 K], добавлен 31.01.2012

  • Поиск в массивах и списках, ключ и произвольные данные. Линейный (последовательный) поиск. Бинарный поиск в упорядоченном массиве. Алгоритм Рабина-Карпа, простая и улучшенная хэш-функция. Алгоритм Бойера-Мура со сдвигом по стоп-символам и по суффиксам.

    презентация [1,5 M], добавлен 19.10.2014

  • Использование номеров индексных дескрипторов для обозначения файлов в программах для системных администраторов в операционной системе UNIX. Описание индексного дескриптора в POSIX. Адрес индексного дескриптора в записи директории, относящейся к файлу.

    контрольная работа [31,7 K], добавлен 18.06.2014

  • Определение понятия трехмерной компьютерной графики. Особенности создания 3D-объектов при помощи булевых операций, редактируемых поверхностей, на основе примитивов. Моделирование трехмерных объектов при помощи программного пакета Autodesk 3ds Max.

    дипломная работа [4,2 M], добавлен 13.04.2014

  • Метод главных компонент. Процесс распознавания. Ковариационная матрица, диагональная матрица собственных чисел. Использовании метрики Махаланобиса и Гауссовского распределения для оценки близости изображений. Входные вектора. Библиотека OpenCV.

    статья [22,1 K], добавлен 29.09.2008

  • Методика сериализации объектов и её практическое применение. Клонирование объектов при помощи сериализации. Обработка действий мыши и клавиатуры. Изучение классов Menu, MenuBar, MenuItem, Dialog, FileDialog пакета java.awt, использование таблиц.

    лабораторная работа [180,8 K], добавлен 30.06.2009

  • Правила монтирования и демонтирования файловых систем на диске. Описание полей файла /etc/fstab. Создание суперблока, таблицы индексного дескриптора, совокупности блоков данных. Строение и структура описания группы блоков. Система адресации данных.

    презентация [143,1 K], добавлен 20.12.2013

  • Анализ проблем, решаемых при помощи итерации. Изучение жизненного цикла разработки информационных систем и автоматизации. Дисциплины жизненного цикла IBM Rational Unified Process. Особенности внедрения процессов и инструментальных средств в организации.

    реферат [751,0 K], добавлен 05.10.2012

  • Численные методы в задачах без ограничений. Схема методов спуска. Среда редактора Visual Basic. Использование объектов ActiveX в формах. Блок-схема алгоритма моделирования. Задачи оптимизирования детерменированных функций с единственной точкой экстремума.

    курсовая работа [129,5 K], добавлен 26.04.2010

  • Задача локализации проекции шаблона на изображении. Свойства биномиального распределения. Определение проекций опорных точек в области локализации. Понижение разрешения и дифференцирование локализованного изображения. Поиск вероятных приближенных решений.

    дипломная работа [3,5 M], добавлен 06.11.2011

  • Поиск корня алгебраического уравнения. Формирование графических объектов на основе "Диаграмма Microsoft Graph". Системы линейных алгебраических уравнений. Алгоритм формирования и копирования матриц для вычисления определителей, вектора решения СЛАУ X.

    контрольная работа [991,1 K], добавлен 11.05.2009

  • Алгоритм декомпозиции графов и расчеты динамики логических сетей. Преобразование пространства булевых векторов. Описание блоков программной реализации и их взаимодействие. Разработка программы "слияния" статистик на основе алгоритма объединения.

    дипломная работа [111,8 K], добавлен 07.03.2012

  • Использование алгоритмов машинной графики для разработки модели прозрачных и отражающих объектов. Визуальная оценка реалистичности изображения, эффектов отражения и преломления. Поиск отраженного и преломленного лучей. Описание интерфейса программы.

    курсовая работа [1,6 M], добавлен 04.06.2013

  • Алгоритм реализации векторного пространства, метод фильтрации шумов на изображении. Формально-логическая модель разработки программного обеспечения, выбор инструментальных средств его реализации. Анализ точности совпадения распознанного изображения.

    дипломная работа [2,7 M], добавлен 13.02.2013

  • Состав DЕLPHI проекта. Алгоритм сортировки вектора. Метод сортировки файла. Сценарий интерфейсного диалога пользователя с программой. Поиск и вычисление времени, затраченного на поиск и сортировку. Исходный текст модуля Project.dpr, MainForm.pas.

    курсовая работа [827,4 K], добавлен 07.11.2010

  • Определение и описание "генетического алгоритма", идея которого состоит в организации эволюционного процесса, конечной целью которого является получение оптимального решения в сложной комбинаторной задаче. Пример его тривиальной реализации на C++.

    контрольная работа [172,1 K], добавлен 24.05.2010

  • OpenCV – библиотека компьютерного зрения с открытым исходным кодом, предоставляющая набор типов данных, функций и численных алгоритмов для обработки изображений. Ее реализация на C/C++. Цели использования технологии. Основные модули библиотек 1-3.

    презентация [121,8 K], добавлен 14.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.