从图像确定玩具直升机的方向

信息处理 图片 图像处理 opencv
2022-01-12 02:36:18

我正在使用网络摄像头和带有一些红外 LED 的 Arduino 为玩具红外遥控直升机(例如 Syma s107)开发自主控制系统。我在以大约 2Ghz 运行的笔记本电脑上使用 C++ 和 OpenCV,我需要使系统尽可能接近实时。

我不确定一种方法可以有效地确定直升机在 2D 图像中的旋转(更准确地说,它相对于相机图像平面的偏航)。这些信息对于稳定屏幕中的直升机很重要,否则它会飘出视野。

我已经考虑过,并且至少部分尝试确定身体和尾巴的位置,并使用几何和透视的一些技巧来估计形状,但准确地找到具有足够低噪音的尾巴和身体被证明是困难的。我还考虑在直升机的某些位置使用某种彩色标记,但我不确定如何获得比大约左侧和大约右侧更准确的估计。

3个回答

对于偏航,将三个不同的数据点固定在直升机上与旋翼旋转平行的平面上就足够了:例如,不同颜色的 LED。您可以将它们放在固定在起落架上的三个细径向臂上。也许彩色反光材料也可以,但你必须补偿环境光的变化。

然后获得偏航角很简单。假设从顶部看时,红、绿、蓝三灯相隔 120 度,逆时针方向。

在此处输入图像描述

然后在图像中,您将看到这些灯以各种 x 坐标顺序排列。当直升机从图中所示位置逆时针旋转时:

G R B   // green and blue in front; red in back
R G B   // green in front; red and blue in back
R B G   // red and gree in front; blue in back
B R G   // etc...
B G R
G B R

(当然,在这些区域的边界,两盏灯会合并为一个点。这些可以作为特殊情况处理。)

因此,使用 3 盏灯,您可以将所有可能的偏航分成 6 x 60 度的段。

通过比较左右“间隙”宽度,您可以进一步降低 30 度分辨率。如果直接远离相机的方向是方位角 theta 零度并且红灯在鼻子上(如图所示),那么算法是:

Xr = -sin(theta)
Xg = -sin(theta + 60)
Xb = -sin(theta + 120)
if (Xg < Xr && Xr <= Xb) {
  // Green and blue are in front of red
  dxLeft = Xr - Xg
  dxRight = Xb - Xr
  yaw = (dxLeft < dxRight) ? 15+-15 : -15+-15;
}
else if (Xr < Xg && Xg < Xb) {
  // Green is in front of red and blue
  dxLeft = Xg - Xr
  dxRight = Xb - Xg
  yaw = (dxLeft < dxRight) ? 30+-15 : 60+-15;
}
else ... four more cases

以上X+-15平均X度数正负15:30度段。要获得确切的偏移量,您可以构建一个转换比率的预处理表

R = dxLeft < dxRight ? xLeft / xRight : xRight / xLeft

到 -15 和 15 之间的精确方位角偏移。这是一个非常简单的三角函数,它的工作原理与直升机的距离无关,只要它永远不会倒转!

另一个好处:外部两个灯之间的图像距离使您与相机的距离成反比。

标记的想法可能会奏效。

 ___ ___                ___  ___ 
  m | m                  m /  m
    |                     /   
    +                    +   
    |                   /   
    |                  /   
 --- ---           --- --- 


   \ /                   \ /        
    c                     c   

想象一下在直升机的远端放置标记并在近端挡住它们。当直升机旋转时,靠近一侧的标记将暴露在相机上。

直升机的完整位置和方向可以通过以下方式计算:平面上的 4 个已知点 + 校准相机,或使用 6 个已知点(某些 3D 配置将不起作用,例如这些点不能在同一平面上)。请参阅this question for 6 point algorithm,对于 4 point algorithm 我发现 Liljequist 的硕士论文 - 平面、同形异义和增强现实非常有用,但我无法在线找到它。Zhang - A Flexible New Technique for Camera Calibration 撰写了更多专注于校准的简洁论文。

关于该主题的好书:Hartley, Zisserman - 计算机视觉中的多视图几何。