索軍紅,張冠茂,喬 鑫,趙漢卿
(蘭州大學(xué) 信息科學(xué)與工程學(xué)院 光電子與電磁信息研究所,甘肅 蘭州 730000)
圖像作為承載信息的主要載體,其準(zhǔn)確性至關(guān)重要,但在獲取圖像的過程中往往會受到各種因素的干擾,使最終成像發(fā)生畸變,從而影響人們對實際情況的分析與判斷。圖像畸變可分為非線性畸變和線性畸變。非線性畸變主要是由于相機(jī)的制作工藝不完善造成的,致使實際成像模型與理想針孔成像模型不一致。非線性畸變中真實畫面與最終成像之間的映射關(guān)系雖然復(fù)雜,但對于特定相機(jī)而言,映射關(guān)系是固定的,無需在拍攝過程中實時計算,已有許多文獻(xiàn)對其進(jìn)行了較為充分的研究。線性畸變與相機(jī)的拍攝角度和運動狀態(tài)有關(guān)。梯形畸變作為線性畸變的一種,其成因是在實際的拍攝場景中,受限于拍攝距離和角度,攝像機(jī)往往不能垂直于被拍攝平面,造成最終成像結(jié)果產(chǎn)生梯形畸變[1-9]。梯形畸變矯正通常使用軟件實現(xiàn),無法滿足實時矯正的需求,如向芝慧小組結(jié)合兩步投影法和Harris角點檢測算法利用軟件矯正梯形畸變,但矯正時間以數(shù)百毫秒計[10];張宇小組基于OpenCV采用連接點法矯正梯形畸變,但只有在攝像機(jī)和被拍攝平面相對位置不變的情況下才能進(jìn)行實時矯正[11]。本文基于現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)提出了一種梯形矯正的新思路,采用配有XILINX artix-7XC7A100T-2FGG484I芯片的AX7103開發(fā)板為實驗平臺,可以實時且自適應(yīng)地矯正梯形畸變。
梯形矯正系統(tǒng)結(jié)構(gòu)框圖如圖1所示,其主要由OV5640攝像頭模塊、FPGA模塊、DDR3(Double Data Rate 3)存儲模塊、液晶顯示器模塊、按鍵模塊、以及其他必要模塊(電源模塊、時鐘模塊、配置電路)組成。FPGA模塊又由圖像采集模塊、灰度插值模塊、圖像預(yù)處理模塊、直線檢測模塊、參數(shù)計算模塊、DDR讀寫模塊和DDR控制模塊組成。
圖1 梯形矯正系統(tǒng)結(jié)構(gòu)框圖
進(jìn)行矯正時,由OV5640攝像頭采集圖像,F(xiàn)PGA模塊對圖像進(jìn)行矯正,DDR3模塊負(fù)責(zé)緩存數(shù)據(jù),最終由顯示器顯示矯正后的圖像。
該系統(tǒng)的基本工作原理為:圖像采集模塊通過IIC總線協(xié)議配置OV5640攝像頭,使其按照640×480的分辨率和RGB565的格式將數(shù)據(jù)傳遞給FPGA芯片,最后經(jīng)由圖像采集模塊、DDR讀寫模塊和DDR控制模塊將數(shù)據(jù)存入DDR3中。
圖像預(yù)處理模塊讀取DDR3中緩存的原始圖像后對其進(jìn)行灰度轉(zhuǎn)換、Sobel邊緣檢測、形態(tài)學(xué)開運算等處理[12],以達(dá)到濾除圖像干擾信息、降低后續(xù)處理運算量的目的,便于直線檢測模塊進(jìn)行直線檢測。
直線檢測模塊可以提取出預(yù)處理后圖像中梯形畸變的兩條斜邊,并將斜邊參數(shù)、傾斜角度分別傳遞給參數(shù)計算模塊和視頻輸出模塊。
參數(shù)計算模塊利用斜邊參數(shù)計算出修復(fù)梯形畸變所需的映射參數(shù),之后將其傳遞給灰度插值模塊。
視頻流時序中相鄰場同步信號間除了顯示區(qū)間之外還有一段非顯示區(qū)間,如圖2所示。本設(shè)計可以利用顯示區(qū)間之后的非顯示區(qū)間時間段運行直線檢測模塊和參數(shù)計算模塊,再結(jié)合錯幀矯正的方法,即用上一幀得到的映射參數(shù)矯正下一幀的畫面,進(jìn)而實現(xiàn)視頻實時矯正的目的。
圖2 場同步信號時序圖
灰度插值模塊根據(jù)矯正圖像像素坐標(biāo)和映射參數(shù)計算出對應(yīng)原始圖像中的像素坐標(biāo),取出相應(yīng)坐標(biāo)的灰度值并進(jìn)行計算后作為矯正圖像像素的灰度值,由此得到矯正圖像,并將其傳輸給DDR讀寫模塊緩存。通過按鍵可以控制選擇何種灰度插值算法。
視頻輸出模塊生成視頻時序信號,在圖像顯示的不同區(qū)域分別讀取原始圖像、矯正圖像數(shù)據(jù)和梯形畸變的斜邊角度信息以及相關(guān)文字說明,以實現(xiàn)視頻圖像、矯正圖像和畸變程度的同屏顯示。
DDR讀寫模塊用于在DDR和不同模塊之間進(jìn)行數(shù)據(jù)緩存,并負(fù)責(zé)突發(fā)讀/寫請求信號和普通讀/寫請求信號的轉(zhuǎn)換,以充分利用DDR讀寫操作的高帶寬。
DDR控制器模塊按照固定順序仲裁多路DDR突發(fā)讀/寫請求,依據(jù)仲裁結(jié)果讀/寫DDR3中的數(shù)據(jù)。
直線檢測模塊是系統(tǒng)中最核心的部分,用于尋找畫面中梯形畸變的兩個腰。本文采用的直線檢測算法為Hough變換法[13],是一種計算簡單、易于硬件實現(xiàn)的方法。Hough變換公式為:
ρ=xcosθ+ysinθ,
(1)
公式(1)可將(x,y)坐標(biāo)系中的直線轉(zhuǎn)換為(ρ,θ)坐標(biāo)系中的一個點,將(x,y)坐標(biāo)系中的點轉(zhuǎn)換為(ρ,θ)坐標(biāo)系中的一條曲線。利用Hough變換可將檢測直線的問題轉(zhuǎn)化為檢測點的問題。
直線檢測模塊構(gòu)成及其工作流程原理如圖3所示。邊緣圖像信息由圖像預(yù)處理模塊輸出,邊緣點坐標(biāo)檢測模塊一方面基于邊緣圖像信息中的視頻流時序信號生成像素坐標(biāo),另一方面根據(jù)像素灰度值判斷當(dāng)前像素點是否為邊緣點,進(jìn)而決定是否激活寫請求信號。FIFO緩沖器負(fù)責(zé)緩存邊緣點坐標(biāo)。若FIFO不為空,則數(shù)據(jù)控制模塊發(fā)出單個時鐘周期讀請求,并在30個時鐘周期內(nèi)不再發(fā)出,以保證每個邊緣點坐標(biāo)保持30個時鐘周期的輸出,供后續(xù)計算使用,讀地址也將在這30個時鐘周期內(nèi)循環(huán)加一。sinθ_cosθ_ROM中存儲著60°~89°范圍內(nèi)步長為1°的正、余弦函數(shù)值,并依據(jù)讀地址輸出相應(yīng)正、余弦函數(shù)值以供后續(xù)計算。ρ值計算模塊1按照公式(1)計算出ρ值,ρ值計算模塊2運算過程中會將公式(1)中的加法更改為減法,如此可利用三角函數(shù)的對稱性在不增加存儲空間的情況下將角度檢測范圍擴(kuò)展至-89°~-60°。在一副分辨率為640×480的畫面中,直線傾斜角度范圍分別為60°~89°、-89°~-60°時,ρ的取值范圍分別為0~800、-640~240。故可根據(jù)式(2)和式(3)分別計算投票地址。
圖3 直線檢測模塊結(jié)構(gòu)框圖
addr1=addrθ×800+ρ,
(2)
addr2=addrθ×880+640+ρ,
(3)
其中,addr1為合并1模塊的輸出地址,addr2為合并2模塊的輸出地址。
獨立時鐘雙口RAM IP核的讀、寫時鐘相位相反,頻率相同,以實現(xiàn)在單時鐘周期內(nèi)完成投票。投票記錄模塊時刻記錄最大得票數(shù)和次大得票數(shù)以及它們所對應(yīng)的(ρ,θ)值。為了避免最大得票數(shù)和次大得票數(shù)對應(yīng)的是同一條直線,只有在當(dāng)前得票數(shù)大于最大或次大得票數(shù),且當(dāng)前得票數(shù)對應(yīng)的ρ值與最大或次大得票數(shù)對應(yīng)的ρ值相差超過10個單位時,才會更新相應(yīng)記錄。
比較判斷模塊接收到4條直線的得票數(shù),將得票數(shù)最多的兩條直線信息發(fā)送出去。
梯形畸變圖像與矯正圖像的空間變換關(guān)系如圖4所示。本系統(tǒng)應(yīng)用連接點法對像素進(jìn)行重定位,連接點法相較于兩步投影法,具有運算步驟少,計算簡單的特點,易于硬件實現(xiàn)。
圖4 空間變換關(guān)系
利用雙線性方程對該空間變換過程建模,即:
(4)
其中:(x′,y′)為畸變圖像中的像素點坐標(biāo),(x,y)為矯正圖像中的像素點坐標(biāo)。
公式(4)中共有k1~k8八個未知系數(shù),需要將4對映射點坐標(biāo)代入其中才能將全部系數(shù)求出。以視頻畫面的1/4高度和3/4高度作為梯形畸變的上下底邊,其與直線檢測模塊得到的兩條直線(梯形的兩個腰)相交于4點,交點坐標(biāo)分別設(shè)為(120,y1),(120,y2),(360,y3),(360,y4)。其中,y1,y2,y3,y4的計算公式為:
(5)
其中(ρ1,θ1),(ρ2,θ2)分別為直線檢測模塊輸出的兩條直線信息。
相應(yīng)的,以梯形畸變中較長底邊為基準(zhǔn)構(gòu)造一個矩形,矩形的4個頂點即為畸變圖像中梯形頂點的映射點。其坐標(biāo)分別為(120,y1),(120,y2),(360,y1),(360,y2)或(120,y3),(120,y4),(360,y3),(360,y4)。
以梯形畸變的上邊是較長底邊為例,將4對映射點坐標(biāo)代入公式(4),得:
(6)
依據(jù)式(5)和式(6)設(shè)計的參數(shù)計算模塊結(jié)構(gòu)及其工作流程如圖5所示。坐標(biāo)計算模塊實現(xiàn)計算式(5)所需的功能,其運行最大時鐘頻率低于系統(tǒng)時鐘頻率,故在該模塊前后各添加一個異步FIFO,以解決信號的跨時鐘域傳輸問題。參數(shù)求取模塊完成式(6)的計算,為了節(jié)省計算資源,全程采用了浮點數(shù)形式進(jìn)行計算。
圖5 參數(shù)計算模塊系統(tǒng)結(jié)構(gòu)
矯正圖像和畸變圖像的像素點坐標(biāo)并非一一對應(yīng),通過公式(4)得到的映射坐標(biāo)值往往是一個小數(shù),此時就需根據(jù)鄰近像素的灰度值對該坐標(biāo)點進(jìn)行插值,常用的灰度插值算法有最鄰近法、雙線性插值法和雙三次插值法。最鄰近法選用距離映射坐標(biāo)最近像素點的灰度值作為映射坐標(biāo)的灰度值,計算最為簡便,但經(jīng)過插值后得到的圖像灰度不連續(xù),在圖像邊緣處會出現(xiàn)較明顯的鋸齒狀。雙線性插值法基于映射坐標(biāo)4個鄰像素的灰度值,在兩個方向上進(jìn)行線性加權(quán)后得到映射坐標(biāo)的灰度值,由此得到的插值后圖像灰度連續(xù),但計算比較復(fù)雜,可能會導(dǎo)致圖像輪廓模糊。雙三次插值法利用三次多項式逼近理論上的最佳插值函數(shù),映射坐標(biāo)的灰度值由其鄰近的16個像素點灰度值加權(quán)內(nèi)插求得,因此所得插值后圖像效果最好,但計算量也最大。
從計算復(fù)雜度、緩存資源消耗量的角度考慮,在硬件實現(xiàn)上放棄了雙三次插值算法,為了滿足不同需求,最鄰近法和雙線性插值法均被采用,在使用過程中通過按鍵進(jìn)行選擇。
通過公式(4)和公式(6)可知,畸變圖像和矯正圖像之間映射坐標(biāo)對的橫坐標(biāo)(行數(shù))一致,如圖6所示,故可以簡化相應(yīng)灰度插值算法。采用最鄰近法時,取距離映射點y′最近像素點y2的灰度值作為y的灰度值。設(shè)y1點處灰度值為f1,y2點處灰度值為f2,則運用雙線性插值法計算y點灰度值f的公式為:
圖6 簡化的坐標(biāo)映射關(guān)系
f=(y2-y′)×f1+(y′-y1)×f2,
(7)
灰度插值模塊系統(tǒng)結(jié)構(gòu)及其工作流程如圖7所示,輸入數(shù)據(jù)流分配單元、雙端口RAM和輸出數(shù)據(jù)流選擇單元共同構(gòu)成乒乓緩存結(jié)構(gòu),雙端口RAM大小為640×16 bit,以緩存矯正圖像當(dāng)前行所對應(yīng)的畸變圖像像素值。坐標(biāo)計算模塊先通過視頻時序信號生成矯正圖像像素坐標(biāo),再結(jié)合矯正參數(shù)計算映射坐標(biāo),最后由映射坐標(biāo)得到其鄰近像素坐標(biāo)和相應(yīng)權(quán)值,并分別送給乒乓緩存結(jié)構(gòu)和插值模塊。乒乓緩存結(jié)構(gòu)將鄰近像素坐標(biāo)作為讀地址并輸出相應(yīng)灰度值給到插值模塊。插值模塊接收灰度值和權(quán)值,并基于插值算法計算出當(dāng)前矯正圖像像素的灰度值,插值算法的選擇由按鍵控制。
圖7 灰度插值模塊系統(tǒng)結(jié)構(gòu)
為了驗證本文所設(shè)計梯形矯正系統(tǒng)的可行性及穩(wěn)定性,使用Verilog語言編寫系統(tǒng)程序,采用XILINX公司的Vivado軟件為程序編譯平臺,對程序進(jìn)行綜合、布局布線,最終生成比特流文件并燒錄進(jìn)FPGA芯片。系統(tǒng)硬件結(jié)構(gòu)如圖8所示,OV5640攝像頭直插在FPGA開發(fā)板上,HDMI_O端口連接一個1 280×760分辨率的顯示器。
圖8 自適應(yīng)實時視頻圖像梯形矯正系統(tǒng)
開發(fā)板通電后,攝像頭傾斜一定角度拍攝目標(biāo)物體,實驗場景如圖9所示。顯示器左端畫面為攝像頭采集的原始圖像,顯示器右端畫面為矯正后圖像,此外,畫面左上角顯示梯形畸變左、右兩腰與畫面中軸線的夾角,偏右為正值,偏左為負(fù)值,以表示梯形畸變幅度。并且當(dāng)移動攝像頭時,系統(tǒng)依然能實時顯示矯正后的畫面。
圖9 矯正處理顯示效果圖
實驗結(jié)果表明,基于FPGA的視頻實時自適應(yīng)梯形矯正系統(tǒng)可以實現(xiàn)對640×480分辨率、60 Hz刷新率的視頻數(shù)據(jù)實時自適應(yīng)矯正,滿足日常使用需求。整個系統(tǒng)消耗的LUT資源占FPGA芯片總資源的25.66%,F(xiàn)F占用總資源的10.12%,BRAM占用總資源的20%,DSP占用總資源的9.17%,詳細(xì)資源占用情況如表1所示。
表1 FPGA資源使用情況
為進(jìn)一步突出本文所提出系統(tǒng)的實時性,將本系統(tǒng)與兩步投影法和軟件連接點法所耗時間進(jìn)行比較,比較結(jié)果如表2所示。其中畸變檢測時間為系統(tǒng)檢測到畸變幅度所消耗的時間,矯正時間指系統(tǒng)矯正完一幀圖像所需要的時間。從表2中可以看出,兩步投影法和軟件連接點法耗費時間至少是本文方法的21倍和300倍,在攝像頭位置不斷改變的情景中,不具備實時性;而本文方法的畸變檢測時間和矯正時間均為1/60 s,結(jié)合錯幀矯正策略即可實現(xiàn)對60 Hz視頻的實時矯正。
表2 時間分析
本文根據(jù)實踐的需求,針對圖像獲取過程中產(chǎn)生梯形畸變的問題,提出了一種自適應(yīng)實時視頻圖像梯形矯正系統(tǒng)的硬件結(jié)構(gòu)設(shè)計。利用錯幀矯正的方法實現(xiàn)了視頻的實時矯正,提高了系統(tǒng)的應(yīng)用能力。通過乒乓緩存結(jié)構(gòu),使得在占用極小片上存儲資源的情況下可以連續(xù)不斷地對數(shù)據(jù)流進(jìn)行處理?;谔菪位儓D像與矯正圖像之間特殊的映射關(guān)系,簡化了參數(shù)計算過程。利用場消隱時間完成矯正參數(shù)計算,可以有效提高畸變矯正的實時性。實驗結(jié)果表明:系統(tǒng)可以支持對分辨率為640×480、刷新率為60 Hz的監(jiān)控視頻進(jìn)行自適應(yīng)矯正,且矯正畫面和監(jiān)控畫面之間的延時僅為1/60 s,矯正精度為1°,基本滿足監(jiān)控系統(tǒng)梯形矯正的要求。