Я работаю над инструментом сшивания, используя OpenCV и CUDA, в настоящее время просто пытаюсь сшить два перекрывающихся изображения.
Изображения:
Мой процесс выглядит следующим образом:
- Обнаружение признаков на обоих изображениях (ORB)
- Корреляционное сопоставление с использованием грубой силы (Хемминг)
- Оценка RANSAC для создания матрицы гомографии
- Деформация второго изображения матрицей гомографии
Я очень рад, что правильно выполнил эти шаги, используя opencv для рисования черного изображения, а затем рисуя кадры двух изображений после того, как этот процесс дает следующий результат:
Это выглядит примерно правильно. То, с чем у меня сейчас проблема, это смешивание. Я хочу использовать смешивание перьев, но результаты, которые я получаю, совершенно неверны. Я пробовал следующий код, где 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());
Этот код производит следующий вывод:
Может ли кто-нибудь посоветовать, где я ошибаюсь при смешивании? Я не могу найти никаких примеров или помощи в Интернете, используя технику смешивания, которую я пытаюсь использовать здесь.