OpenCv 3d сшивка панорамы

У меня есть 7 изображений от gopro (5 камер в буровой установке и одна сверху и одна снизу, все они камеры gopro). Я хочу сшить все эти изображения вместе, чтобы создать 3D-панораму. Мне удалось сшить 5 изображений в Rig с помощью opencv-stitching_detailed.cpp. Ссылка на файл:

https://raw.githubusercontent.com/opencv/opencv/master/samples/cpp/stitching_detailed.cpp

Но я не знаю, как сшить верх и низ (для меня сейчас низ не так важен, но я должен что-то сделать с верхом). Любая идея, как это можно сделать? Пожалуйста, дайте мне знать, могу ли я использовать тот же файл stitching_detailed.cpp для сшивания сверху.

Следующая ссылка содержит изображения, которые я использую. Он также содержит результаты, которые я получил от сшивания изображений в риге.

https://drive.google.com/folderview?id=0B_Bl8s2ePunQcnBaM3A4WDlDcXM&usp=sharing


person Ahmad.Masood    schedule 01.09.2016    source источник
comment
Этот код сшивки сшивает все изображения (горизонтальные и вертикальные), если их достаточно. Возможно, верхнее и нижнее изображения не имеют много перекрывающихся областей и элементов для сшивания. Можете ли вы дать мое изображение, которое вы используете?   -  person Garvita Tiwari    schedule 01.09.2016
comment
Я добавил ссылку на изображения, которые я использую.   -  person Ahmad.Masood    schedule 01.09.2016
comment
На самом деле я должен сделать это программно. Мне нужно склеивать видео в реальном времени. Это всего лишь один кадр из видео.   -  person Ahmad.Masood    schedule 02.09.2016


Ответы (1)


Итак, сначала вам нужно понять, как работает сшивание_detailed.cpp. 1. В каждом изображении определяется ключевая точка с использованием SURF/ORB/SIFT или около того. Затем для каждой пары изображений находятся наилучшие совпадения признаков, вычисляется матрица гомографии и получается количество вставок для каждой пары.

(*finder)(img, features[i]); 


 BestOf2NearestMatcher matcher(try_cuda, match_conf);
 matcher(features, pairwise_matches);
  1. Все эти пары передаются в leaveBiggestComponent для получения наибольшего набора изображений, принадлежащих панораме.

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

шаг 1 найдет гомографию для каждой пары и сгенерирует количество вставок. Шаг 2 удалит все те пары изображений, для которых фактор достоверности (количество вставок) меньше порогового значения. Поскольку cam7 img имеет меньше функций и почти не перекрывает области с любым другим изображением, оно будет отклонено на шаге leavebiggestcomponent.

Вы можете увидеть функции и mtaching по этой ссылке (я использовал orbfeatures)

https://drive.google.com/open?id=0B2wDitsftUG9QnhCWFIybENkbDA

Также я не изменил размер изображения, но я думаю, что небольшое уменьшение размера изображения (возможно, вдвое) даст больше характеристик.

Что вы можете сделать, так это уменьшить временной интервал, в котором вы берете кадр для сшивания. Для получения хороших результатов между изображениями должно быть не менее 40% перекрывающихся областей.

person Garvita Tiwari    schedule 02.09.2016
comment
Большое спасибо за этот подробный ответ. На самом деле я использовал PRO7 Bullet360, чтобы сделать эти изображения. Ссылка: shop.360rize.com/PRO7-360-VIDEO- VR-p/pro7e.htm. Есть одна вещь, которую я хотел спросить: если я хочу уменьшить это пороговое значение, чтобы сделать какое-то принудительное сшивание, чтобы изображение 7 не было удалено, есть ли способ сделать это? - person Ahmad.Masood; 02.09.2016
comment
И еще один момент. Вы предполагаете, что этот аппарат не будет работать в такой закрытой среде? - person Ahmad.Masood; 02.09.2016
comment
можно изменить пороговые значения float match_conf = 0.3f; и float conf_thresh = 1.f; но это может привести к некоторой ошибке - person Garvita Tiwari; 02.09.2016
comment
Если вы знаете ориентацию каждой камеры, вы можете напрямую передать матрицу вращения камеры камерам.R из приведенного выше кода. - person Garvita Tiwari; 02.09.2016