APP下载

CORDIC算法在天际线识别中的应用

2023-08-26李阳于方春程陶然

电脑知识与技术 2023年20期

李阳 于方春 程陶然

关键词:天际线识别;CORDIC;姿态角;FPGA

中图分类号:TP399 文献标识码:A

文章编号:1009-3044(2023)20-0129-03

0 引言

天际线指天空与地面的分界线,当分割天空和海平面时也称为海天线,天际线的自动识别对无人机飞行姿态控制及校正具有重要的作用。在一般的图像处理中,天际线识别的常用方法包括通过边缘特征进行天际线提取[1-2]、通过统计区域特征识别天际线[3-4]以及基于机器学习识别天际线[5]。对于无人机而言,其飞行姿态将直接影响到飞行视野中的天际线位置,因此可以通过无人机的姿态角结合摄像机的内部参数等计算图像数据中的天际线位置参数,进而识别天际线[6]。

基于姿态角与天际线位置参数关系的理论基础,该理论的核心在于计算姿态角的三角函数值。CORDIC算法是目前公认的求解三角函数较为理想的方法[7]。CORDIC(坐标旋转数字计算机)算法最早是由J.Volder等人在1959年设计美国航空控制系统时提出,支持解决当时航空控制导航系统中三角函数计算的实时性和精度问题[8]。CORDIC算法的基本思想在于采用与运算基数相关的角度进行不断偏摆来逼近所求解的角度,因为这些固定的角度只与计算的基数有关,所以在运算中只需要进行移位和加减运算,是一种运算简单、精度可控、计算效率高的三角函数求解算法[9]。

本文通过在FPGA中实现CORDIC算法解算飞行姿态角三角函数值,依据姿态角与天际线位置参数的关系,计算图像数据中天际线位置参数,最终完成图像数据中的天际线的识别。

1 天际线位置参数与姿态角的关系

一般飞行器上摄像机光轴与飞行器机身是平行的,指向正前方,飞行器的姿态和摄像机的姿态可统一描述。如图1所示,假设摄像机的坐标系为Oxyz,点O是摄像机的光心,飞行器的三个姿态角俯仰角θ、偏航角ψ、横滚角φ,可以分别看作摄像机绕自身的x轴、y 轴、z 轴转动的角度。对于飞行器及摄像机而言,天际线是在无限远处的,在无限远的地方建立世界坐标系,如图1 中为OWXWYWZW。大地平面可以近似成一个圆形平面,在摄像机的视野范围中,天际线可近似为一条直线,P 点是天际线上的一点,P′是天际线通过摄像机的光学系统在图像坐标系uoov 平面上的成像,图像坐标系的单位是像素。

通过飞行器的姿态角和摄像机的内部参数,结合世界坐标系、摄像机坐标系以及图像坐标系之间的转换关系计算图像数据中的天际线位置参数[6]。天际线在图像坐标系uoo v 中的直线方程的斜率和截距与横滚角、俯仰角的关系如式(1) 和(2) 所示:

根据式(1) 和式(2) 可知,天际线在图像中的直线方程的斜率和截距均可通过飞行姿态角的三角函数值及摄像机内部参数描述,因此基于姿态角的天际线识别方法核心在于解算姿态角的三角函数值,该方法相比图像识别方法、边缘提取方法更为直观、简单。

2 基于FPGA 的CORDIC 算法实现

CORDIC 算法全称为坐标旋转数字计算机,CORDIC 算法的运用大大降低了常用三角函数如tan、cos、sin等在硬件上的实现难度,它主要是将复杂的函数在硬件上通过加减和移位运算递归计算出函数值,基于以上特性,该算法特别适合在FPGA 上实现。

本文在FPGA中采用迭代旋转模型进行CORDIC 算法的实现,采用十六级迭代形式实现该算法,该算法的输入值为待求解三角函数的角度值,输出值为该角度对应的正弦值和余弦值,通过计算正弦值与余弦值的比值计算输入角度的正切值。

迭代旋转模型中需提前计算模型中使用的中间变量,即满足tanθn= 2-n的θn的值,此处n 取值为0~15,并将所有的θn转换为角度的形式存储起来,将360 度用十六位二进制表示,每一度为216/360,如表1 所示。

由表1 可知,旋转角度的最大值为所有的θn 之和,最小值为所有的θn 之和的负1倍,即-99.88° ≤ θ ≤99.88°,虽然旋转角度无法达到0° ≤ θ ≤ 360°,但是-99.88° ≤ θ ≤ 99.88°已经包含了所有能求出的正弦值和余弦值,因此在计算之前需要对待求三角函数的角度进行预处理,将角度值统一转换为-90° ≤ θ ≤90°的区间范围。迭代旋转模式下根据剩余旋转角度进行迭代,共计完成16次迭代计算处理,迭代公式如式(3) 所示,迭代的反馈架构图如图2所示。

x (n + 1) <= x (n) + {{n{y (n)[16]}},y (n)[16:n]} (3)

在式(3) 中,移位的位数等同于当前计算的迭代级数,加法或减法的选择由该级中z 的符号位(即最高位)决定,从而可以得出下一级迭代的x,y 和z 的值。经过十六级迭代计算后,z 的值将变为0,此时,x 即为初始值z0的余弦值,y 即为初始值z0的正弦值。如图3 所示,为第7次迭代代码。

为了验证该算法的计算准确性,通过编写0° ≤ θ ≤ 360°的全角度Test bench测试程序,对该算法的实现进行验证,在Modelsim中将其测试输出结果转换为波形模式进行缩进,得到的仿真结果如图4所示。

对仿真的结果分别取四组正弦值和余弦值数据与真实的三角函数结果进行对比,结果如表2所示。

根据表2 可以知,基于十六级迭代计算方式的CORDIC算法FPGA实现的结果与真实计算值误差小于10-4,满足实际应用中的精度要求。

3 测试结果

为验证CORDIC算法在天际线识别中的应用可行性,通过无人机进行航拍,选择航拍视频中四幅具有天际线且飞行器姿态角不同的航拍照片进行功能测试,四幅图像拍摄时对应的飞行器姿态角数据如表3所示。

根据飞行器姿态角对天际线位置参数计算后,通過MATLAB软件对天际线位置和原始图像进行合成,如图5所示,采用白色线条进行天际线位置的描绘。根据识别结果表明,与肉眼观察图片中天际线位置几乎重合。

4 结束语

本文在FPGA中采用迭代旋转模型实现CORDIC 算法,结合姿态角与天际线位置参数关系的理论基础,通过求解姿态角的三角函数值,实现图像数据中天际线位置的识别。通过实际的航拍照片、摄像机及姿态角数据,对该应用进行了实现验证,结果表明该方法有效可行。