從新取樣將在您縮放圖片時更改圖像數據的數量。當縮減像素取樣(減小像素的數量)時,將從圖像中刪除一些信息。當向上從新取樣(增長像素的數量或增長像素取樣)時,將添加新的像素。能夠指定插值算法來肯定如何添加或刪除像素。算法
1. 最近相鄰插值算法/最近鄰法
最近相鄰插值算法(Nearest Neighbour Interpolation)一種速度快但精度低的圖像像素模擬方法。該法針對於二維圖像 「取待採樣點周圍4個相鄰像素點中距離最近的 1個鄰點的灰度值做爲該點的灰度值」如圖(1)。該方法用於包含未消除鋸齒邊緣的插圖,以保留硬邊緣並生成較小的文件。可是,縮放圖片時,缺乏的像素經過直接使用與之最接近的原有像素的顏色生成,也就是說照搬旁邊的像素,這樣作的結果是產生了明顯可見的鋸齒。app
最近相鄰插值算法是最簡單的一種插值算法,這種方法是當圖片放大時,缺乏的像素經過直接使用與之最接近的原有像素的顏色生成,也就是說照搬旁邊的像素。當圖片擴大時,要增長X點處的像素,因爲X點與A、B這兩個有效像素中的B點最接近,所以X點會直接照搬B點的像素,從而使到X點生成的效果與B點同樣。雖然這種算法簡單,所以處理的速度很快,但結果一般會產生明顯可見的鋸齒,效果每每不佳。spa
最近相鄰插值算法的優勢是計算量很小,算法也簡單,所以運算速度較快。但它僅使用離待測採樣點最近的像素的灰度值做爲該採樣點的灰度值,而沒考慮其餘相鄰像素點的影響,於是從新採樣後灰度值有明顯的不連續性,圖像質量損失較大,會產生明顯的馬賽克和鋸齒現象。rest
圖(1) 圖像縮放中的插值和重採樣blog
2. 兩次線性插值算法 /雙線性內插法
兩次線性插值算法(Bilinear Interpolation)是一種經過平均周圍像素顏色值來添加像素的方法。該方法可生成中等品質的圖像。圖片
兩次線性插值算法輸出的圖像的每一個像素都是原圖中四個像素(2×2)運算的結果,因爲它是從原圖四個像素中運算的,所以這種算法很大程度上消除了鋸齒現象,並且效果也比較好。數學
兩次線性插值算法是一種較好的材質影像插補的處理方式,會先找出最接近像素的四個圖素,而後在它們之間做差補效果,最後產生的結果纔會被貼到像素的位置上,這樣不會看到「馬賽克」現象。這種處理方式較適用於有必定景深的靜態影像,不過沒法提供最佳品質。io
兩次線性插值算法效果要好於最近相鄰插值算法,只是計算量稍大一些,算法複雜些,程序運行時間也稍長些,但縮放後圖像質量高,基本克服了最近相鄰插值算法灰度值不連續的特色,由於它考慮了待測採樣點周圍四個直接鄰點對該採樣點的相關性影響。可是,此方法僅考慮待測樣點周圍四個直接鄰點灰度值的影響, 而未考慮到各鄰點間灰度值變化率的影響, 所以具備低通濾波器的性質, 從而致使縮放後圖像的高頻份量受到損失, 圖像邊緣在必定程度上變得較爲模糊。class
用此方法縮放後的圖像與原圖像相比,仍然存在因爲計算模型考慮不周而產生的圖像質量退化與精度下降的問題。變量
這種方法是「利用周圍4個鄰點的灰度值在兩個方向上做線性內插以獲得待採樣點的灰度值」。即根據待採樣點與相鄰點的距離肯定相應的權值計算出待採樣點的灰度值。雙線性內插的示意圖如圖2所示,其中X 、Y座標表示像素的位置,f(*,*)表示像素的灰度值。其數學表達式爲:
f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1) (2)
3. 兩次立方插值算法 /立方卷積法
兩次立方插值算法(Bicubic Interpolation)是兩次線性插值算法的改進算法,「不只考慮到四個直接鄰點灰度值的影響,還考慮到各鄰點間灰度值變化率的影響」,利用了待採樣點周圍更大鄰域內像素的灰度值做三次插值。此法利用瞭如圖3所示的三次多項式S(w)。它輸出圖像的每一個像素都是原圖16個像素(4×4)運算的結果。該算法效果較好,運算速度也不慢。
兩次立方插值算法計算量最大,算法也是最爲複雜的。在幾何運算中,兩次線性插值算法的平滑做用可能會使圖像的細節產生退化,在進行放大處理時,這種影響更爲明顯。在其餘應用中,兩次線性插值算法的斜率不連續性會產生不但願的結果。兩次立方插值算法不只考慮到周圍四個直接相鄰像素點灰度值的影響,還考慮到它們灰度值變化率的影響。所以克服了前兩種方法的不足之處,可以產生比兩次線性插值更爲平滑的邊緣,計算精度很高,處理後的圖像像質損失最少,效果是最佳的。
S(w)的數學表達式爲:
式中,w爲自變量,S(w)爲三次多項式的值。
如圖4所示的是三次多項式進行內插,計算時用周圍的16個鄰點的灰度值按下式進行內插,則該像素的灰度值f(x,y)爲
f(x,y)=A·B·C (3)
若令k=0,則式(3)的立方卷積就退化爲雙線性內插法。所以,能夠把用三次多項式插值的立方卷積法當作由兩部分組成,其中(1—|u|)表明直接鄰點間灰度值的變化率對待採樣點的影響,而K則表明鄰點間灰度值的變化率對待採樣點的影響。與雙線性內插法相比,立方卷積法不只考慮了直接鄰點的灰度值還考慮了零點見灰度值變化率的影響,所以後者所求得的待採樣點灰度值更接近原(採樣)值。
此方法用進一步增大計算量來換取待採樣點精度的進一步提升,其效果是三種方法裏最好的,但也是三種方法中計算量最大的。
三種算法比較: