2015-12-02 5 views
0

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

Изображения:

Image 1 and Image 2 concatenated

Мой процесс выглядит следующим образом:

  • Функция обнаружения на обоих изображениях (ОРБ)
  • корреляции Matching с помощью грубой силы (Хэмминга)
  • Оценка RANSAC для получения матрицы гомографии
  • Искривление второго изображения на матрице гомографии

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

Red frame shows image 1, blue frame shows image 2

Это выглядит правильно. Теперь у меня проблема, это смешение. Я хочу использовать перьевое смешение, но результаты, которые я получаю, совершенно ошибочны. Я пробовал следующий код, где img1 - это cv :: Mat первого изображения, а img2Warped - это cv :: Mat второго изображения после деформирования по матрице H, finalImg - пустой cv :: Mat.

auto blender = detail::Blender::createDefault(detail::Blender::FEATHER, true); 

auto combinedCorners = std::vector<Point>{ image1Corners[0], image2Corners[0] }; 
auto combinedSizes = std::vector<cv::Size>{ image1Size, image2Size }; 

blender->prepare(combinedCorners, combinedSizes); 

img1.convertTo(img1, CV_16SC3); 
img2Warped.convertTo(img2Warped, CV_16SC3); 

blender->feed(img1, Mat::ones(img1.size(), CV_8U), image1Corners[0]); 
blender->feed(img2Warped, Mat::ones(img2Warped.size(), CV_8U), image2Corners[0]); 

blender->blend(finalImg, Mat()); 

Этот код производит следующий вывод:

Incorrect blend

Может кто-нибудь посоветовать, где я собираюсь плохого смешивания? Я не могу найти какие-либо примеры или помочь в Интернете, используя технику смешивания, которую я пытаюсь использовать здесь.

+0

Я не знаю, решит ли это вашу проблему или нет, но маска, которую вы проходите, Mat :: ones (img1.size(), CV_8U), должна быть фактически деформирована и маскироваться после поиска шва. Это не все изображения. Перед смешиванием необходимо использовать шовный искатель –

ответ

0

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

Попробуйте подать img2 в блендер вместо img2Warped.

 Смежные вопросы

  • Нет связанных вопросов^_^