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