Сложность со смешиванием двух изображений после расчета гомографии в OpenCV

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

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

Изображение 1 и изображение 2 объединены

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

  • Обнаружение признаков на обоих изображениях (ORB)
  • Корреляционное сопоставление с использованием грубой силы (Хемминг)
  • Оценка RANSAC для создания матрицы гомографии
  • Деформация второго изображения матрицей гомографии

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

Красная рамка показывает изображение 1, синяя рамка показывает изображение 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());

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

Неверная смесь

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


person AlexB    schedule 02.12.2015    source источник
comment
я не знаю, решит ли это вашу проблему или нет, но маска, которую вы передаете Mat::ones(img1.size(), CV_8U), на самом деле должна быть деформирована и маскироваться после поиска шва. Это не все изображения. Вы должны использовать поиск шва перед смешиванием   -  person Garvita Tiwari    schedule 03.10.2016


Ответы (1)


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

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

person alexisrozhkov    schedule 12.12.2015