更新:此确切问题已在StackOverflow中解决。请阅读此处的文章,以获取进一步的说明和可行的解决方案。谢谢!

我正在开发需要校正从移动相机平台拍摄的图像的应用程序。该平台可测量横滚,俯仰和偏航角,我想通过此信息的某种转换使其看起来像是直接从上方拍摄的图像。

换句话说,我希望将一个平整的正方形平放在地面上,并从远处以某种相机方向拍摄,然后进行变换,以使正方形在以后完全对称。

我一直在尝试通过OpenCV(C ++)和Matlab进行此操作,但是我似乎缺少有关如何完成此操作的一些基本信息。尝试了以下方法:

%% Transform perspective
img = imread('my_favourite_image.jpg');
R = R_z(yaw_angle)*R_y(pitch_angle)*R_x(roll_angle);
tform = projective2d(R);   
outputImage = imwarp(img,tform);
figure(1), imshow(outputImage);


其中R_z / y / x是标准旋转矩阵(以度为单位)。

对于某些偏航-旋转,一切正常:

R = R_z(10)*R_y(0)*R_x(0);


给出结果的结果:



如果我尝试将图像绕X轴或Y轴旋转相同的量,我得到的结果如下:

R = R_z(10)*R_y(0)*R_x(10);
,如果我旋转10度,再除以某个大数字,它看起来就可以了。但是话又说回来,这是一个没有任何研究价值的结果:

绕X轴或Y轴旋转会使变换变得疯狂吗?有什么方法可以解决这个问题,而不必除以随机数和其他魔术技巧?这是否可以使用某种Euler参数解决?任何帮助将不胜感激!

#1 楼

解决方案:此确切问题已在StackOverflow中解决。请在此处阅读此帖子,以获取进一步的说明和可行的解决方案。谢谢!