我有一架飞行无人机,配有朝下的摄像头和红外传感器,并且正在为无人机开发 SLAM。无人机只能在平面上飞行。要使用摄像头输入和 opencv 构建无人机环境 map ,您需要从捕获的图像中删除摄像头的视角(由高度、横滚、俯仰和偏航引入),以便图像中的距离准确。
我已经研究过 openCV 的方法,但它们似乎都需要事先校准相机,以便使用脚本确定相机的方向。
如果您知道无人机(和相机)的方向,是否有任何方法可以可靠地变换图像中的点以使间距恒定?我可以从 IMU 获取有关无人机方向的数据。
最佳答案
不幸的是,无人机位置和方向的不准确将导致您建议的方法出现错误。
相机校准是一个烦人的过程,但如果您想要一个黑盒解决方案,这可能是您最好的选择。
但是如果您想尝试一下,请参阅下面我的评论。
您可以应用opencv的扭曲透视功能来尝试消除相机的透视,但请注意,这有几个强有力的假设,可能不是最佳解决方案:
- 您拥有有关无人机位置的完美信息
- 您知道摄像头相对于无人机机身的位置
- 您正在完美平坦的表面上飞行
在本例中,您通过将前两个矩阵相乘来构造 3 个变换矩阵来表示:从地面到无人机的变换、从无人机到相机的变换以及从地面到相机的变换。
T_{地面到相机} = T_{地面到无人机}*T_{无人机到相机}
该矩阵的逆矩阵可用作 warpPerspective 的输入,以将像素转换为地面框架。 This a blog post这很好地解释了函数的输入和输出参数。代码是用 c++ 提供的,但用 python 实现应该相对简单。
关于python - OpenCV 消除机器人相机的视角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51313763/