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

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

У меня сейчас 2 проблемы.

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

Я следовал за шагами, упомянутыми в следующей ссылке Сшиваем 2 изображения в opencv

Finding SURF features in both images and match them Removing outliers with RANSAC Computing Homography Warping the target image to the reference image

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

Два изображения сделаны с помощью камерыat the same position but in different direction(Я использовал штатив).

enter image description here

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

enter image description here

Problem1:**Does it mean that **if the 2 cameras are at different positions, the standard panorama stitching technique (based on a homography or camera rotational model) won't work?

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

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

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

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

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

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

    int minHessian = 3000;

    SurfFeatureDetector detector( minHessian );
    vector<KeyPoint> 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 );

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос