1. 程式人生 > >影象中的差值演算法

影象中的差值演算法

插值(Interpolation),有時也稱為“重置樣本”,是在不生成畫素的情況下增加影象畫素大小的一種方法,在周圍畫素色彩的基礎上用數學公式計算丟失畫素的色彩。簡單地點,插值是根據中心畫素點的顏色引數模擬出周邊畫素值的方法,是數碼相機特有的放大數碼照片的軟體手段。 
  一、認識插值的演算法

  “插值”最初是電腦術語,後來引用到數碼影象上來。影象放大時,畫素也相應地增加,但這些增加的畫素從何而來?這時插值就派上用場了:插值就是在不生成畫素的情況下增加影象畫素大小的一種方法,在周圍畫素色彩的基礎上用數學公式計算丟失畫素的色彩(也有的有些相機使用插值,人為地增加影象的解析度)。所以在放大影象時,影象看上去會比較平滑、乾淨。但必須注意的是插值並不能增加影象資訊。以圖1為原圖(見圖1),以下是經過不同插值演算法處理的圖片。


  1.最近畫素插值演算法
  最近畫素插值演算法(Nearest Neighbour Interpolation)是最簡單的一種插值演算法,當圖片放大時,缺少的畫素通過直接使用與之最接近的原有的畫素的顏色生成,也就是說照搬旁邊的畫素,這樣做的結果是產生了明顯可見的鋸齒(見圖2)。

  2.雙線性插值演算法
  雙線性插值演算法(Bilinear Interpolation)輸出的影象的每個畫素都是原圖中四個畫素(2×2)運算的結果,這種演算法極大地消除了鋸齒現象(見圖3)。

  3.雙三次插值演算法
  雙三次插值演算法(Bicubic Interpolation)是上一種演算法的改進演算法,它輸出影象的每個畫素都是原圖16個畫素(16×16)運算的結果(見圖4)。這種演算法是一種很常見的演算法,普遍用在影象編輯軟體、印表機驅動和數碼相機上。

  4.分形演算法
  分形演算法(Fractal Interpolation)是Altamira Group提出的一種演算法,這種演算法得到的影象跟其他演算法相比更清晰、銳利(見圖5)。

  現在有許多數碼相機廠商將插值演算法用在了數碼相機上,並將通過演算法得到的解析度值大肆宣傳,固然他們的演算法比雙三次插值演算法等演算法先進很多,但是事實是影象的細節不能憑空造出來的。因為插值解析度是數碼相機通過自身的內建軟體來增加影象的畫素,從而達到增大解析度的效果。

  二、插值的影響

  使用數碼變焦拍出來的照片不清晰,這是數碼變焦最遭人垢病的地方,事實上,這只是一種片面的說法。
  數碼變焦對照片清晰度的影響有多大,取決於數碼相機在變焦時,CCD是否進行了插值運算。在使用高畫素的情況下,如果採用數碼變焦進行拍攝,則此時CCD並不會有任何插值運算,數碼變焦對最終得到的數碼照片的清晰度的影響將會因此而變得極其有限。舉個例子,一臺CCD畫素為520萬、最大解析度為2560×1920的數碼相機,如果採用2×的數碼變焦來進行拍攝的話,那麼成像過程中只會有一半CCD在工作。換句話說,數碼相機並不會使用類似“在一個畫素點周圍新增八個畫素點”的插值演算法進行成像,而是通過降低解析度的方法,即1280×960這個解析度指標來進行成像。對於一般的數碼照片來說,1280×960這個解析度指標已經足夠優秀了,它與2560×1920解析度的差別將會因為沒有插值運算的參與而變得可以接受。不過這種現象只限於某些比較高階的數碼相機,對於那些千元以下的定焦數碼相機來說,使用數碼變焦就意味著必然的插值運算,犧牲解析度的後果使得照片拍攝者只能有兩個選擇:要麼得到一張模糊不清的“全尺寸”照片、要麼得到一張質量可以保證但解析度只有類似320×240這樣的“迷你”畫片。

插值演算法的拓展介紹

Inverse Distance to a Power(反距離加權插值法) 
Kriging(克里金插值法) 
Minimum Curvature(最小曲率) 
Modified Shepard's Method(改進謝別德法) 
Natural Neighbor(自然鄰點插值法) 
Nearest Neighbor(最近鄰點插值法) 
Polynomial Regression(多元迴歸法) 
Radial Basis Function(徑向基函式法) 
Triangulation with Linear Interpolation(線性插值三角網法) 
Moving Average(移動平均法) 
Local Polynomial(區域性多項式法) 
下面簡單說明不同演算法的特點。

1、距離倒數乘方法     
距離倒數乘方格網化方法是一個加權平均插值法,可以進行確切的或者圓滑的方式插值。方次引數控制著權係數如何隨著離開一個格網結點距離的增加而下降。對於一個較大的方次,較近的資料點被給定一個較高的權重份額,對於一個較小的方次,權重比較均勻地分配給各資料點。 計算一個格網結點時給予一個特定資料點的權值與指定方次的從結點到觀測點的該結點被賦予距離倒數成比例。當計算一個格網結點時,配給的權重是一個分數,所有權重的總和等於1.0。當一個觀測點與一個格網結點重合時,該觀測點被給予一個實際為 1.0 的權重,所有其它觀測點被給予一個幾乎為 0.0 的權重。換言之,該結點被賦給與觀測點一致的值。這就是一個準確插值。 距離倒數法的特徵之一是要在格網區域內產生圍繞觀測點位置的"牛眼"。用距離倒數格網化時可以指定一個圓滑引數。大於零的圓滑引數保證,對於一個特定的結點,沒有哪個觀測點被賦予全部的權值,即使觀測點與該結點重合也是如此。圓滑引數通過修勻已被插值的格網來降低"牛眼"影響。

2、克里金法    
克里金法是一種在許多領域都很有用的地質統計格網化方法。克里金法試圖那樣表示隱含在你的資料中的趨勢,例如,高點會是沿一個脊連線,而不是被牛眼形等值線所孤立。 克里金法中包含了幾個因子:變化圖模型,漂移型別 和礦塊效應。

3、最小曲率法 
最小曲率法廣泛用於地球科學。用最小曲率法生成的插值面類似於一個通過各個資料值的,具有最小彎曲量的長條形薄彈性片。最小曲率法,試圖在儘可能嚴格地尊重資料的同時,生成儘可能圓滑的曲面。 使用最小曲率法時要涉及到兩個引數:最大殘差引數和最大迴圈次數引數來控制最小曲率的收斂標準。

4、多元迴歸法 
多元迴歸被用來確定你的資料的大規模的趨勢和圖案。你可以用幾個選項來確定你需要的趨勢面型別。多元迴歸實際上不是插值器,因為它並不試圖預測未知的 Z 值。它實際上是一個趨勢面分析作圖程式。 使用多元迴歸法時要涉及到曲面定義和指定XY的最高方次設定,曲面定義是選擇採用的資料的多項式型別,這些型別分別是簡單平面、雙線性鞍、二次曲面、三次曲面和使用者定義的多項式。引數設定是指定多項式方程中 X 和 Y組元的最高方次 。

5、徑向基本函式法 
徑向基本函式法是多個數據插值方法的組合。根據適應你的資料和生成一個圓滑曲面的能力,其中的復二次函式被許多人認為是最好的方法。所有徑向基本函式法都是準確的插值器,它們都要為尊重你的資料而努力。為了試圖生成一個更圓滑的曲面,對所有這些方法你都可以引入一個圓滑係數。你可以指定的函式類似於克里金中的變化圖。當對一個格網結點插值時,這些個函式給資料點規定了一套最佳權重。

6、謝別德法 
謝別德法使用距離倒數加權的最小二乘方的方法。因此,它與距離倒數乘方插值器相似,但它利用了局部最小二乘方來消除或減少所生成等值線的"牛眼"外觀。謝別德法可以是一個準確或圓滑插值器。 在用謝別德法作為格網化方法時要涉及到圓滑引數的設定。圓滑引數是使謝別德法能夠象一個圓滑插值器那樣工作。當你增加圓滑引數的值時,圓滑的效果越好。

7、三角網/線形插值法 
三角網插值器是一種嚴密的插值器,它的工作路線與手工繪製等值線相近。這種方法是通過在資料點之間連線以建立起若干個三角形來工作的。原始資料點的連結方法是這樣:所有三角形的邊都不能與另外的三角形相交。其結果構成了一張覆蓋格網範圍的,由三角形拼接起來的網。 每一個三角形定義了一個覆蓋該三角形內格網結點的面。三角形的傾斜和標高由定義這個三角形的三個原始資料點確定。給定三角形內的全部結點都要受到該三角形的表面的限制。因為原始資料點被用來定義各個三角形,所以你的資料是很受到尊重的。

8.自然鄰點插值法 
自然鄰點插值法(NaturalNeighbor)是Surfer7.0才有的網格化新方法。自然鄰點插值法廣泛應用於一些研究領域中。其基本原理是對於一組泰森(Thiessen)多邊形,當在資料集中加入一個新的資料點(目標)時,就會修改這些泰森多邊形,而使用鄰點的權重平均值將決定待插點的權重,待插點的權重和目標泰森多邊形成比例[9]。實際上,在這些多邊形中,有一些多邊形的尺寸將縮小,並且沒有一個多邊形的大小會增加。同時,自然鄰點插值法在資料點凸起的位置並不外推等值線(如泰森多邊形的輪廓線)。

9.最近鄰點插值法 
最近鄰點插值法(NearestNeighbor)又稱泰森多邊形方法,泰森多邊形(Thiesen,又叫Dirichlet或Voronoi多邊形)分析法是荷蘭氣象學家A.H.Thiessen提出的一種分析方法。最初用於從離散分佈氣象站的降雨量資料中計算平均降雨量,現在GIS和地理分析中經常採用泰森多邊形進行快速的賦值[2]。實際上,最近鄰點插值的一個隱含的假設條件是任一網格點p(x,y)的屬性值都使用距它最近的位置點的屬性值,用每一個網格節點的最鄰點值作為待的節點值[3]。當資料已經是均勻間隔分佈,要先將資料轉換為SURFER的網格檔案,可以應用最近鄰點插值法;或者在一個檔案中,資料緊密完整,只有少數點沒有取值,可用最近鄰點插值法來填充無值的資料點。有時需要排除網格檔案中的無值資料的區域,在搜尋橢圓(SearchEllipse)設定一個值,對無資料區域賦予該網格檔案裡的空白值。設定的搜尋半徑的大小要小於該網格檔案資料值之間的距離,所有的無資料網格節點都被賦予空白值。在使用最近鄰點插值網格化法,將一個規則間隔的XYZ資料轉換為一個網格檔案時,可設定網格間隔和XYZ資料的資料點之間的間距相等。最近鄰點插值網格化法沒有選項,它是均質且無變化的,對均勻間隔的資料進行插值很有用,同時,它對填充無值資料的區域很有效。