我有一个带有向下摄像头和一个红外传感器的飞行无人机,并且正在为该无人机开发SLAM。无人机只能在平面上飞行。要使用摄像头源和opencv绘制无人机环境图,您需要从捕获的图像(由高度,侧倾,俯仰和偏航引入)中删除摄像头的透视图,以便图像中的距离准确。
我已经通过openCV的方法进行了研究,但是它们似乎都需要事先对摄像机进行校准,才能使用脚本确定摄像机的方向。
如果您知道无人机(和摄像机)的方向,是否有任何方法可以可靠地变换图像中的点,从而使间距恒定?我可以从IMU访问有关无人机方向的数据。
答案 0 :(得分:2)
不幸的是,无人机的位置和方向不正确会导致您建议的方法出现错误。
相机校准是一个烦人的过程,但是如果您想要一个黑盒解决方案,那可能是最好的选择。
但是,如果您想尝试一下,请在下面查看我的评论。
您可以应用opencv的warp透视图功能来尝试删除相机的透视图,但是请注意,这里有几个强有力的假设,可能不是最佳解决方案:
在这种情况下,您构建3个变换矩阵来表示:从地面到无人机的变换,从无人机到摄像机的变换以及通过将前两个矩阵相乘从地面到摄像机的变换。
T_ {地面到摄像机} = T_ {地面到无人机} * T_ {无人机到摄像机}
此矩阵的逆可以用作warpPerspective的输入,以将像素转换为地面帧。 This a blog post很好地解释了功能输入和输出参数。该代码以c ++提供,但在python中应该相对简单易行。
答案 1 :(得分:0)
Open CV的Perspectivetransform()函数似乎很合适,Transform a frame to be as if it was taken from above using OpenCV 我认为这个问题回答了您的很多问题。旋转和倾斜补偿可以编码在3x3矩阵中,以正确变换图像。