我正在尝试使用牛津机器人汽车数据集的图像创建汽车周围的360度鸟瞰图。我已经能够使用由数据集提供的Python SDK中的相机模型演示和消除扭曲的图像,但我仍然坚持为我的图像找到正确的目的地和源点,以进行反向透视映射。
摄像机设置包括一台1280 × 960分辨率、66度HFoV的点灰大黄蜂XB3三目立体摄像机,以及三台1024 × 1024分辨率、11.1 Hz帧率、180度HFoV的点灰Grasshopper2单目摄像机。单眼相机有一个2.67毫米鱼眼镜头,而立体相机有一个3.8毫米镜头。
与汽车相关的摄像头位置如图所示:https://i.stack.imgur.com/qlmUD.png
我有来自每个相机的未失真图像,并且我有关于每个相机的内在参数的以下信息:
Mono左:
Focal Length: (400.0, 400.0)
Principal Point: (500.107605, 511.461426)
Mono正确的:
Focal Length: (400.0, 400.0)
Principal Point: (502.503754, 490.259033)
Mono后方:
Focal Length: (400.0, 400.0)
Principal Point: (508.222931, 498.187378)
立体中心:
Focal Length: (964.828979, 964.828979)
Principal Point: (643.788025, 484.40799)
我已经尝试使用getPerspectiveTransform从OpenCV,但我不能正确选择源和目的点。
谁能给我提供指导,如何选择正确的点进行反向透视映射,以实现我的目标,创建一个360度鸟瞰汽车周围的分辨率为800x800?
不失真的是,模拟"如果理想针孔摄像机位于鱼眼摄像机所在的位置,针孔摄像机捕捉到什么图像?"这里,两个摄像头的位置是一样的,但是方向呢?
如果将虚拟针孔相机的方向设置为垂直向下,则生成的图像将成为"鸟瞰图"。
你应该做的是投射所有的"鸟瞰图";从4个摄像机到单个公共平面(例如地平面)的图像。
一般来说,对于这样的图像翘曲过程,计算的内容是颠倒的。(方向变成从结果到输入)。因此,对于800x800结果图像中的每个像素,您需要计算鱼眼图像上对应于结果像素位置的位置。
。考虑800x800分辨率的地平面图像,对于该图像的每个像素,计算光线方向(像素的3D位置到相机位置),然后根据相机参数计算投影(从光线方向到鱼眼相机图像像素)。