![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
TheDestroyer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Здравствуйте!
Пытаюсь с помощью OpenCV 2.3.1 на VC 2010 определить поворот изображения относительно эталонного и повернуть это изображение правильно. На сколько я понимаю, надо определить матрицу гомографии с помощью findHomography, затем опрелелить угол поворота с помощью getAffineTransform, затем повернуть с помощью warpAffine. Вот код:
Проблема: функция Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() ) принимает в качестве параметров массивы точек, которые надо найти, как я понимаю методом SURF или SIFT. [url=http://opencv.itseez.com/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method, double ransacReprojThreshold, OutputArray mask)]Ссылка на мануал по OpenCV[/url] Для этого используется функция SurfFeatureDetector..., нашел в примере SURF_Homography.cpp, но во-первых этот пример не запускается, т.к. нет библиотеки opencv_calib3d231.dll, а во-вторых непонятно как в итоге получить массивы точек, которые потом передать в findHomography. Подскажите, пожалуйста, как правильно определить поворот картинки относительно эталона и затем повернуть ее? |
|||
|
||||
TheDestroyer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Update:
Запустить пример SURF_Homography.cpp удалось, dll нашел и положил рядом с исполняемым файлом. На основе примера сделал несколько экспериментов, и стало ясно, что методом SURF поиск особенных точек в моем случае неэффективен, либо я его неправильно использую. Предметы, которые надо распознать и повернуть их изображение находятся на однородном фоне, перспективных искажений почти нет, есть в основном поворот. По результатам эксперимента видно, что особенные точки определяются неправильно уже при небольшом повороте. Вопросы следующие: 1. правильно ли применять в данном случае метод SURF и если нет, то какой? 2. Возможно, что задача поиска угла поворота изображения решается по другому (например, с помощью маски), если да, то как? Заранее спасибо за ответы. |
|||
|
||||
TheDestroyer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Update2:
На похожее изображение никак не получается найти пары, так что этот метод применим только для поиска одного и того же объекта. Сейчас ищу другой способ поиска поворота изображения. Поясню задачу, на самом деле изначально есть упрощения/начальные условия: 1. Изображение находится на однородном фоне, перспективных искажений почти нет, есть в основном поворот. 2. Освещение всегда одинаковое 3. Посторонних предметов нет Задача состоит в том, чтобы отличать дефекты на круглых изделиях, на которых нанесен немного выпуклый рисунок. На мой взгляд это выполнимо в 2 этапа: 1. Поворот изображения 2. Сравнение с эталонным изображением Вот бьюсь над первым пунктом. Сейчас кажется, что определение поворота реально решить с помощью контуров, читаю информацию по ним. Возможно есть какой-то известный способ определения поворота? |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
это тема скорее относится к алгоритмам
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |