1. 程式人生 > >常用插值方法比較

常用插值方法比較

引用:http://www.cnblogs.com/okaimee/archive/2010/08/18/1802585.html

      摘 要:插值演算法在影象縮放處理中是一項基本且重要的問題。插值演算法有多種,最常用的有最近鄰插值、雙線性插值以及立方卷積插值。本文對三種插值演算法進行簡單分析並對它們的處理結果加以比較,最後總結了三種演算法各自的優缺點。

  關鍵詞:影象處理;最近鄰插值;雙線性插值;立方卷積插值
  
  1 引言
  影象幾何變換包括平移、轉置、映象和縮放等。其中前三種操作變換中,輸出影象的每一個畫素點在輸入影象中都有一個具體的畫素點與之對應。但是,在縮放操作中,輸出影象畫素點座標有可能對應於輸入影象上幾個畫素點之間的位置,這個時候就需要通過灰度插值處理來計算出該輸出點的灰度值[1]。影象插值是影象超分辨處理的重要環節,不同的插值演算法有不同的精度,插值演算法的好壞也直接影響著影象的失真程度。最常用的插值演算法有三種:
  最近鄰插值、雙線性插值、立方卷積插值,其中使用立方卷積插值達到的效果是最佳的。
  2 幾種插值演算法原理分析
  插值演算法所應用的領域較多,對影象進行縮放處理是比較典型的應用,由於影象畫素的灰度值是離散的, 因此一般的處理方法是對原來在整數點座標上的畫素值進行插值生成連續的曲面, 然後在插值曲面上重新取樣以獲得縮放影象畫素的灰度值。縮放處理從輸出影象出發,採用逆向對映方法,即在輸出影象中找到與之對應的輸入影象中的某個或某幾個畫素,採用這種方法能夠保證輸出影象中的每個畫素都有一個確定值,否則,如果從輸入影象出發來推算輸出影象,輸出影象的畫素點可能出現無灰度值的情況。因為,對影象進行縮放處理時輸出影象畫素和輸入影象之間可能不再存在著一一對應關係。下面分別對三種演算法予以介紹。
  2.1 最近鄰插值演算法最簡單的插值法是最近鄰插值法,也叫零階插值法[2]。即選擇離它所對映到的位置最近的輸入畫素的灰度值為插值結果。對二維影象,是取待測樣點周圍4 個相鄰畫素點中距離最近1 個相鄰點的灰度值作為待測樣點的畫素值。若幾何變換後輸出影象上座標為(x′,y′)的對應位置為(m,n),則示意圖如下所示:
  2.2 雙線性插值演算法雙線性插值又叫一階插值法[3],它要經過三次插值才能獲得最終結果,是對最近鄰插值法的一種改進,先對兩水平方向進行一階線性插值,然後再在垂直方向上進行一階線性插值。
  2.3 立方卷積插值演算法立方卷積插值又叫雙三次插值[2],是對雙線性插值的改進,是一種較為複雜的插值方式,它不僅考慮到周圍四個直接相鄰畫素點灰度值的影響,還考慮到它們灰度值變化率的影響。
  此法利用待取樣點附近16 個畫素點的灰度值作三次插值進行計算,還用到如圖3 所示的三次多項式 S( w)。
  首先確定 16 個鄰點座標,設其排成的矩陣為[2]:
  方卷積法就退化成雙線性插值法。由此看來,立方卷積可看成兩部分組成,其中( 1 - | m| )代表直接鄰點的灰度值對待取樣點的影響, 而l 則代表鄰點間灰度值的變化率對待取樣點的影響。與雙線性插值法相比, 立方卷積法不僅考慮了直接鄰點的灰度值對待取樣點的影響,還考慮了鄰點間灰度值變化率的影響, 因此後者所求得的待取樣點灰度值更為精確。
  3 三種插值演算法處理結果及分析
  通過採用三種插值演算法對影象進行縮放處理操作,可以直觀比較它們處理後的效果。以下是對128*128 畫素的灰度影象進行放大2 倍處理得到256*256 尺寸的影象。
  3.1 縮放操作效果圖(a)128*128 源圖 (b)最近鄰插值放大圖(c)雙線性插值放大圖 (d ) 立方卷積插值放大圖圖 4 效果圖3.2 結果分析從三種插值演算法處理影象後的對比結果可知:最近鄰插值法效果最差,有明顯的鋸齒狀,且細節部分很不清晰。雙線性插值效果其次,鋸齒難以察覺,但是影象的邊緣有輕微的模糊現象。立方卷積插值則是三種插值法中效果最佳的,它能克服前兩插值法的缺點,產生比較清晰的影象邊緣,計算精度較高。
  4 三種插值演算法優缺點總結
  最近鄰插值法的優點是計算量很小,演算法也簡單,因此運算速度較快。但它僅使用離待測取樣點最近的畫素的灰度值作為該取樣點的灰度值,而沒考慮其他相鄰畫素點的影響,因而重新取樣後灰度值有明顯的不連續性,影象質量損失較大,會產生明顯的馬賽克和鋸齒現象。
  雙線性插值法效果要好於最近鄰插值,只是計算量稍大一些,演算法複雜些,程式執行時間也稍長些,但縮放後圖像質量高,基本克服了最近鄰插值灰度值不連續的特點,因為它考慮了待測取樣點周圍四個直接鄰點對該取樣點的相關性影響。但是,此方法僅考慮待測樣點周圍四個直接鄰點灰度值的影響, 而未考慮到各鄰點間灰度值變化率的影響, 因此具有低通濾波器的性質, 從而導致縮放後圖像的高頻分量受到損失, 影象邊緣在一定程度上變得較為模糊。用此方法縮放後的輸出影象與輸入影象相比, 仍然存在由於插值函式設計考慮不周而產生的影象質量受損與計算精度不高的問題。
  立方卷積插值計算量最大,演算法也是最為複雜的。在幾何運算中,雙線性內插法的平滑作用可能會使影象的細節產生退化,在進行放大處理時,這種影響更為明顯。在其他應用中,雙線性插值的斜率不連續性會產生不希望的結果。立方卷積插值不僅考慮到周圍四個直接相鄰畫素點灰度值的影響,還考慮到它們灰度值變化率的影響。因此克服了前兩種方法的不足之處,能夠產生比雙線性插值更為平滑的邊緣,計算精度很高,處理後的影象像質損失最少,效果是最佳的。
  總之,在進行影象縮放處理時,應根據實際情況對三種演算法做出選擇,既要考慮時間方面的可行性,又要對變換後圖像質量進行考慮,這樣才能達到較為理想的結果。

  參考文獻
  [1]張巨集林. 精通Visual C++數字影象處理典型演算法及實現[M].北京:人民郵電出版社,2008.
  [2]謝鳳英,趙丹培. Visual C++數字影象處理[M]. 北京:清華大學出版社,2008.
  [3]何斌,馬天予,王運堅等. Visual C++數字影象處理[M].北京:人民郵電出版,2001