中圖分類號:TP391.4;TN402 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2025)12-0041-05
Design and Implementation of Nine-point Nearest Interpolation Algorithm Based on FPGA
GUAN Haoyang,LIU Dequan,MENG Xiangyi (SchoolofPhysicsand Electronic Information Engineering,Ningxia NormalUniversity, Guyuan756o99,China)
Abstract: InFPGAs,implementing the bilinear interpolation algorithm through pipelinesconsumes significantresources. This paper proposesanine-point nearestneighbor interpolationalgorithm.Byusing linearcalculation,thegrayscalevaluesof the nine pointsnearthemappedpositionof thepointtobemeasuredareobtained.Thepixelvalueofthepixel tobeinterpolatedisset equal tothe pixel valueofthe nearest pixel among the nine points tothe mapped position,thus completing the nine-poit nearest neighborinterpolationalgorith.ExperimentsshowthatinFPGAhardwareresources,thein-pointnearestneighbortepolation algorithm saves 21.2587% of the total block memory and 20.1413% of the total registers. In terms of image interpolation accuracy, the smoothness ratios for three different types of images are 109.632 3% 104.9660% and 106.5688% ,respectively,while the information entropyratiosare 99.9959% 0 99.946 1% ,and 99.933 2% ,respectively.Thenine-point nearest neighbor interpolation algorithm basicallymeets the requirements ofthe bilinear interpolation algorithm while reducing resource consumption.
Keywords: Field-Programmable Gate Array (FPGA); nine-point nearest neighbor interpolation; average gradient amplitude; information entropy
0 引言
插值技術(shù)廣泛應(yīng)用于軍事、航空、醫(yī)學(xué)、消費(fèi)電子、手持設(shè)備和多媒體設(shè)備等領(lǐng)域的圖像處理中[1-2],且現(xiàn)多采用FPGA實(shí)現(xiàn)視頻圖像的實(shí)時處理[3-]。圖像縮放是指圖像的尺寸變小或者變大的過程,即增加或者減少原始圖像像素的個數(shù)[7。主要有最近鄰插值算法、雙線性插值算法、雙三次卷積插值算法、基于小波變換的插值算法。最近鄰插值算法是近似理想sinc函數(shù)最簡單的方法[8,但該算法會在新圖像中產(chǎn)生明顯的鋸齒邊緣和馬賽克現(xiàn)象;雙線性插值算法利用待插像素點(diǎn)周圍的4個像素點(diǎn)分別進(jìn)行水平方向與垂直方向的線性插值,它利用這4個像素點(diǎn)與待插像素點(diǎn)距離這一權(quán)值來加權(quán)求和計算求出待插點(diǎn)的像素值,具有平滑功能,邊緣處的過渡比較自然,但需要計算每個點(diǎn)的插值權(quán)重,在FPGA中實(shí)現(xiàn)會占用較多資源;雙三次卷積插值算法和基于小波變換的插值算法需要更多的硬件資源。
基于上述分析,本文提出了九點(diǎn)最臨近插值算法,通過使用線性計算得出待測點(diǎn)映射到的位置附近的九個點(diǎn)灰度值,然后待插值像素點(diǎn)的像素值等于九個點(diǎn)中距離它映射到位置最近像素點(diǎn)的像素值。通過實(shí)驗(yàn)得出,該算法與雙線性插值算法相比,不僅減少了FPGA資源的消耗,而且插值后的圖像平滑度相近。同時本文使用流水線設(shè)計九點(diǎn)最近鄰插值算法,在 1000MHz 時鐘下仿真,完成一幅80圖像的處理時間僅需 90ns ,增加了系統(tǒng)的吞吐量。
1九點(diǎn)最臨近插值算法原理
本文提出的九點(diǎn)最臨近插值算法如圖1所示。將4個像素點(diǎn)之間的整塊區(qū)域劃分為4個小區(qū)域,在相應(yīng)區(qū)域里的取待插值像素點(diǎn),像素值為距離它映射到的位置最近像素點(diǎn)的像素值,減少FPGA資源的消耗[]。
圖1九點(diǎn)最臨近插值算法示意圖
根據(jù)點(diǎn) P(γβ , xα) 的4個相鄰點(diǎn) 、 (y0 x1, )、
、
的灰度值 I00 、 I01 、 I10 I11 ,通過線性公式計算出相鄰兩點(diǎn)之間的灰度值 I02 (2I20 , I22 , I21 : I12 ,共九個點(diǎn)的數(shù)值,后將與點(diǎn) P 最近的坐標(biāo)點(diǎn)
的灰度值作為點(diǎn) P 的灰度近似值。圖中 P 應(yīng)取 I22 的灰度值作為灰度近似值。相鄰兩點(diǎn)之間的灰度值計算式如下:
1024,位寬為8bit,以便同時讀取一組4個像素的灰度值數(shù)據(jù),每個RAM分別輸出近鄰4個像素中的其中1個。其中圖像奇數(shù)行像素同時存于RAM0和RAM1中,偶數(shù)行像素同時存于RAM2和RAM3中。RAM地址的計算公式如式(6)所示:
ram_addr ? {img_vs_cnt[2:0],10'b0}+img_hs_cnt (6)
RAM寫使能代碼中img_vs_cnt[0]產(chǎn)生行像素的奇偶行判斷,作為數(shù)據(jù)向RAM0和RAM1或RAM2和RAM3賦輸入灰度值的判斷條件,即RAM0和RAM1的寫使能在緩存圖像奇數(shù)行像素時有效,RAM2和RAM3的寫使能在緩存圖像偶數(shù)行像素時有效。
2.2 數(shù)據(jù)計算
模塊設(shè)計使用流水線(Pipe_line)設(shè)計。將系統(tǒng)設(shè)計的規(guī)模較大、層級較多的組合邏輯電路分為幾級,使數(shù)據(jù)流在各個步驟的處理,從時間上看是連續(xù)的,在首次延遲(Latency)后,每個時鐘周期可以輸出值一次,提高數(shù)據(jù)處理的頻率,增加系統(tǒng)的吞吐量[0]。
2.2.1九點(diǎn)最臨近插值坐標(biāo)設(shè)計
在進(jìn)行插值坐標(biāo)計算前,計算原始圖像與目標(biāo)圖像在水平和垂直方向上的比率(即目標(biāo)圖像映射到原始圖像的坐標(biāo)步進(jìn)) x ratio和y_ratio。已知原始圖像的分辨率為 640×480 、目標(biāo)圖像的分辨率為1 024×768 ,且要求將比率定標(biāo)為16位小數(shù),故x_ratio和y_ratio的計算結(jié)果分別如式(7)、式(8)所示:
九點(diǎn)最臨近插值使用線性計算得出點(diǎn) P 附近的九個點(diǎn)灰度值,提高最鄰近插值的取值精度。同時,九點(diǎn)最臨近插值算法在計算上未使用和計算雙線性插值算法中計算點(diǎn) P 的4個近臨點(diǎn)的插值系數(shù),因此減少設(shè)計的資源消耗。
2九點(diǎn)最臨近插值算法設(shè)計
為適配FPGA對插值算法的設(shè)計,需要將浮點(diǎn)運(yùn)算轉(zhuǎn)為定點(diǎn)運(yùn)算,將水平方向和垂直方向比率的精度定標(biāo)為16位小數(shù)[]。
2.1輸入數(shù)據(jù)緩存設(shè)計
輸入數(shù)據(jù)需要存入RAM中,采用4個均為雙端口RAM對圖像進(jìn)行緩存,其地址空間分配為 4×
首先產(chǎn)生目標(biāo)圖像的 Y. , X 坐標(biāo),根據(jù)目標(biāo)圖像映射到原始圖像的 Y. ,: X 坐標(biāo)組:(y_dec,x_dec)計算原始圖像的 Y, X 坐標(biāo)的小數(shù)位數(shù)和整數(shù)位數(shù)。原始圖像的坐標(biāo)組中,[15:0]位為原始圖像的坐標(biāo)的小數(shù)位數(shù);[26:16]位為原始圖像的坐標(biāo)的整數(shù)位數(shù),并得到近鄰4個像素中左上角像素的像素級坐標(biāo)組(y_int,x_int),以及原始圖像的Y、X坐標(biāo)組與左上角像素坐標(biāo)的距離組(y_fra,x_fra)。后根據(jù)式6,(y_int,x_int)用于產(chǎn)生RAM的讀地址和指示左上角像素位于圖像奇數(shù)行或偶數(shù)行的標(biāo)志信號。最后,(yfra,xfra)判斷目標(biāo)點(diǎn)距離圖1九點(diǎn)中哪個點(diǎn)最近,用于九點(diǎn)最臨近插值像素數(shù)據(jù)賦值的判斷依據(jù)。
2.2.2九點(diǎn)最臨近插值RAM數(shù)據(jù)讀取
首先,(y_int,x_int)產(chǎn)生RAM的讀地址和指示左上角像素Pixel00位于圖像奇數(shù)行或偶數(shù)行的標(biāo)志信號,將RAM的讀地址和指示左上角像素位于奇偶行的標(biāo)志信號用以對4個RAM的讀地址賦值[7]。
左上角像素位于圖像奇數(shù)行時,左上角像素Pixel_00位于RAM0中,RAM1、RAM2、RAM3的讀地址應(yīng)為RAMO讀地址數(shù)值 +1 、相同、 +1 ;左上角像素位于圖像偶數(shù)行時,左上角像素Pixel00位于RAM2中,RAM0、RAM1、RAM3的讀地址應(yīng)為RAM2讀地址數(shù)值 +1024 、 +1025 , +1 。
然后,根據(jù)設(shè)計的4個RAM的讀地址和左上角像素Pixel00位于圖像奇數(shù)行或偶數(shù)行的標(biāo)志信號,讀取4個像素的數(shù)值,并賦值到對應(yīng)像素位置。左上角像素位于圖像奇數(shù)行時,Pixel_O0、Pixel_01、Pixel_10、Pixel11分別賦RAM0、RAM1、RAM2、RAM3讀數(shù)據(jù)值;左上角像素位于圖像偶數(shù)行時,Pixel_O0、Pixel_01、Pixel_10、Pixel_11分別賦RAM2、AM3、RAMO、RAM1讀數(shù)據(jù)值。
2.2.3九點(diǎn)最臨近插值像素數(shù)據(jù)計算
首先,得到的近鄰4個像素中可能存在像素超出圖像邊界的情況,需要進(jìn)行像素的邊界復(fù)制,對越界像素進(jìn)行處理,對Pixel_dataOO、Pixel_data01、Pixeldatal0、Pixeldatal1的賦值過程如圖2所示,其中陰影部分為有效數(shù)據(jù)。其次,根據(jù)式 1~ 式5計算相鄰兩點(diǎn)之間的灰度值,再通過移位,得出九個點(diǎn)數(shù)據(jù),如圖3所示。其中,陰影部分為相加、位移計算后的數(shù)據(jù)。然后,判定待求點(diǎn)P位于所在區(qū)域內(nèi),將對應(yīng)區(qū)域的4個具體的灰度值取出,減少資源使用,并作為后續(xù)最臨近算法的取值,如圖4所示。最后,待插值像素點(diǎn)的像素值等于所在區(qū)域內(nèi),距離它映射到的位置最臨近像素點(diǎn)的像素值。
圖2像素越界處理
圖3獲得九點(diǎn)數(shù)據(jù)
圖4獲得待求點(diǎn)所在Area的四點(diǎn)數(shù)據(jù)
3 實(shí)驗(yàn)仿真驗(yàn)證及分析
3.1九點(diǎn)最臨近插值仿真驗(yàn)證
實(shí)驗(yàn)程序設(shè)計環(huán)境為AlteraQuartus II18.1 ,仿真工具為ModelSim,仿真時鐘頻率為 1000MHz ,硬件平臺采用AlteraCycloneIVE系列的EP4CE115F29C8FPGA。采用流水線結(jié)構(gòu)設(shè)計Verilog代碼,實(shí)現(xiàn)九點(diǎn)最臨近插值設(shè)計功能。圖5為目標(biāo)圖像第591行的雙線性插值仿真結(jié)果。以目標(biāo)圖像第598行第215列的雙線性插值為例,對仿真過程進(jìn)行驗(yàn)證。輸出結(jié)果為217 (d)。
圖5九點(diǎn)最臨近插值算法仿真結(jié)果
其中: y_dec=y_ratio ×598=24 494 080(d)=175c0000(h) x dec :=X ratio ×215=8 806 400(d)=866 000(h)
3.2 實(shí)驗(yàn)分析
將九點(diǎn)最臨近插值算法與雙線性插值算法在FPGA硬件資源消耗和圖像縮放算法效果兩個方面進(jìn)行分析。
3.2.1 FPGA資源消耗
表1顯示雙線性插值算法和九點(diǎn)最臨近插值算法FPGA資源消耗情況。九點(diǎn)最臨近插值算法比雙線性插值算法存儲器總數(shù)TLE(Totallogicelements)減少152;寄存器總數(shù)TR(Total registers)減少114。
表1FPGA硬件資源使用結(jié)果
3.2.2圖像插值算法效果比較分析
圖像插值算法效果的比較是對算法作用后的圖像進(jìn)行比較。采用平均梯度幅值和信息熵來定量分析圖像插值后的效果[1I-12]。平均梯度幅值能很好地反應(yīng)圖像的平滑信息,圖像的平均梯度越小,則圖像的灰度變化率的平均越小,圖像越平滑;信息熵,是在平均意義上表述圖像的總體特征,信息熵越大,表明圖像所含的信息量越多。
平均梯度幅值 T 的定義為:
信息熵 H 定義為:
對分辨率為 640×480 的3幅不同種類的原始圖像進(jìn)行不同插值效果分析,插值后的目標(biāo)圖像分辨率為 1024×768 。插值后的效果如圖6所示。
圖6原始圖像與插值后的目標(biāo)圖像結(jié)果
通過MATLAB計算不同種類圖片平均梯度幅值和信息熵,計算結(jié)果如表2所示。結(jié)果表明,3幅不同種類的圖像九點(diǎn)最臨近插值算法的平均梯度幅值為19.7474、18.835、23.902;信息熵為7.267bit、7.4207bit、7.1778bit。
表2插值后圖像的平均梯度幅值和信息熵計算結(jié)果
4結(jié)論
本文設(shè)計并實(shí)現(xiàn)一種基于FPGA的九點(diǎn)最臨近插值算法,將待測點(diǎn)附近4個相鄰點(diǎn)的灰度值通過線性公式計算出任相鄰兩點(diǎn)之間共九個點(diǎn)的灰度值,后取距離待測點(diǎn)最近的點(diǎn)的灰度值為待測點(diǎn)灰度值,實(shí)現(xiàn)九點(diǎn)最臨近插值算法功能。在FPGA硬件資源方面,九點(diǎn)最臨近插值算法比雙線性插值算法在塊存儲器總數(shù)上節(jié)約 21.2587% ,寄存器總數(shù)節(jié)約20.1413% 。對三種不同種類的圖片的圖像插值效果分析,九點(diǎn)最臨近插值算法的對比雙線性插值算法的圖像平滑度比分別為: 109.632 3% 、 104.9660% 106.5688% ,平滑度相近;三種不同種類的圖片的信息熵比分別為 99.995 9% 、 99.946 1% 、 99.933 2% 圖像所含的信息量幾乎相同。本文九點(diǎn)最臨近插值算法在使用的FPGA資源有限的情況下,能基本達(dá)到雙線性插值算法圖像插值效果,具有一定工程應(yīng)用價值。未來可以將算法區(qū)域更細(xì)分,獲得更接近真實(shí)值的插值數(shù)據(jù)。
參考文獻(xiàn):
[1]郭瑩,李倫,王鵬.基于Lanczos核的實(shí)時圖像插值算法[J].通信學(xué)報,2017,38(6):142-147.
[2]肖進(jìn)勝,饒?zhí)煊睿Z茜,等.改進(jìn)的自適應(yīng)沖擊濾波圖像超分辨率插值算法[J].計算機(jī)學(xué)報,2015,38(6):1131-1139.
[3]鄭俊杰,陸虎敏,方向忠.基于自適應(yīng)插值算法的視頻圖像縮放技術(shù)及其FPGA實(shí)現(xiàn)[J].航空電子技術(shù),2008(2):46-50.
[4]朱明達(dá),辛鵬,常嘉穎.基于FPGA的九點(diǎn)插值自適應(yīng)圖像縮放算法設(shè)計[J].液晶與顯示,2023,38(8):1075-1083.
[5]霍單雨,彭良福,楊高.基于FPGA的視頻圖像實(shí)時縮放系統(tǒng)的實(shí)現(xiàn)[J].電腦與信息技術(shù),2023,31(1):25-28.
[6]彭燕,胡丹屏,劉宇紅,等.基于FPGA實(shí)現(xiàn)的Ferguson雙三次曲面插值圖像縮放算法[J].貴州大學(xué)學(xué)報:自然科學(xué)版,2019,36(6):68-72+118.
[7]韓彬,林海全,姜宇奇.基于MATLAB與FPGA的圖像處理教程[M].北京:電子工業(yè)出版社,2023.
[8]牟新剛,周曉,鄭曉亮.基于FPGA的數(shù)字圖像處理原理及應(yīng)用[M].北京:電子工業(yè)出版社,2017.
[9]鄭俊杰.視頻圖像縮放算法在機(jī)載視頻技術(shù)通用化項目中的應(yīng)用[D].上海:上海交通大學(xué),2009.
[10]夏宇聞,韓彬.Verilog數(shù)字系統(tǒng)設(shè)計教程:第4版[M].北京:北京航空航天大學(xué)出版社,2017:149-154.
[11]蔡念,張海員,張楠.基于Contourlet的改進(jìn)雙線性插值圖像超分辨率算法[J].傳感技術(shù)學(xué)報,2011,24(1):59-64.
[12]張弘.基于FPGA的視頻圖像處理的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2020.
作者簡介:管浩洋(2000一),男,漢族,湖北襄陽人,碩士在讀,研究方向:實(shí)時圖像處理;通信作者:劉德全(1977一),男,漢族,甘肅白銀人,教授,博士,研究方向:圖像處理。