1. 程式人生 > >影象插值-雙線性插值與雙三次插值

影象插值-雙線性插值與雙三次插值

在現實生活中,我們經常會遇到把影象進行放大、幾何空間變換的情況等等,這些操作都需要在源影象和目標影象之間建立一個對映規則,使得兩影象畫素座標之間建立起一種對應關係,從而為目標影象的每一個畫素賦值。

從源影象到目標影象的對映叫前向對映,但是這種對映方法可能會出現這樣的兩個問題:源影象的好幾個畫素點對映到目標影象中的位置是相同的;目標影象某些位置沒有要賦值的畫素。這樣就要考慮如何把多個輸出值轉換成一個輸出值和對目標影象中沒有對映到的畫素該如何賦值的問題。而我們經常採用的是後向對映,這種方法比前向對映更加有效,它是從目標影象到源影象的對映,即,這樣就避免了前向對映中存在的問題,但也不可避免地存在著部分畫素映射回源影象時座標為浮點數的問題,而影象的畫素值僅在整數座標處有定義,這時候就要利用影象插值方法來給這個待求畫素點賦值。

常用的插值演算法有:最近鄰插值,雙線性插值,雙三次插值方法等等。其中最近鄰插值方法(零階插值)最簡單,運算量最小,但是效果很差,塊效應非常明顯。本書主要介紹雙線性插值方法和雙三次插值方法。

雙線性插值與雙三次插值

1、雙線性插值:

雙線性插值演算法也叫一階插值,它是利用了待求畫素點在源影象中4個最近鄰畫素之間的相關性,通過兩次線性插值得到待求畫素點的值,假設映射回源影象中的待求畫素座標點為,其中,雙線性插值方法利用該點周圍四個相鄰畫素點計算得到,其中為影象在處的畫素值,如下圖所示。

插值過程:先在水平方向上進行線性內插,由內插得到點的值,即,由內插得到點的值,即,再由點在豎直方向上線性內插得到

,即

當然結果與插值順序無關,即先在豎直方向插值,再在水平方向插值得到的結果是一樣的。雙線性插值得到的結果相對最近鄰插值法的效果要好很多,因為最近鄰插值法只利用了周圍一個畫素的相關性,而雙線性插值法利用了周圍四個畫素的相關性,但隨之而來的是計算量的增加。

2、雙三次插值

雙三次插值又叫立方卷積插值,它是利用了待求畫素點在源影象中相鄰的16個畫素點的值,即這16個畫素點的加權平均。

每個畫素值的權重由該點到待求畫素點的距離確定,這個距離包括水平和豎直兩個方向上的距離。以畫素點為例,該點在豎直和水平方向上與待求畫素點的距離分別是,則該畫素點的權重為。則待求點畫素值的計算方法如下式所示。

其中

插值核為:

其函式影象如下圖所示

我們來看一看三種方法的插值效果

下面展示了三種插值方法的效果

圖(a)是原圖,圖(b)是經過下采樣的圖,圖(c)是利用的是最近鄰插值法,圖(c)利用的是雙線性插值法,圖(e)利用的是雙三次插值法

                                          (a)原始影象           (b)降取樣後的影象 

        

                          (C)最近鄰插值 (d)雙線性插值 (e)雙三次插值

      在以上所介紹的插值方法當中,可以發現利用雙三次插值法得到影象效果是最好的,但相對於原圖來說,差距仍然很大。雙三次插值法在保留細節方面比雙線性插值法更好,它在源影象中利用的已知資訊比最近鄰插值法和雙線性插值法多,所以比其他方法好也在意料之中,但同時它的算計成本是最高的。

          其實雙線性插值和雙三次插值方法都是利用鄰域畫素的加權平均來求得待求畫素點的值,這就使得它們具有低通濾波器的性質,所以可以看出這些方法其實都是基於影象在所有區域都具有區域平滑性的這一假設,但是這一假設對於影象當中的邊緣和紋理這些地方來說是不成立的,所以插值方法會使得影象高頻分量受損,引起影象模糊和邊緣失真。