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

10

Я работаю над проектом сшивания изображений с использованием 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)

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

Да, это то, что я хотел бы сделать b4. Спасибо. SilentButDeadly JC
Привет, я только что обновил ваш вопрос, добавив изображения, посмотреть, если это правильно. Я чувствую, что все испортил. Abid Rahman K

Ваш Ответ

1   ответ
7

Problem 1: но проблема с прошивкой, по-видимому, связана с трансляцией камеры между двумя изображениями. Имея только глобальное гомографическое преобразование, вы никак не сможете идеально наложить 2 изображения. Гомография достаточна только в следующих 2 случаях:

Camera undergoes a pure rotation (no translation) Camera undergoes general motion, but the scene is planar

Тем не менее, ваша сцена довольно плоская (объекты довольно далеко по сравнению с переводом камеры), если не для бутылки. Таким образом, приближение по гомографии все еще может быть достаточно. Вам просто нужно правильно смешать изображения. Для этого сначала нужно найти место для «вырезания». изображения, где есть минимальная разница между двумя изображениями, и применяют (например, лапласианское) смешивание. Для вашей проблемы с камерами, установленными на верхней части автомобиля, это приближение может быть разумным, поэтому вы все равно сможете использовать модель гомографии.

Если гомографии с надлежащим смешиванием недостаточно, вам может понадобиться либо использовать методы трехмерной реконструкции, либо другие методы, которые "расслабляют" требование гомографии. В литературе есть пара работ, которые касаются параллакса во время мозаики. Тем не менее, они значительно сложнее, чем базовые швы.

Problem 2: Да, это можно сделать, если вы уверены, что это совпадение. Однако вы должны убедиться, что эта область перекрытия не слишком мала, иначе вычисленная вами гомография может быть искажена. Похоже, проблема с вашим офисным набором данных связана с переводом камеры.

Наконец, вы можете захотеть немного настроить параметры обнаружения / сопоставления SURF. Особые точки кажутся слегка низкими.

О боже мой ... комментарий выше очень грязный. Я думаю, что лучше ввести те в P.M в YouTube ... SilentButDeadly JC
Спасибо за ваш ответ, но у меня все еще есть несколько вопросов по этому поводу: 1. Что делает "плоским"? ссылаться в контексте? Я немного сбит с толку. 2. "Сначала нужно найти место для" вырезания ". изображения, где есть минимальная разница между двумя изображениями, и применяется (например, лапласианское) смешивание. & quot; Хм ... ты имеешь в виду области перекрытия? 3. Теперь на завершение всего шага уходит около 3 секунд, но в этом эксперименте это заняло 1. Может быть, это из-за фотографий, которые я использовал ... SilentButDeadly JC

Похожие вопросы