Некоторые проблемы при сшивке изображений — омография?

Я работаю над проектом сшивки изображений с использованием OpenCV 2.3.1 в Visual Studio 2010.

Я В настоящее время у меня проблемы 2.

(Моя репутация не выше 10, поэтому я могу опубликовать только 2 гиперссылки в этом посте. Я опубликую еще 2 в области комментариев)

Я выполнил шаги, указанные ниже. связь Сшивание 2 изображений в opencv

  1. Поиск функций SURF на обоих изображениях и их сопоставление
  2. Удаление выбросов с помощью RANSAC
  3. Вычисление гомографии
  4. Преобразование целевого изображения в эталонное изображение

и изображение ниже вот результат, который у меня сейчас есть:

Два изображения сделаны с помощью камеры в одном и том же месте, но в разных направлениях(я использовал штатив).

enter image description here

Затем я попробовал еще один тест. На этот раз я все еще делаю 2 изображения, используя одну и ту же камеру. Однако я немного отодвинул камеру от исходного положения и сделал второй снимок.Результат довольно ужасен, как показано:

enter image description here

Проблема 1: ** Означает ли это, что ** если 2 камеры находятся в разных положениях, стандартная техника сшивания панорамы (основанная на гомографии или модели вращения камеры) не будет работать?

Я попытался сшить изображения, сделанные в разных положениях, так как в будущем я хотел бы реализовать алгоритм сшивания на 2-х камерах в разных положениях, чтобы расширить поле зрения, вроде этого :(Я опубликую картинку в комментарии, пожалуйста, проверьте Расширить FOV)

но теперь похоже, что я иду не в ту сторону :(.


Я просто обнаружил, что во время работы алгоритма поиск и сопоставление признаков занимает большую часть времени.

Проблема 2:Могу ли я просто вычислить признаки в определенной части (области перекрытия) двух изображений и при этом выполнить преобразование с использованием гомографии ? т. е. НЕ вычислять все изображение.

Я думаю таким образом, потому что считаю, что нет необходимости вычислять особенности всего изображения, если я укажу величину области перекрытия между двумя изображениями. Если бы я мог просто вычислить и сопоставить объекты в области перекрытия, это должно значительно увеличить скорость.

Первый код, показанный ниже, является исходным кодом, который вычисляет признаки для всех изображений.

    int minHessian = 3000;

    SurfFeatureDetector detector( minHessian );
    vector keypoints_1, keypoints_2;

    detector.detect( frm1, keypoints_1 );
    detector.detect( frm2, keypoints_2 );

    //-- Calculate descriptors (feature vectors)  
    SurfDescriptorExtractor extractor; ///

    Mat descriptors_1, descriptors_2;

    extractor.compute( frm1, keypoints_1, descriptors_1 );
    extractor.compute( frm2, keypoints_2, descriptors_2 );

Я сделал следующее, чтобы попытаться сократить время, необходимое для запуска всего алгоритма:

    //detector.detect( frm1(Rect(0.5*frm1.cols,0,0.5*frm1.cols,frm1.rows)), keypoints_1 );
    //detector.detect( frm2(Rect(0,0,0.6*frm2.cols,frm2.rows)), keypoints_2 );

    //-- Calculate descriptors (feature vectors)
    SurfDescriptorExtractor extractor; ///

    Mat descriptors_1, descriptors_2;

    extractor.compute( frm1(Rect(0.5*frm1.cols,0,0.5*frm1.cols,frm1.rows)), keypoints_1, descriptors_1 );
    extractor.compute( frm2(Rect(0,0,0.6*frm2.cols,frm2.rows)), keypoints_2, descriptors_2 );

Используя приведенный выше код, время вычислений значительно сократилось, но дало плохой результат: (Я опубликую изображение в комментарии, пожалуйста, проверьте Плохой результат )

В настоящее время застрял и понятия не имею, что делать дальше. Очень надеюсь и ценю любую помощь. Спасибо.

10
задан Community 23 May 2017 в 12:19
поделиться