?

基于二階牛頓插值的圖像自適應縮放設計及實現

2020-09-09 03:09楊瑞祺楊依忠解光軍
計算機應用與軟件 2020年9期
關鍵詞:二階像素點插值

王 康 楊瑞祺 楊依忠 解光軍

(合肥工業大學電子科學與應用物理學院 安徽 合肥 230601)

0 引 言

圖像縮放技術被廣泛地應用于各類消費類電子產品、醫學圖像處理以及安防監控等領域中[1-3]。圖像縮放處理算法的種類較多,根據算法是否對邊緣進行處理,可以大致分為線性的圖像插值算法和非線性的圖像插值算法[4]。線性的插值方法如最鄰近插值、雙線性插值和雙三次插值等經典的插值算法[5-6],在計算目標圖像的像素時只通過其位置和鄰域內的原始像素數據計算,不考慮邊緣處的圖像信息變化,縮放后效果會導致邊緣模糊不清。葛晨陽等[7]設計了一種圖像混合插值縮放的IP核,其相較于雙三次插值硬件消耗少,但也沒有對圖像邊緣進行處理。對于非線性的插值算法,研究較多的是基于邊緣的圖像縮放算法。邊緣檢測算法包括Sobel[8]、Prewitt[9]和Canny[10]以及基于形態學的邊緣檢測算法[11]等。Chen等[12]提出的基于Sobel算子的邊緣插值算法和尉成勇等[13]提出的改進邊緣方向判定的圖像插值算法分別通過Soble算子和Canny算子對圖像邊緣進行檢測,然后對邊緣進行一維的方向插值計算,非邊緣采用線性插值的方法,這樣會使邊緣區域的非邊緣像素參與邊緣區域計算,導致得到的目標圖像仍會有一些模糊。還有一些采用邊緣自適應縮放的算法,如Cha等[14]提出了一種誤差修正的邊緣插值方法(EASE),但算法復雜度較高。王效靈等[15]和李自勤等[16]提出邊緣自適應圖像縮放算法(EASA),采用平均思想找到邊緣位置,然后選取邊緣方向上的點進行插值計算,該算法需要考慮插值點鄰域內多個像素點,且不同方向的插值系數計算復雜。李春龍等[17]提出自適應立方卷積算法,在平緩區域采用雙三次插值算法,在邊緣區域根據插值點的位置進行兩輪插值,雖然效果不錯,但運算量大。齊敏等[18]通過數據融合的方式對不同區域的插值點進行插值計算,算法通過多次歸一化方法求系數,但縮放效果并不理想,且計算過程繁雜。劉政林等[19]提出基于邊緣的實時縮放算法,在邊緣檢測上考慮欠缺,導致邊緣區域的縮放效果不佳。葉森等[20]提出一種基于三次拉格朗日的插值算法,但該算法只考慮了水平方向和豎直方向的邊緣檢測,忽略了45度和135度方向上的邊緣檢測,且計算復雜。此外,詹毅等[21]提出一個變指數變分模型的插值算法,范清蘭等[22]提出一種基于NSCT的區域自適應圖像插值算法,Lee等[23]提出一種利用泰勒級數近似的邊緣引導圖像插值方法,以及近些年提出的基于深度學習的圖像插值算法[24]等。盡管這些算法的縮放效果不錯,但都比較復雜,難以用硬件實現。

基于上述分析,本文提出一種基于二階牛頓插值的自適應縮放算法。對處于非邊緣位置的像素點,根據插值點位置關系選擇一組合適的計算方法得到目標像素值。對處于邊緣位置的像素點,不是簡單采用對邊緣進行一維插值的方法,而是對多個方向及其相關度進行權重分配計算得到目標像素值。處理結果相比傳統的縮放算法效果更好,且計算復雜度低,利于硬件實現。

1 算法設計

在對圖像進行實時縮放處理時,通常對二維圖像的水平方向和垂直方向分別進行插值處理。假設把分辨率為M×N原始圖像縮放為分辨率為U×V的目標圖像,可以先對水平方向進行縮放得到大小為U×N的中間圖像,然后再對該中間圖像垂直方向進行縮放得到目標圖像。對水平方向進行縮放只需考慮一維方向的縮放處理,假設對水平方向進行插值處理,將一行像素序列看成距離為1的等距節點,則目標像素點與原始圖像在水平方向上的位置關系如圖1所示。其中:f是目標像素點在水平方向上映射到原始圖像中的位置;f1、f2、f3和f4為f水平鄰域內的四個原始像素點;Δx是f和f2之間的距離,取值范圍為0≤Δx<1,且t=1+Δx。

圖1 目標像素水平方向插值示意圖

選取二階牛頓插值算法來計算f的像素值時,可以用f1、f2和f3三個原始像素點作為一組像素或f2、f3和f4三個原始像素點作為一組來計算目標像素f的像素值,兩種方式的插值公式分別為:

(1)

(2)

式中:Δf1和Δf2分別為f1和f2的一階差分;Δ2f1和Δ2f2分別為f1和f2的二階差分。

當f處于非邊緣位置時,所有計算結果幾乎一致,如果插值位置位于邊緣區域時,考慮到其位置以及相關性,需要選取其中的一組來計算以得到更逼近邊緣位置像素點的像素值。將t=1+Δx代入式(1)和式(2)進行化簡可得:

(3)

(-Δx2+2Δx)f3

(4)

由插值理論可知,當f點處于邊緣位置時,如果接近f2,則希望計算目標像素的像素值更接近f2的像素值,如果接近f3,則希望計算目標像素的像素值更接近f3的像素值,這樣可以使插值圖像的邊緣寬度變窄,不會因邊緣寬而導致插值圖像的邊緣模糊。從式(3)和式(4)可以看出,選取第一組像素時f1所占權重和選取第二組像素時f4所占權重一樣,兩像素點對計算目標像素的影響也一樣。下面分別考慮兩組計算公式中f2和f3的權重對目標像素的影響。

對式(3)中f2的系數和式(4)中f2的系數設定關于Δx的函數為y1和h1,如圖2所示。對式(3)中f3的系數和式(4)中f3的系數設定關于Δx的函數為y2和h2,如圖3所示。

圖2 第一組f2權重函數和第二組f2權重函數

圖3 第一組f3權重函數和第二組f3權重函數

當Δx小于0.5時,從圖2中可以看到y1的值一直大于h1的值,經求導得到y1的導數始終小于h1的導數,并且當Δx越小時,y1的導數越小,h1的導數越大。這說明當插值點f接近f2點時,第一組公式f2所占權重大于第二組,且第一組f2的權重隨著Δx增大緩慢減小。從圖3中可以看出,h2的值此時一直大于y2的值,說明當插值點f接近f2時,第一組公式f3所占權重小于第二組,且通過h2和y2的導數可知第一組f3權重隨著Δx增加緩慢變大。由此,當Δx小于0.5時,選取第一組公式計算得到的目標值更接近f2的像素值。同理,當Δx大于0.5時,選取第二組公式計算得到的目標值更接近f3的像素值。因此,對于水平方向縮放的插值計算公式可改寫如下:

(5)

由水平縮放過后得到中間圖像,需再對中間圖像45度、135度和垂直方向進行縮放處理以得到目標圖像。其插值示意圖如圖4所示。

圖4 中間圖像插值示意圖

圖4中空心圓形和空心菱形分別表示插值點距離像素點f(i,j)小于0.5和大于0.5兩種情況,實心圓點分別是插值點鄰域內的各原始像素點。對水平縮放后的中間圖像進行垂直方向上的縮放,假設空心圓為目標像素點所在位置,u的值小于等于0.5,根據水平方向的插值原理,在f(i,j)的3×3鄰域內分別選取垂直方向、45度方向和135度方向各一組像素,計算其二階差分分別為Δ2f1、Δ2f2和Δ2f3。將閾值T分別與Δ2f1、Δ2f2和Δ2f3的絕對值進行比較,如果三者中有小于T值的,則說明在該方向上是像素值變化較小的平緩區域。依次按照垂直方向、45度方向和135度方向進行判斷是否小于T,直到首次符合條件時,就利用該方向上三個像素點進行二階牛頓插值計算得到目標像素值。對于三者都大于T時,則說明該目標像素在三個方向都不處于平緩區域,需利用三個方向的像素點進行計算得到目標像素值。方法如下:

考慮到二階差分越小的方向,其相關性越大,所占權重應該越高,對Δ2f1、Δ2f2和Δ2f3進行歸一化處理,得到三個方向的權重系數,公式如下:

(6)

(7)

(8)

同時,根據式(5)計算三個方向的二階牛頓插值結果,為簡化計算,對于45度和135度方向上Δx的值直接選用垂直方向上Δx的值,即圖4中u的值,計算得到三個方向的結果分別為F1、F2和F3,與各自方向上的權重系數相乘后再求和,因為三個方向權重系數之和為2,所以最后需乘以1/2得到目標像素值,計算公式如下:

(9)

同理,假設目標像素位置處于圖4中空心菱形的位置,即u大于0.5,則選擇f(i,j+1)像素點3×3鄰域的像素點,采用同樣的方法計算目標像素點的像素值。

考慮到邊緣位置的判斷,通過設定一個閾值T作為參數。參數選取的大小會導致縮放效果不同,通過實驗,選取不同的參數T對多組不同圖像進行先放大兩倍再縮小到原圖像大小,然后求出不同閾值下縮放過后的峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)和邊緣保護指數(Edge Protection Index, EPI)。通過對比實際縮放后視覺效果,以及對PSNR和EPI比較分析,本文算法選取閾值T為50。

2 實驗結果分析

實驗選取了2幅大小為256×256像素的灰度圖像House和Baboom,3幅大小為512×512像素的灰度圖像Items、Ruler和Bicycle作為原始圖像。使用雙線性插值算法[5]、雙三次插值算法[6]、數據融合算法[18]、邊緣插值算法[19]及本文算法對圖像進行縮放處理。

2.1 縮放結果圖對比

為了直觀地對比不同算法處理的效果,以灰度圖像Ruler的實驗結果為例。截取圖像處于邊緣且大小為60×60像素的區域圖像,將原圖中60×60像素大小的原圖截取放大,如圖5(c)所示,放大后可以清楚地看到原圖像中區域的細節,使得對比效果更加直觀,再分別用雙線性插值算法、雙三次插值算法、數據融合算法、邊緣插值算法和本文算法對其放大后得到大小160×160像素的圖像。

圖5 Ruler放大后不同算法結果

由圖5可知,雙線插值算法縮放后由于高頻分量丟失而導致圖片整體變得模糊,雙三次插值的效果比雙線性插值要好些,但由于兩種算法都未考慮到對圖像邊緣進行處理,因此邊緣處理效果都不好。數據融合算法同樣由于高頻分量丟失,導致放大后圖像模糊。邊緣插值算法在邊緣處僅考慮了水平和垂直方向上像素的相關性,并未考慮45度和135度方向上的相關性,且沒有考慮到插值點最近位置像素所占權重問題,因此處理后的結果也不盡如人意,甚至對部分圖像處理的結果沒有雙三次插值的效果好。而本文算法在邊緣處和細節豐富區域的處理更接近原圖,雖然進行了放大處理,圖像的細節和原圖接近,說明其高頻分量得到保持。同時邊緣紋理和原圖基本一致,說明其在邊緣處理上效果也相對較好。因此,本文算法對圖像的縮放總體效果更優。

為了更進一步比對不同算法處理效果,將Bicycle原圖中60×60像素大小的原圖截取圖放大至更大比例的4倍,如圖6(c)所示,可以清楚地看到原圖像中區域的細節,同時采用不同算法分別對60×60像素大小的截取圖4倍放大后顯示,結果如圖6(d-k)所示??梢钥闯?,雙線性插值、雙三次插值和數據融合算法放大后邊緣區域已經比較模糊,邊緣插值算法放大后的圖像出現一定程度的失真而本文算法在放大4倍后仍能夠保留邊緣的信息且抑制了高頻分量丟失導致圖像模糊的情況。

圖6 Bicycle放大4倍后不同算法結果

2.2 客觀評價指標對比

峰值信噪比(PSNR)是最常用的客觀評價圖像處理效果的量化指標,其計算公式如下:

(10)

式中:F0代表大小為M×N像素的原始圖像;F表示處理過后的和原圖像相同大小的圖像。PSNR越大,表示目標圖像信息損失越少,圖像越接近于原始圖像,處理效果則越好。

從客觀評價指標的角度說明邊緣保護效果的好壞,通常用邊緣保護指數(EPI)作為評價指標,其計算公式如下:

(11)

式中:ps表示處理過后的圖像;po表示原始圖像。EPI值越接近1,則邊緣保護得越好。

實驗選用了House、Baboom、Items、Ruler和Bicycle圖像,用不同算法分別放大兩倍再縮小還原,計算其峰值信噪比(PSNR)的值和邊緣保護指數(EPI)的值,結果分別如表1和表2所示。從表1中可以看出,本文算法相對于其他4種算法,PSNR均有大幅度的提升。從表2中可以看出,本文算法的EPI與其他4種算法相比更接近1,對邊緣的保護最好??梢?,本文算法對圖像的處理效果明顯優于其他4種算法。

表1 不同算法PSNR

表2 不同算法EPI

3 算法硬件實現

3.1 硬件實現方案

硬件實現方案如圖7所示,首先通過行數據緩存模塊對輸入的圖像數據進行行緩存,采用FPGA的內部存儲資源,用三組line-buffer來實現,因為在水平方向利用二階牛頓插值需要用到三個像素點來進行計算,為了實現并行運算,采用三組line-buffer同時緩存一行像素數據。然后通過水平方向的插值計算模塊完成對水平方向的插值計算,將計算得到的數據結果暫存到異步FIFO中,等待一行像素計算完成以后,再將異步FIFO中的數據送入到外部的DDR3存儲器中,其原因是為了滿足DDR3的高速要求,FIFO模塊采用兩組進行乒乓操作。等一幀圖像水平插值完成以后,再從DDR3中讀取數據。通過列數據緩存單元將用于插值計算的三列數據從DDR3中讀出存入line-buffer中,對垂直方向、45度方向和135度方向分別進行插值計算。最終將插值計算的結果存入輸出緩存模塊中,將數據輸出。其中DDR3控制器直接調用IP核來實現DDR3的讀寫控制。

圖7 硬件實現方案

3.2 硬件設計

根據硬件實現方案,下面以最主要的水平插值模塊和多方向插值模塊為例進行硬件設計說明。

3.2.1水平插值模塊設計

首先使用line-buffer對圖像的行數據進行緩存,坐標系數生成模塊通過對縮放系數進行累加確定源像素地址和插值系數,然后根據像素地址從line-buffer中讀取參與計算的三個相鄰像素點,最后通過插值計算模塊計算出目標像素值,從而完成水平方向的縮放處理。模塊設計原理如圖8所示。由于設計中縮放系數使用浮點數計算,需對其放大256倍處理,放大后縮放系數用24位二進制數表示,其中后8位為插值系數,用于確定各像素點權重,前16位整數部分用于確定目標像素位置。

圖8 水平插值模塊硬件設計原理圖

3.2.2多方向插值模塊設計

多方向插值模塊的設計原理和水平插值模塊原理類似。先從列數據緩存器中讀取目標像素3×3鄰域內用于計算的7個像素點,分別計算出垂直方向、45度方向和135度方向的二階差分和二階牛頓插值結果,將結果存入寄存器中。之后將二階差分與設定的閾值比較作為后續多路選擇器的判斷條件,如果判斷為非邊緣區域,多路選擇器會選擇一個方向的插值結果作為最終插值結果;如果判斷是邊緣區域,則通過式(9)計算得到最終的插值結果。模塊設計的仿真結果如圖9所示,其中信號T為設定閾值,信號k為垂直方向插值系數,從列數據緩存模塊讀取的是相鄰三列數據,在沿水平方向計算完成后,k的值才會更新。輸入的7個像素點信號分別是f_00、f_01、f_02、f_11、f_20、f_21和f_22,三個方向的二階差分絕對值對應的信號分別為r_h11、r_h22和r_h33;信號F1、F2和F3分別是用24位的二進制數表示的三個方向的牛頓二階插值結果;信號o_pixel為最終輸出的目標像素值。由于采用流水線的設計方法,最終輸出的目標像素比輸入像素延遲了兩拍。

圖9 多方向插值模塊仿真結果圖

3.3 FPGA實現及驗證

硬件實現和驗證所使用的FPGA開發板選用的是ALTERA公司Stratix V系列的5SGXEA7N2F45C2N FPGA開發板。在Quartus II 15.0軟件平臺上完成了設計及驗證。FPGA設計驗證平臺如圖10所示,首先通過Quantum Data980給出視頻圖像的RGB數據、水平同步信號、垂直同步信號和使能信號到FPGA,再將FPGA對數據進行縮放處理,再將TTL轉HDMI橋接芯片將信號轉換成HDMI標準的信號格式,最后輸出到顯示器上。FPGA實現及驗證裝置如圖11所示。

圖10 FPGA設計驗證平臺

圖11 FPGA實現及驗證裝置

實驗選取了2幅512×512像素大小的圖像進行驗證,將其放大到1 024×1 024像素大小后輸出到顯示器上,得到的結果如圖12所示,可以看到輸出結果效果良好。

圖12 硬件驗證結果

4 結 語

本文提出一種基于牛頓二階插值的邊緣自適應縮放算法,對原始圖像的水平方向根據插值點映射的位置利用二階牛頓插值算法進行插值計算得到中間圖像,著重考慮垂直方向、45度方向和135度方向上的相關性,通過計算三個方向上的二階差分并與閾值作比較,選擇合適的算法計算得到目標像素值。對算法進行硬件的實現與驗證,結果表明,無論從圖像處理效果還是客觀評價指標結果看,本文算法與其他相關算法相比,其縮放效果及對圖像邊緣的保護明顯有優勢,且算法復雜度不高,利于硬件實現。

猜你喜歡
二階像素點插值
滑動式Lagrange與Chebyshev插值方法對BDS精密星歷內插及其精度分析
圖像二值化處理硬件加速引擎的設計
二階整線性遞歸數列的性質及應用
基于局部相似性的特征匹配篩選算法
基于像素點篩選的艦船湍流尾跡檢測算法
基于pade逼近的重心有理混合插值新方法
基于canvas的前端數據加密
二階矩陣、二階行列式和向量的關系分析
混合重疊網格插值方法的改進及應用
二次函數圖像與二階等差數列
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合