基于FPGA的固定倍率圖像縮放的實(shí)現(xiàn)
航空電子圖像處理系統(tǒng)為操作者提供各種圖像及字符信息,隨著傳感器、顯示器的性能指標(biāo)不斷提升,圖像處理系統(tǒng)的設(shè)計(jì)面臨越來(lái)越大的挑戰(zhàn),其中圖像縮放的功能是圖像處理系統(tǒng)的關(guān)鍵技術(shù)要求。圖像縮放功能有兩種實(shí)現(xiàn)方案:1)軟件實(shí)現(xiàn),其優(yōu)點(diǎn)是算法選擇靈活多樣,生成的畫(huà)面質(zhì)量較高,缺點(diǎn)是運(yùn)算時(shí)間長(zhǎng)。2)硬件實(shí)現(xiàn),其優(yōu)點(diǎn)是分辨率高,實(shí)時(shí)性強(qiáng),缺點(diǎn)是不易實(shí)現(xiàn)功能強(qiáng)大的優(yōu)秀算法。
近年來(lái),FPGA技術(shù)發(fā)展迅速,片內(nèi)集成了PLL、硬件乘法器、存儲(chǔ)器,具有了實(shí)現(xiàn)優(yōu)秀算法的充足資源。許多航空電子嵌入式圖像處理系統(tǒng)是由固定的視頻源和顯示設(shè)備組成,系統(tǒng)中圖像縮放的倍率是固定的。文中針對(duì)此展開(kāi)重點(diǎn)研究,基于FPGA硬件,實(shí)現(xiàn)固定倍率的圖像縮放。
1 圖像縮放的算法
數(shù)字圖像的縮放是一個(gè)處理2維離散信號(hào)的過(guò)程。輸出圖像中任一個(gè)像素F(x,y),均可以在輸入圖像f(x,y)的像素矩陣中找到其對(duì)應(yīng)的位置,如圖1所示。
F(x,y)的值可以對(duì)其鄰域的原始圖像進(jìn)行二維卷積運(yùn)算得到。
其中mxn為鄰域范圍,f(i,j)是輸入原始圖像,s(i,j)為系數(shù)函數(shù)。
因?yàn)閳D像中鄰近的像素存在著相關(guān)性,所以輸出圖像像素可以依據(jù)其在原始輸入圖像映射位置鄰域的像素?cái)?shù)據(jù)卷積得到。鄰域范圍內(nèi)各個(gè)像素的相關(guān)度由系數(shù)函數(shù)決定,鄰域的范圍決定了算法的運(yùn)算速度。
基于FPGA硬件實(shí)現(xiàn)固定倍率的圖像縮放,為了降低FPGA設(shè)計(jì)的復(fù)雜性,提高圖像縮放算法的運(yùn)算速度,增強(qiáng)系統(tǒng)的實(shí)時(shí)性,將2維卷積運(yùn)算分解成2次1維卷積運(yùn)算,對(duì)輸入原始圖像像素先進(jìn)行行方向的卷積,再進(jìn)行列方向的卷積,從而得到輸出圖像像素。
2 圖像縮放的FPGA實(shí)現(xiàn)
2.1 基于FPGA實(shí)現(xiàn)圖像縮放的功能結(jié)構(gòu)
基于FPGA實(shí)現(xiàn)圖像縮放的功能結(jié)構(gòu)圖如圖2所示。
卷積計(jì)算模塊的硬件結(jié)構(gòu)由算法決定,每個(gè)點(diǎn)時(shí)鐘周期內(nèi),對(duì)輸入原始圖像像素和系數(shù)先進(jìn)行行方向的卷積,再進(jìn)行列方向的卷積,從而得到輸出圖像像素。系數(shù)產(chǎn)生功能是依據(jù)控制模塊確定的狀態(tài),產(chǎn)生算法要求的系數(shù)。輸入緩存由控制模塊不斷刷新,保證每一時(shí)鐘輸入給卷積計(jì)算模塊相應(yīng)的像素?cái)?shù)據(jù)。輸出緩存提供下一環(huán)節(jié)數(shù)據(jù)流接口。
控制模塊是核心邏輯部分,可以采用逆向映射方式(按照輸出像素的時(shí)間順序遞增,選擇對(duì)應(yīng)的輸入像素得到結(jié)果),也可以采用順向映射方式(直接在輸入像素的時(shí)序中產(chǎn)生輸出像素)。
逆向映射方式工作在輸出圖像的時(shí)鐘域,控制模塊根據(jù)縮放倍率、分辨率和同步信號(hào),確定輸入像素坐標(biāo)的增量大小,使得在每一時(shí)鐘周期輸入緩存中出現(xiàn)相應(yīng)的像素?cái)?shù)據(jù)。因?yàn)槟嫦蛴成浞绞叫枰馆敵鰰r(shí)鐘域與輸入時(shí)鐘域保持同步,所以需要大容量的輸入數(shù)據(jù)存儲(chǔ)空間,才能確保在每個(gè)時(shí)鐘周期提供相應(yīng)的輸入像素?cái)?shù)據(jù)。順向映射方式輸入和輸出像素有很強(qiáng)的時(shí)序?qū)?yīng)關(guān)系,按照輸入像素的時(shí)序進(jìn)程實(shí)時(shí)確定輸出像素的時(shí)序,輸出圖像分辨率發(fā)生變化,但幀頻一致。圖像縮放過(guò)程中,輸入一個(gè)像素可能會(huì)輸出2個(gè)或3個(gè)像素,控制模塊可以采用輸出緩存、雙口RAM、變換時(shí)鐘域、增加數(shù)據(jù)總線寬度等方法達(dá)到這種同步。順向映射方式符合輸入圖像的時(shí)序,不需要大容量的數(shù)據(jù)存儲(chǔ)空間,具體根據(jù)圖像縮放算法的鄰域大小而定。
2.2 基于FPGA實(shí)現(xiàn)圖像縮放的方法
基于FPGA實(shí)現(xiàn)圖像縮放時(shí),無(wú)論是逆向映射方式還是順向映射方式,控制模塊的設(shè)計(jì)都比較復(fù)雜。為了發(fā)揮FPGA的優(yōu)勢(shì),大幅度降低設(shè)計(jì)難度,簡(jiǎn)化硬件結(jié)構(gòu),文中把圖像縮放過(guò)程設(shè)計(jì)為一個(gè)單元體的循環(huán)過(guò)程,在單元體內(nèi)部,可以事先計(jì)算出卷積系數(shù)。例如,把每行720個(gè)像素,放大到768個(gè)像素,相當(dāng)于每輸入15個(gè)像素,輸出16個(gè)像素。此時(shí)可以把15個(gè)像素作為一個(gè)單元體,事先計(jì)算出每個(gè)輸入像素周期的卷積系數(shù),在FPGA中設(shè)計(jì)一個(gè)包含15種情況的狀態(tài)機(jī)即可。單元體的像素?cái)?shù)量越少,事先計(jì)算卷積系數(shù)和狀態(tài)機(jī)設(shè)計(jì)的工作量就越少,因此像素的數(shù)量控制在20個(gè)以內(nèi),必要時(shí)可以采用近似的整數(shù)比。當(dāng)輸出像素的數(shù)量與實(shí)際要求相差很小時(shí),圖像邊緣部分增加或減少幾個(gè)像素對(duì)顯示效果影響甚微,因此各種圖像縮放倍率情況下,相應(yīng)個(gè)數(shù)的輸入像素都可以作為一個(gè)合適的單元體。
為論述方便,文中以將768x576的輸入圖像放大到1 024x768為例,說(shuō)明基于FPGA實(shí)現(xiàn)對(duì)輸入原始圖像像素先進(jìn)行行方向的卷積,再進(jìn)行列方向的卷積,從而得到輸出圖像像素。
2.2.1 基于FPGA實(shí)現(xiàn)行方向的卷積
圖像在行方向的放大比例為3:4,即單元體為3個(gè)輸入像素和4個(gè)輸出像素,如圖3所示。
輸入圖像的AB空間中均勻分布X1、X2、X3,3個(gè)像素,放大后輸出圖像的這個(gè)空間將輸出y0、y1、y2、y3,4個(gè)像素。這個(gè)單元體的時(shí)序關(guān)系是:當(dāng)輸入X1像素時(shí),輸出Y0像素;當(dāng)輸入X2像素時(shí),輸出Y1像素;當(dāng)輸入X3像素時(shí),輸出Y2和Y3像素。行方向的卷積公式為:
基于FPGA實(shí)現(xiàn)的源程序如下:
基于FPGA實(shí)現(xiàn)的仿真時(shí)序圖如圖4所示。
在本例中時(shí)鐘為輸入的點(diǎn)時(shí)鐘,為了在X3像素周期時(shí)輸出2個(gè)像素:Y2和Y3,采用了擴(kuò)充數(shù)據(jù)總線的方式。
2.2.2 基于FPGA實(shí)現(xiàn)列方向的卷積
數(shù)據(jù)流在行方向放大后寫入雙口RAM,然后從另一側(cè)端口讀出進(jìn)行列方向的放大。由于行方向的卷積算法,雙口RAM中至少應(yīng)存儲(chǔ)連續(xù)的3行輸入圖像像素?cái)?shù)據(jù),其中2行輸入圖像像素?cái)?shù)據(jù)處于被讀出狀態(tài),產(chǎn)生放大后的輸出圖像像素,另一行空間被寫入當(dāng)前的輸入圖像像素?cái)?shù)據(jù),循環(huán)刷新。
列方向的單元體和行方向相同,也由3個(gè)輸入像素和4個(gè)輸出像素組成,每種狀態(tài)下也是同樣的卷積系數(shù),只是圖像橫向的空間變換成圖像豎向的空間,因此基于FPGA實(shí)現(xiàn)列方向的卷積的方法與基于FPGA實(shí)現(xiàn)行方向的卷積的方法相同,此處不再贅述。
3 結(jié)束語(yǔ)
基于FPGA實(shí)現(xiàn)圖像縮放,需要根據(jù)圖像縮放的倍率確定包含適當(dāng)數(shù)量像素的單元體。在單元體內(nèi)部,根據(jù)圖像縮放算法確定每個(gè)輸出像素的計(jì)算公式和卷積系數(shù),確定實(shí)現(xiàn)點(diǎn)時(shí)鐘倍頻效果的硬件方案。順向映射方式輸入和輸出處于幀同步狀態(tài),由于輸出像素?cái)?shù)量多于輸入像素,輸出像素的點(diǎn)時(shí)鐘頻率要高于輸入像素。本文行方向的放大過(guò)程,點(diǎn)時(shí)鐘頻率平均增加1/3倍,列方向的放大過(guò)程,點(diǎn)時(shí)鐘頻率還要繼續(xù)增加1/3倍。實(shí)現(xiàn)倍頻效果可以采用更高頻的獨(dú)立時(shí)鐘,或者倍頻輸入點(diǎn)時(shí)鐘,再或者增加數(shù)據(jù)總線寬度。為節(jié)省數(shù)據(jù)存儲(chǔ)空間,當(dāng)對(duì)圖像放大時(shí),先進(jìn)行列方向的放大,后進(jìn)行行方向的放大;當(dāng)對(duì)圖像縮小時(shí),先進(jìn)行行方向的縮小,后進(jìn)行列方向的縮小。
基于FPGA實(shí)現(xiàn)圖像縮放功能實(shí)時(shí)性強(qiáng)、分瓣率高。許多航空電子嵌入式圖像處理系統(tǒng)是由固定的視頻源和顯示設(shè)備組成,系統(tǒng)中圖像縮放的倍率是固定的。本文基于FPGA硬件實(shí)現(xiàn)固定倍率的圖像縮放,能夠大幅度降低設(shè)計(jì)難度,減少工作量。
基于FPGA硬件實(shí)現(xiàn)固定倍率的圖像縮放的方法已經(jīng)應(yīng)用于某款航空電子產(chǎn)品中,電路板的原有硬件沒(méi)有變動(dòng),對(duì)電路板中FPGA重新進(jìn)行了設(shè)計(jì),增加了新的內(nèi)容,應(yīng)用效果良好。
評(píng)論