Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Определение поворота изображения |
Автор: TheDestroyer 7.3.2012, 22:00 | ||
Здравствуйте! Пытаюсь с помощью 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 9.3.2012, 20:38 |
Update: Запустить пример SURF_Homography.cpp удалось, dll нашел и положил рядом с исполняемым файлом. На основе примера сделал несколько экспериментов, и стало ясно, что методом SURF поиск особенных точек в моем случае неэффективен, либо я его неправильно использую. Предметы, которые надо распознать и повернуть их изображение находятся на однородном фоне, перспективных искажений почти нет, есть в основном поворот. По результатам эксперимента видно, что особенные точки определяются неправильно уже при небольшом повороте. Вопросы следующие: 1. правильно ли применять в данном случае метод SURF и если нет, то какой? 2. Возможно, что задача поиска угла поворота изображения решается по другому (например, с помощью маски), если да, то как? Заранее спасибо за ответы. |
Автор: TheDestroyer 11.3.2012, 22:07 |
Update2: На похожее изображение никак не получается найти пары, так что этот метод применим только для поиска одного и того же объекта. Сейчас ищу другой способ поиска поворота изображения. Поясню задачу, на самом деле изначально есть упрощения/начальные условия: 1. Изображение находится на однородном фоне, перспективных искажений почти нет, есть в основном поворот. 2. Освещение всегда одинаковое 3. Посторонних предметов нет Задача состоит в том, чтобы отличать дефекты на круглых изделиях, на которых нанесен немного выпуклый рисунок. На мой взгляд это выполнимо в 2 этапа: 1. Поворот изображения 2. Сравнение с эталонным изображением Вот бьюсь над первым пунктом. Сейчас кажется, что определение поворота реально решить с помощью контуров, читаю информацию по ним. Возможно есть какой-то известный способ определения поворота? |
Автор: mrgloom 5.4.2012, 09:20 |
это тема скорее относится к алгоритмам |