Я пытаюсь сшить изображения вместе, рассчитывая гомографию между каждым изображением, а не используя класс openCV Stitcher.
У меня есть 4 изображения и я предварительно рассчитываю гомографию между всеми изображениями.
H_12 = //homography between image 1 and image 2
H_23 = //homography between image 2 and image 3
et c ...
Однако у меня есть некоторые проблемы с правильной деформацией изображений на основе гомографии. Это следующие шаги:
Шаг 1: Создайте холст, на который будут деформированы все изображения.
Шаг 2: Деформируйте изображения на основе расчета гомографии.
Шаг 3: Получите соответствующие области каждого изображения.
Шаг 4. Скопируйте соответствующую область на холст.
Это мой код:
Mat H_12, H_23, H_34;
//Finding homography between each image
H_12 = Homography(im_1,im_2);
H_23 = Homography(im_2,im_3);
H_34 = Homography(im_3,im_4);
Mat warpImage2;
Mat warpImage3;
Mat warpImage4;
//Canvas where images will be warped onto.
Mat final(Size(im_1.cols*4, im_1.rows*2),CV_8UC3);
//size is defined as the final video size
warpPerspective(im_2, warpImage2, H_12, Size(im_1.cols*2, im_1.rows*2), INTER_CUBIC);
warpPerspective(im_3, warpImage3, (H_23*H_12), Size(im_1.cols*2, im_1.rows*2), INTER_CUBIC);
warpPerspective(im_4, warpImage4, (H_34*H_23*H_12), Size(im_1.cols*2, im_1.rows*2), INTER_CUBIC);
//Getting the relivent (roi) areas of each image.
Mat roi1(final, Rect(0, 0, im_1.cols, im_1.rows));
Mat roi2(final, Rect(0, 0, warpImage2.cols, warpImage2.rows));
Mat roi3(final, Rect(0, 0, warpImage3.cols, warpImage3.rows));
Mat roi4(final, Rect(0, 0, warpImage4.cols, warpImage4.rows));
//Copying relevant area to canvas
warpImage4.copyTo(roi4);
warpImage3.copyTo(roi3);
warpImage2.copyTo(roi2);
im_1.copyTo(roi1);
imwrite("result.png", final);
waitKey(0);
return 0;
В результате получаются стежки первых двух изображений, показанных ниже. Но другие изображения не отображаются.
Однако, если я отображаю все изображения по отдельности, они выглядят правильно деформированными, как показано ниже.
Поэтому я думаю, что, возможно, проблема с отображением искаженных изображений. Любая помощь будет принята с благодарностью!