李陽 于方春 程陶然



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