盛曉艷 龔超
摘要:圖像插值是圖像處理中最基本的技術(shù)之一,得到了廣泛研究和應(yīng)用 。文中詳細(xì)地闡述了常用的4種圖像插值算法:最近鄰插值、雙線性插值、雙三次插值、Lanczos插值。從圖像插值的一般原理開始,對4種算法的數(shù)學(xué)公式進(jìn)行了推導(dǎo),并給出了部分算法的實現(xiàn)代碼。然后,通過在Visual Studio 2015 + OpenCV 3.2 平臺上的實驗,分別對4種算法插值后的圖像進(jìn)行主客觀兩方面的評價,并對算法運(yùn)行效率做了比較。
關(guān)鍵詞:圖像插值;蘭索斯插值;原理;公式
中圖分類號:TP317 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)08-0153-04
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
Research on Digital Image Interpolation Algorithm
SHENG Xiao-yan, GONG Chao
(Nanjing Forestry University, Nanjing 210037, China)
Abstract: Image interpolation is one of the most basic technologies in image processing, and has been widely studied and applied. This paper detailly explains 4 commonly used image interpolation algorithms, including nearest neighbor interpolation, bilinear interpolation, bicubic interpolation, Lanczos interpolation. Starting from the general principle of image interpolation, the mathematical formulas of the 4 algorithms are derived, and the implementation codes of some algorithms are given. Then, through the experiments on the platform of Visual Studio 2015 + OpenCV 3.2, the assessment of the subjective and objective two aspects of the interpolated images and the comparison of the operating efficiency are obtained by the 4 algorithms.
Key words: image interpolation; Lanczos interpolation; principle; formula
圖像縮放廣泛應(yīng)用于軍事、航空、醫(yī)學(xué)、手持設(shè)備和多媒體設(shè)備等領(lǐng)域的圖像處理與顯示。比如日常生活中,當(dāng)用戶通過4K電視機(jī)觀看節(jié)目時,由于缺乏4K節(jié)目源,就需要將低分辨率的圖像轉(zhuǎn)換為高分辨率的圖像,這就需要用到圖像插值技術(shù)。圖像縮放的基本原理就是根據(jù)原圖像的像素值通過一定的規(guī)則計算得到目標(biāo)圖像的像素值。在圖像的縮放過程中,最重要的就是確定下面兩個問題:一是計算目標(biāo)圖像中的每一個像素值時,應(yīng)該選取原圖像中哪些像素值;二是這些選取出的像素值在計算目標(biāo)像素時權(quán)重如何確定。
圖像插值算法的一般思路[1]是這樣的。原圖像的像素位于整數(shù)坐標(biāo)表示的網(wǎng)格上,比如,我們說某像素點(diǎn)的坐標(biāo)是(10,17)。當(dāng)把這個整數(shù)的坐標(biāo)映射到新的圖像后會出現(xiàn)兩個問題:一是原像素的整數(shù)坐標(biāo)被映射到目標(biāo)圖像的小數(shù)坐標(biāo),這樣的話,必須求整到最近的整數(shù)坐標(biāo)。二是某些目標(biāo)圖像的位置沒有從原像素的位置映射坐標(biāo)(比如,在高度方向放大原圖像兩倍,則目標(biāo)圖像每隔一行就是空的)。這些問題一般被稱作前向投影問題(forward projection)。為了解決這些問題,我們采用后向解決的思路:我們逐個遍歷目標(biāo)圖像的每一像素點(diǎn)并詢問“原圖像上的哪些像素點(diǎn)需要映射到這個目標(biāo)像素點(diǎn)?”而這些原像素點(diǎn)幾乎總是位于小數(shù)的位置。所以我們必須插值原像素點(diǎn)以求出目標(biāo)像素點(diǎn)的值。
1常用插值算法
目前比較常用的插值算法有這么幾種:最鄰近插值,雙線性插值,雙三次插值,Lanczos插值等等,下面我們就逐一闡述這些算法。
1.1 最鄰近插值
最鄰近插值算法是最簡單的一種插值方法。思路是:根據(jù)目標(biāo)像素的坐標(biāo)計算出在原圖像中的坐標(biāo)(待采樣點(diǎn)的坐標(biāo))。用原圖像中最靠近待采樣點(diǎn)的像素點(diǎn)的顏色值表示目標(biāo)像素值。設(shè)(i+u, j+v)(i, j為正整數(shù), u, v為大于零小于1的小數(shù),下同)是待采樣點(diǎn)的坐標(biāo),則求目標(biāo)像素的值 f(i+u, j+v) 如圖1所示。
圖1 最近鄰插值示意圖
如果(i+u, j+v)落在A區(qū),即u<0.5, v<0.5,則將左上角像素點(diǎn)(i,j)的值賦給f(i+u, j+v),同理,落在B區(qū)則賦予右上角的像素點(diǎn)(i+1,j)的值,落在C區(qū)則賦予左下角像素點(diǎn)(i,j+1)的值,落在D區(qū)則賦予右下角像素點(diǎn)(i+1,j+1)的值。
下面給出了算法的實現(xiàn)代碼。matSrc表示原圖像,matDst表示縮放后的目標(biāo)圖像。scale_x, scale_y分別表示x,y方向的縮放因子。matDst.cols, matDst.rows分別表示目標(biāo)圖像的列數(shù)和行數(shù)。sx,sy分別表示目標(biāo)像素點(diǎn)的坐標(biāo)(i, j)對應(yīng)于與原圖像中的坐標(biāo)。cv::saturate_cast
cv::Mat matSrc, matDst;
matSrc = cv::imread("lena.jpg", 2 | 4);
matDst = cv::Mat(cv::Size(800, 1000), matSrc.type(), cv::Scalar::all(0));
double scale_x = (double)matSrc.cols / matDst1.cols;
double scale_y = (double)matSrc.rows / matDst1.rows;
for (int i = 0; i < matDst.cols; ++i)
{ int sx = cv::saturate_cast
for (int j = 0; j < matDst.rows; ++j)
{ int sy = cv::saturate_cast
matDst.at
}}
cv::imwrite("nearest_1.jpg", matDst);
這個算法的優(yōu)點(diǎn)是計算簡單方便,缺點(diǎn)是圖像容易出現(xiàn)鋸齒。
1.2 雙線性插值
一維線性插值問題即已知(x0, y0),(x1, y1)情況下,求解P(x)=a1x+a0使得P(xi)=yi,求解思路如圖2所示。
根據(jù)點(diǎn)斜式可得:
若用f(x0), f(x1)來表示y0, y1,公式(1)可改寫為:
P(x)也稱為拉格朗日差值多項式[2]。在理解了一維的線性插值后,那么二維的線性插值就容易理解了。也就是雙線性插值算法中已知四個像素點(diǎn)的顏色值,求中間某一像素點(diǎn)的顏色值f(x,y),如圖3所示。
首先在水平方向上運(yùn)用一維線性插值,公式(2),由f(i,j)和f(i+1,j)求取f(x,j),由
f(i,j+1)和f(i+1,j+1)求取f(x,j+1),然后在豎直方向運(yùn)用一維線性插值,由f(x,j)和f(x,j+1)求取f(x,y)。
f(x,j)=(i+1-x)f(i,j)+(x-i)f(i+1,j) (3)
f(x,j+1)=(i+1-x)f(i,j+1)+(x-i)f(i+1,j+1) (4)
f(x,y)=(j+1-y)f(x,j)+(y-j)f(x,j+1) (5)
把(3)和(4)代入(5)得:
f(x,y)=(j+1-y)(i+1-x)f(i,j)+(j+1-y)(x-i)f(i+1,j)+(y-j)(i+1-x)f(i,j+1)+(y-j)(x-i)f(i+1,j+1) (6)
令x=i+p,y=j+q得:
f(i+p,j+q)=(1-p)(1-q)f(i,j)+p(1-q)f(i+1,j)+(1-p)qf(i,j+1)+pqf(i+1,j+1) (7)
公式(7)即為雙線性插值算法中計算目標(biāo)圖像中坐標(biāo)為(i,j)點(diǎn)的顏色值函數(shù)。
1.3 雙三次插值[3-4]
三次卷積插值是一種更加復(fù)雜的插值方式。該算法利用待采樣點(diǎn)周圍16個點(diǎn)的顏色值作三次插值,不僅考慮到4 個直接相鄰點(diǎn)的顏色值影響,而且考慮到各鄰點(diǎn)間顏色值變化率的影響。待采樣點(diǎn)(x,y)的顏色值由其周圍16個點(diǎn)的顏色值加權(quán)內(nèi)插得到,如圖4所示。
這種算法需要選取插值基函數(shù)(16個點(diǎn)的權(quán)值)來擬合數(shù)據(jù),最常用的插值基函數(shù)[5]如圖5所示。
公式(9)或(10)即為雙三次插值算法中計算目標(biāo)圖像中坐標(biāo)為(i,j)點(diǎn)的顏色值函數(shù)。
三次運(yùn)算可以得到更接近高分辨率圖像的放大效果,但也導(dǎo)致了運(yùn)算量的急劇增加。
1.4 Lanczos插值算法
Lanczos插值算法是取待采樣點(diǎn)周圍8×8個,即64個像素點(diǎn)的顏色值來表示目標(biāo)像素點(diǎn)的顏色值。我們首先引出一維情況下的Lanczos插值算法。已知2a個點(diǎn)的函數(shù)值,求x點(diǎn)的函數(shù)值。則插值基函數(shù)[6](也稱為Lanczos 核函數(shù))如圖6。
公式(12)或(13)即為雙三次插值算法中計算目標(biāo)圖像中坐標(biāo)為(i,j)點(diǎn)的顏色值函數(shù)。
2 實驗結(jié)果及評價
目前,評價圖像插值質(zhì)量優(yōu)劣的方式主要有兩種標(biāo)準(zhǔn),一種是主觀評價[7-8],即設(shè)計實驗,由觀測者對圖像質(zhì)量進(jìn)行評價; 另一種是客觀評價[9-11],采用算法對圖像質(zhì)量進(jìn)行評價。我們首先取標(biāo)準(zhǔn)測試圖象lena.tiff(512x512)的奇數(shù)行奇數(shù)列組成新圖像quarter.tiff(256x256),然后在quarter.tiff上分別運(yùn)用上文提到的4種插值算法,得到與原圖一樣大小的圖像nearest.tiff(512x512),bilinear.tiff(512x512),bicubic.tiff(512x512), lanczos.tiff(512x512)。我們的實驗是運(yùn)行在Visual Studio 2015和OpenCV 3.2的環(huán)境下,CPU是 Intel Xeon E5620 @2.40GHz,內(nèi)存8GB。
2.1 主觀評價
主觀評價[7-8]指通過人眼對于圖像的觀察,從視覺效果上做出評價。
由于排版的需要,經(jīng)過縮小后,圖7中各幅圖像的差別較難發(fā)現(xiàn)。從未經(jīng)縮小的實驗結(jié)果原圖中能看出,除了極小的四周邊緣部分之外,lanczos算法要優(yōu)于bicubic算法,bicubic算法要優(yōu)于bilinear算法,bilinear算法要優(yōu)于nearest算法。
主觀評價方法會受到觀測者專業(yè)背景、心理和動機(jī)等主觀因素的影響,研究人員又提出客觀評價方法,即通過一定的算法計算得出一個數(shù)值,用數(shù)值的大小表示圖像的插值質(zhì)量,這里列出兩種常用的客觀評價方法。
2.2 客觀評價
客觀評價[9-11]指通過插值運(yùn)算得到的圖像與原始圖像的像素,按某一規(guī)則計算得到指標(biāo)值的大小來衡量圖像質(zhì)量的好壞。由于不同算法得到的指標(biāo)值往往不同,并且以指標(biāo)值的形式來呈現(xiàn)圖像質(zhì)量的好壞比主觀的評價更具有可比性,因此客觀的評價方法逐漸成了該領(lǐng)域評價插值算法優(yōu)劣的主流。但是,單一的規(guī)則往往存在一定的缺陷,不能全面地概括圖像的好壞。為了解決這個問題,學(xué)者們提出了多種不同的計算規(guī)則,從不同的角度去探討圖像質(zhì)量的評價標(biāo)準(zhǔn)。目前較為流行的評價標(biāo)準(zhǔn)主要有均方誤差法[9]、峰值信噪比法[10]等等。
( 1) 均方誤差( Mean square error,MSE) 是指原圖像和插值圖像各像素點(diǎn)顏色值差異的平均數(shù)。MSE 的計算公式為:
式中:K和I分別表示插值后的圖像與原圖像,m、n表示圖像的行、列數(shù)。MSE的值越小,表明R和I的差異越小,即插值算法越好。反之?dāng)?shù)值越高表明兩幅圖像的差異越大,即插值算法越差。
(2) 峰值信噪比( Peak signal to noise ratio,PSNR) 是一種比較常用的圖像評價指標(biāo),計算公式為:
式中: MAX表示圖像顏色的最大數(shù)值,8位圖像取值為255; MSE為圖像之間的均方誤差。PSNR 的單位為dB,數(shù)值越大表示兩個圖像越相似,也就是插值效果越好。普遍基準(zhǔn)為30dB,30dB以下的圖像劣化較為明顯。實驗結(jié)果顯示,PSNR 值并不能總與人眼看到的視覺品質(zhì)一致。
從表2中可以看出,從左到右每個算法所用的CPU時間逐漸增加,這個與每個算法的理論是相吻合的,因為它們分別是從1, 2×2,4×4,8×8個像素的顏色值來計算目標(biāo)圖像像素的顏色值。
3結(jié)束語
本文通過對常用的4種圖像插值算法原理和實際代碼驗證分析,我們發(fā)現(xiàn)這4種插值算法中,Lanczos插值和雙三次插值的效果最好,但比較耗時間,最近鄰插值的效果較差,但速度最快。雙線性插值在效果和速度上都介于上面的算法之間,在一般的應(yīng)用中常被選用。展望未來,作為一個很有實用價值的研究領(lǐng)域,圖像插值將會有更多的研究和應(yīng)用。
參考文獻(xiàn):
[1] Adrian Kaehler, Gary Bradski. Learning OpenCV 3 [M]. OReilly,2016: 300-301.
[2] 張鐵,閻家斌.數(shù)值分析[M].冶金工業(yè)出版社,2007: 143-145.
[3]Zhou D,Shen X,Dong W.Image zooming using directional cubic convolution interpolation[J]IET Image Processing,2012,6(6) :627-634.
[4] Hou H S,Andrews H.Cubic splines for image interpolation and digital filtering [J].IEEE Transactions on Acoustics Speech & Signal Processing,1979,26(6):508-517.
[5] Robert G. Keys. Cubic convolution interpolation for digital image processing [J].IEEE Transactions on Signal Processing, Acoustics, Speech, and Signal Processing, 1981,29(6):1153–1160.
[6] Wilhelm Burger, Mark J. Burge. Principles of digital image processing: core algorithms [M]. Springer, 2009: 231–232.
[7] Sheikh H R,Bovik A C. Image information and visual quality[J].IEEE Transactions on Image Processing,2006,15(2):430-444.
[8] Liu S,Wu L,Gong Y,et al. Overview of image quality assessment[J].Science Paper Online,2011,6( 7) : 501-506.
[9] Sakowicz B,Kaminski M,Ritter R,et al. Methods of 3D images quality assessment[C]. IEEE International Conference on Mixed Design of Integrated Circuits &Systems.[S.l.]: IEEE,2015:123-128.
[10] Sheikh H R,Sabir M F,Bovik A C. A statistical evaluation of recent full reference image quality assessment algorithms[J].IEEE Transactions on Image Processing,2006,15(11):3440-3451.
[11] Wang Z,Li Q. Information content weighting for perceptual image quality assessment[J].IEEE Transactions on Image Processing,2011,20(5):1185-1198.
【通聯(lián)編輯:唐一東】