李陽 于方春 程陶然
關(guān)鍵詞:天際線識別;CORDIC;姿態(tài)角;FPGA
中圖分類號:TP399 文獻標識碼:A
文章編號:1009-3044(2023)20-0129-03
0 引言
天際線指天空與地面的分界線,當(dāng)分割天空和海平面時也稱為海天線,天際線的自動識別對無人機飛行姿態(tài)控制及校正具有重要的作用。在一般的圖像處理中,天際線識別的常用方法包括通過邊緣特征進行天際線提取[1-2]、通過統(tǒng)計區(qū)域特征識別天際線[3-4]以及基于機器學(xué)習(xí)識別天際線[5]。對于無人機而言,其飛行姿態(tài)將直接影響到飛行視野中的天際線位置,因此可以通過無人機的姿態(tài)角結(jié)合攝像機的內(nèi)部參數(shù)等計算圖像數(shù)據(jù)中的天際線位置參數(shù),進而識別天際線[6]。
基于姿態(tài)角與天際線位置參數(shù)關(guān)系的理論基礎(chǔ),該理論的核心在于計算姿態(tài)角的三角函數(shù)值。CORDIC算法是目前公認的求解三角函數(shù)較為理想的方法[7]。CORDIC(坐標旋轉(zhuǎn)數(shù)字計算機)算法最早是由J.Volder等人在1959年設(shè)計美國航空控制系統(tǒng)時提出,支持解決當(dāng)時航空控制導(dǎo)航系統(tǒng)中三角函數(shù)計算的實時性和精度問題[8]。CORDIC算法的基本思想在于采用與運算基數(shù)相關(guān)的角度進行不斷偏擺來逼近所求解的角度,因為這些固定的角度只與計算的基數(shù)有關(guān),所以在運算中只需要進行移位和加減運算,是一種運算簡單、精度可控、計算效率高的三角函數(shù)求解算法[9]。
本文通過在FPGA中實現(xiàn)CORDIC算法解算飛行姿態(tài)角三角函數(shù)值,依據(jù)姿態(tài)角與天際線位置參數(shù)的關(guān)系,計算圖像數(shù)據(jù)中天際線位置參數(shù),最終完成圖像數(shù)據(jù)中的天際線的識別。
1 天際線位置參數(shù)與姿態(tài)角的關(guān)系
一般飛行器上攝像機光軸與飛行器機身是平行的,指向正前方,飛行器的姿態(tài)和攝像機的姿態(tài)可統(tǒng)一描述。如圖1所示,假設(shè)攝像機的坐標系為Oxyz,點O是攝像機的光心,飛行器的三個姿態(tài)角俯仰角θ、偏航角ψ、橫滾角φ,可以分別看作攝像機繞自身的x軸、y 軸、z 軸轉(zhuǎn)動的角度。對于飛行器及攝像機而言,天際線是在無限遠處的,在無限遠的地方建立世界坐標系,如圖1 中為OWXWYWZW。大地平面可以近似成一個圓形平面,在攝像機的視野范圍中,天際線可近似為一條直線,P 點是天際線上的一點,P′是天際線通過攝像機的光學(xué)系統(tǒng)在圖像坐標系uoov 平面上的成像,圖像坐標系的單位是像素。
通過飛行器的姿態(tài)角和攝像機的內(nèi)部參數(shù),結(jié)合世界坐標系、攝像機坐標系以及圖像坐標系之間的轉(zhuǎn)換關(guān)系計算圖像數(shù)據(jù)中的天際線位置參數(shù)[6]。天際線在圖像坐標系uoo v 中的直線方程的斜率和截距與橫滾角、俯仰角的關(guān)系如式(1) 和(2) 所示:
根據(jù)式(1) 和式(2) 可知,天際線在圖像中的直線方程的斜率和截距均可通過飛行姿態(tài)角的三角函數(shù)值及攝像機內(nèi)部參數(shù)描述,因此基于姿態(tài)角的天際線識別方法核心在于解算姿態(tài)角的三角函數(shù)值,該方法相比圖像識別方法、邊緣提取方法更為直觀、簡單。
2 基于FPGA 的CORDIC 算法實現(xiàn)
CORDIC 算法全稱為坐標旋轉(zhuǎn)數(shù)字計算機,CORDIC 算法的運用大大降低了常用三角函數(shù)如tan、cos、sin等在硬件上的實現(xiàn)難度,它主要是將復(fù)雜的函數(shù)在硬件上通過加減和移位運算遞歸計算出函數(shù)值,基于以上特性,該算法特別適合在FPGA 上實現(xiàn)。
本文在FPGA中采用迭代旋轉(zhuǎn)模型進行CORDIC 算法的實現(xiàn),采用十六級迭代形式實現(xiàn)該算法,該算法的輸入值為待求解三角函數(shù)的角度值,輸出值為該角度對應(yīng)的正弦值和余弦值,通過計算正弦值與余弦值的比值計算輸入角度的正切值。
迭代旋轉(zhuǎn)模型中需提前計算模型中使用的中間變量,即滿足tanθn= 2-n的θn的值,此處n 取值為0~15,并將所有的θn轉(zhuǎn)換為角度的形式存儲起來,將360 度用十六位二進制表示,每一度為216/360,如表1 所示。
由表1 可知,旋轉(zhuǎn)角度的最大值為所有的θn 之和,最小值為所有的θn 之和的負1倍,即-99.88° ≤ θ ≤99.88°,雖然旋轉(zhuǎn)角度無法達到0° ≤ θ ≤ 360°,但是-99.88° ≤ θ ≤ 99.88°已經(jīng)包含了所有能求出的正弦值和余弦值,因此在計算之前需要對待求三角函數(shù)的角度進行預(yù)處理,將角度值統(tǒng)一轉(zhuǎn)換為-90° ≤ θ ≤90°的區(qū)間范圍。迭代旋轉(zhuǎn)模式下根據(jù)剩余旋轉(zhuǎn)角度進行迭代,共計完成16次迭代計算處理,迭代公式如式(3) 所示,迭代的反饋架構(gòu)圖如圖2所示。
x (n + 1) <= x (n) + {{n{y (n)[16]}},y (n)[16:n]} (3)
在式(3) 中,移位的位數(shù)等同于當(dāng)前計算的迭代級數(shù),加法或減法的選擇由該級中z 的符號位(即最高位)決定,從而可以得出下一級迭代的x,y 和z 的值。經(jīng)過十六級迭代計算后,z 的值將變?yōu)?,此時,x 即為初始值z0的余弦值,y 即為初始值z0的正弦值。如圖3 所示,為第7次迭代代碼。
為了驗證該算法的計算準確性,通過編寫0° ≤ θ ≤ 360°的全角度Test bench測試程序,對該算法的實現(xiàn)進行驗證,在Modelsim中將其測試輸出結(jié)果轉(zhuǎn)換為波形模式進行縮進,得到的仿真結(jié)果如圖4所示。
對仿真的結(jié)果分別取四組正弦值和余弦值數(shù)據(jù)與真實的三角函數(shù)結(jié)果進行對比,結(jié)果如表2所示。
根據(jù)表2 可以知,基于十六級迭代計算方式的CORDIC算法FPGA實現(xiàn)的結(jié)果與真實計算值誤差小于10-4,滿足實際應(yīng)用中的精度要求。
3 測試結(jié)果
為驗證CORDIC算法在天際線識別中的應(yīng)用可行性,通過無人機進行航拍,選擇航拍視頻中四幅具有天際線且飛行器姿態(tài)角不同的航拍照片進行功能測試,四幅圖像拍攝時對應(yīng)的飛行器姿態(tài)角數(shù)據(jù)如表3所示。
根據(jù)飛行器姿態(tài)角對天際線位置參數(shù)計算后,通過MATLAB軟件對天際線位置和原始圖像進行合成,如圖5所示,采用白色線條進行天際線位置的描繪。根據(jù)識別結(jié)果表明,與肉眼觀察圖片中天際線位置幾乎重合。
4 結(jié)束語
本文在FPGA中采用迭代旋轉(zhuǎn)模型實現(xiàn)CORDIC 算法,結(jié)合姿態(tài)角與天際線位置參數(shù)關(guān)系的理論基礎(chǔ),通過求解姿態(tài)角的三角函數(shù)值,實現(xiàn)圖像數(shù)據(jù)中天際線位置的識別。通過實際的航拍照片、攝像機及姿態(tài)角數(shù)據(jù),對該應(yīng)用進行了實現(xiàn)驗證,結(jié)果表明該方法有效可行。