我有一架带有向下摄像头和红外感应器的飞行无人机,并且正在为无人机做SLAM的工作。无人机只飞越平面表面。要使用相机馈送和opencv构建无人机环境的地图,您需要从拍摄到的图像(由高度、滚动、俯仰和偏航引入)中删除摄像机的视角,以便图像中的距离是准确的。
我已经研究过openCV的方法,但它们似乎都需要事先对摄像机进行校准,才能使用脚本确定相机的方向。
如果你知道无人机(和摄像机)的方向,有没有任何方法可以可靠地转换图像中的点,使其间距是恒定的?我可以从IMU那里获得无人机方位的数据。
发布于 2018-07-12 23:11:42
不幸的是,无人机的位置和方向不准确会导致你建议的方法上的错误。
相机校准是一个恼人的过程,但如果你想要一个黑匣子解决方案的话,这可能是你最好的选择。
但是如果你想试一试,请看下面我的评论。
您可以应用opencv的warp透视图函数来尝试删除摄像机的透视图,但请注意,有几个强有力的假设,可能不是最好的解决方案:
在这种情况下,您构建了3个转换矩阵来表示:从地面到无人机的转换,从无人机到摄像机的转换,以及通过乘以前两个矩阵从地面到摄像机的转换。
T_{地面到摄像机}=T_{地面到无人机}*T_{无人机到摄像机}
该矩阵的逆可以作为warpPerspective的输入,将像素转换为地面帧。这是一个博客文章,它很好地解释了函数的输入和输出参数。代码是在c++中提供的,但是在python中实现应该相对简单。
发布于 2018-07-12 23:08:47
打开CV的远景转换()函数似乎是合适的,转换一个框架,就像它是从上面使用OpenCV获取的一样这个问题我想回答你的很多问题。对旋转和倾斜的补偿可以编码在3x3矩阵中,以正确地转换图像。
https://stackoverflow.com/questions/51313763
复制相似问题