我正在开发需要校正从移动相机平台拍摄的图像的应用程序。该平台可测量横滚,俯仰和偏航角,我想通过此信息的某种转换使其看起来像是直接从上方拍摄的图像。
换句话说,我希望将一个平整的正方形平放在地面上,并从远处以某种相机方向拍摄,然后进行变换,以使正方形在以后完全对称。
我一直在尝试通过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参数解决?任何帮助将不胜感激!