中圖分類號:TP391.4;TN402 文獻標識碼: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 引言
插值技術廣泛應用于軍事、航空、醫學、消費電子、手持設備和多媒體設備等領域的圖像處理中[1-2],且現多采用FPGA實現視頻圖像的實時處理[3-]。圖像縮放是指圖像的尺寸變小或者變大的過程,即增加或者減少原始圖像像素的個數[7。主要有最近鄰插值算法、雙線性插值算法、雙三次卷積插值算法、基于小波變換的插值算法。最近鄰插值算法是近似理想sinc函數最簡單的方法[8,但該算法會在新圖像中產生明顯的鋸齒邊緣和馬賽克現象;雙線性插值算法利用待插像素點周圍的4個像素點分別進行水平方向與垂直方向的線性插值,它利用這4個像素點與待插像素點距離這一權值來加權求和計算求出待插點的像素值,具有平滑功能,邊緣處的過渡比較自然,但需要計算每個點的插值權重,在FPGA中實現會占用較多資源;雙三次卷積插值算法和基于小波變換的插值算法需要更多的硬件資源。
基于上述分析,本文提出了九點最臨近插值算法,通過使用線性計算得出待測點映射到的位置附近的九個點灰度值,然后待插值像素點的像素值等于九個點中距離它映射到位置最近像素點的像素值。通過實驗得出,該算法與雙線性插值算法相比,不僅減少了FPGA資源的消耗,而且插值后的圖像平滑度相近。同時本文使用流水線設計九點最近鄰插值算法,在 1000MHz 時鐘下仿真,完成一幅80圖像的處理時間僅需 90ns ,增加了系統的吞吐量。
1九點最臨近插值算法原理
本文提出的九點最臨近插值算法如圖1所示。將4個像素點之間的整塊區域劃分為4個小區域,在相應區域里的取待插值像素點,像素值為距離它映射到的位置最近像素點的像素值,減少FPGA資源的消耗[]。
圖1九點最臨近插值算法示意圖

根據點 P(γβ , xα) 的4個相鄰點
、 (y0 x1, )、
、
的灰度值 I00 、 I01 、 I10 I11 ,通過線性公式計算出相鄰兩點之間的灰度值 I02 (2I20 , I22 , I21 : I12 ,共九個點的數值,后將與點 P 最近的坐標點
的灰度值作為點 P 的灰度近似值。圖中 P 應取 I22 的灰度值作為灰度近似值。相鄰兩點之間的灰度值計算式如下:
1024,位寬為8bit,以便同時讀取一組4個像素的灰度值數據,每個RAM分別輸出近鄰4個像素中的其中1個。其中圖像奇數行像素同時存于RAM0和RAM1中,偶數行像素同時存于RAM2和RAM3中。RAM地址的計算公式如式(6)所示:
ram_addr ? {img_vs_cnt[2:0],10'b0}+img_hs_cnt (6)
RAM寫使能代碼中img_vs_cnt[0]產生行像素的奇偶行判斷,作為數據向RAM0和RAM1或RAM2和RAM3賦輸入灰度值的判斷條件,即RAM0和RAM1的寫使能在緩存圖像奇數行像素時有效,RAM2和RAM3的寫使能在緩存圖像偶數行像素時有效。
2.2 數據計算
模塊設計使用流水線(Pipe_line)設計。將系統設計的規模較大、層級較多的組合邏輯電路分為幾級,使數據流在各個步驟的處理,從時間上看是連續的,在首次延遲(Latency)后,每個時鐘周期可以輸出值一次,提高數據處理的頻率,增加系統的吞吐量[0]。
2.2.1九點最臨近插值坐標設計
在進行插值坐標計算前,計算原始圖像與目標圖像在水平和垂直方向上的比率(即目標圖像映射到原始圖像的坐標步進) x ratio和y_ratio。已知原始圖像的分辨率為 640×480 、目標圖像的分辨率為1 024×768 ,且要求將比率定標為16位小數,故x_ratio和y_ratio的計算結果分別如式(7)、式(8)所示:


九點最臨近插值使用線性計算得出點 P 附近的九個點灰度值,提高最鄰近插值的取值精度。同時,九點最臨近插值算法在計算上未使用和計算雙線性插值算法中計算點 P 的4個近臨點的插值系數,因此減少設計的資源消耗。
2九點最臨近插值算法設計

為適配FPGA對插值算法的設計,需要將浮點運算轉為定點運算,將水平方向和垂直方向比率的精度定標為16位小數[]。
2.1輸入數據緩存設計
輸入數據需要存入RAM中,采用4個均為雙端口RAM對圖像進行緩存,其地址空間分配為 4×
首先產生目標圖像的 Y. , X 坐標,根據目標圖像映射到原始圖像的 Y. ,: X 坐標組:(y_dec,x_dec)計算原始圖像的 Y, X 坐標的小數位數和整數位數。原始圖像的坐標組中,[15:0]位為原始圖像的坐標的小數位數;[26:16]位為原始圖像的坐標的整數位數,并得到近鄰4個像素中左上角像素的像素級坐標組(y_int,x_int),以及原始圖像的Y、X坐標組與左上角像素坐標的距離組(y_fra,x_fra)。后根據式6,(y_int,x_int)用于產生RAM的讀地址和指示左上角像素位于圖像奇數行或偶數行的標志信號。最后,(yfra,xfra)判斷目標點距離圖1九點中哪個點最近,用于九點最臨近插值像素數據賦值的判斷依據。
2.2.2九點最臨近插值RAM數據讀取
首先,(y_int,x_int)產生RAM的讀地址和指示左上角像素Pixel00位于圖像奇數行或偶數行的標志信號,將RAM的讀地址和指示左上角像素位于奇偶行的標志信號用以對4個RAM的讀地址賦值[7]。
左上角像素位于圖像奇數行時,左上角像素Pixel_00位于RAM0中,RAM1、RAM2、RAM3的讀地址應為RAMO讀地址數值 +1 、相同、 +1 ;左上角像素位于圖像偶數行時,左上角像素Pixel00位于RAM2中,RAM0、RAM1、RAM3的讀地址應為RAM2讀地址數值 +1024 、 +1025 , +1 。
然后,根據設計的4個RAM的讀地址和左上角像素Pixel00位于圖像奇數行或偶數行的標志信號,讀取4個像素的數值,并賦值到對應像素位置。左上角像素位于圖像奇數行時,Pixel_O0、Pixel_01、Pixel_10、Pixel11分別賦RAM0、RAM1、RAM2、RAM3讀數據值;左上角像素位于圖像偶數行時,Pixel_O0、Pixel_01、Pixel_10、Pixel_11分別賦RAM2、AM3、RAMO、RAM1讀數據值。
2.2.3九點最臨近插值像素數據計算
首先,得到的近鄰4個像素中可能存在像素超出圖像邊界的情況,需要進行像素的邊界復制,對越界像素進行處理,對Pixel_dataOO、Pixel_data01、Pixeldatal0、Pixeldatal1的賦值過程如圖2所示,其中陰影部分為有效數據。其次,根據式 1~ 式5計算相鄰兩點之間的灰度值,再通過移位,得出九個點數據,如圖3所示。其中,陰影部分為相加、位移計算后的數據。然后,判定待求點P位于所在區域內,將對應區域的4個具體的灰度值取出,減少資源使用,并作為后續最臨近算法的取值,如圖4所示。最后,待插值像素點的像素值等于所在區域內,距離它映射到的位置最臨近像素點的像素值。
圖2像素越界處理

圖3獲得九點數據

圖4獲得待求點所在Area的四點數據

3 實驗仿真驗證及分析
3.1九點最臨近插值仿真驗證
實驗程序設計環境為AlteraQuartus II18.1 ,仿真工具為ModelSim,仿真時鐘頻率為 1000MHz ,硬件平臺采用AlteraCycloneIVE系列的EP4CE115F29C8FPGA。采用流水線結構設計Verilog代碼,實現九點最臨近插值設計功能。圖5為目標圖像第591行的雙線性插值仿真結果。以目標圖像第598行第215列的雙線性插值為例,對仿真過程進行驗證。輸出結果為217 (d)。
圖5九點最臨近插值算法仿真結果

其中: 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 實驗分析
將九點最臨近插值算法與雙線性插值算法在FPGA硬件資源消耗和圖像縮放算法效果兩個方面進行分析。
3.2.1 FPGA資源消耗
表1顯示雙線性插值算法和九點最臨近插值算法FPGA資源消耗情況。九點最臨近插值算法比雙線性插值算法存儲器總數TLE(Totallogicelements)減少152;寄存器總數TR(Total registers)減少114。
表1FPGA硬件資源使用結果

3.2.2圖像插值算法效果比較分析
圖像插值算法效果的比較是對算法作用后的圖像進行比較。采用平均梯度幅值和信息熵來定量分析圖像插值后的效果[1I-12]。平均梯度幅值能很好地反應圖像的平滑信息,圖像的平均梯度越小,則圖像的灰度變化率的平均越小,圖像越平滑;信息熵,是在平均意義上表述圖像的總體特征,信息熵越大,表明圖像所含的信息量越多。
平均梯度幅值 T 的定義為:

信息熵 H 定義為:

對分辨率為 640×480 的3幅不同種類的原始圖像進行不同插值效果分析,插值后的目標圖像分辨率為 1024×768 。插值后的效果如圖6所示。
圖6原始圖像與插值后的目標圖像結果

通過MATLAB計算不同種類圖片平均梯度幅值和信息熵,計算結果如表2所示。結果表明,3幅不同種類的圖像九點最臨近插值算法的平均梯度幅值為19.7474、18.835、23.902;信息熵為7.267bit、7.4207bit、7.1778bit。
表2插值后圖像的平均梯度幅值和信息熵計算結果

4結論
本文設計并實現一種基于FPGA的九點最臨近插值算法,將待測點附近4個相鄰點的灰度值通過線性公式計算出任相鄰兩點之間共九個點的灰度值,后取距離待測點最近的點的灰度值為待測點灰度值,實現九點最臨近插值算法功能。在FPGA硬件資源方面,九點最臨近插值算法比雙線性插值算法在塊存儲器總數上節約 21.2587% ,寄存器總數節約20.1413% 。對三種不同種類的圖片的圖像插值效果分析,九點最臨近插值算法的對比雙線性插值算法的圖像平滑度比分別為: 109.632 3% 、 104.9660% 106.5688% ,平滑度相近;三種不同種類的圖片的信息熵比分別為 99.995 9% 、 99.946 1% 、 99.933 2% 圖像所含的信息量幾乎相同。本文九點最臨近插值算法在使用的FPGA資源有限的情況下,能基本達到雙線性插值算法圖像插值效果,具有一定工程應用價值。未來可以將算法區域更細分,獲得更接近真實值的插值數據。
參考文獻:
[1]郭瑩,李倫,王鵬.基于Lanczos核的實時圖像插值算法[J].通信學報,2017,38(6):142-147.
[2]肖進勝,饒天宇,賈茜,等.改進的自適應沖擊濾波圖像超分辨率插值算法[J].計算機學報,2015,38(6):1131-1139.
[3]鄭俊杰,陸虎敏,方向忠.基于自適應插值算法的視頻圖像縮放技術及其FPGA實現[J].航空電子技術,2008(2):46-50.
[4]朱明達,辛鵬,常嘉穎.基于FPGA的九點插值自適應圖像縮放算法設計[J].液晶與顯示,2023,38(8):1075-1083.
[5]霍單雨,彭良福,楊高.基于FPGA的視頻圖像實時縮放系統的實現[J].電腦與信息技術,2023,31(1):25-28.
[6]彭燕,胡丹屏,劉宇紅,等.基于FPGA實現的Ferguson雙三次曲面插值圖像縮放算法[J].貴州大學學報:自然科學版,2019,36(6):68-72+118.
[7]韓彬,林海全,姜宇奇.基于MATLAB與FPGA的圖像處理教程[M].北京:電子工業出版社,2023.
[8]牟新剛,周曉,鄭曉亮.基于FPGA的數字圖像處理原理及應用[M].北京:電子工業出版社,2017.
[9]鄭俊杰.視頻圖像縮放算法在機載視頻技術通用化項目中的應用[D].上海:上海交通大學,2009.
[10]夏宇聞,韓彬.Verilog數字系統設計教程:第4版[M].北京:北京航空航天大學出版社,2017:149-154.
[11]蔡念,張海員,張楠.基于Contourlet的改進雙線性插值圖像超分辨率算法[J].傳感技術學報,2011,24(1):59-64.
[12]張弘.基于FPGA的視頻圖像處理的研究與實現[D].成都:電子科技大學,2020.
作者簡介:管浩洋(2000一),男,漢族,湖北襄陽人,碩士在讀,研究方向:實時圖像處理;通信作者:劉德全(1977一),男,漢族,甘肅白銀人,教授,博士,研究方向:圖像處理。