算法之線性插值原理



線性插值法是根據已知兩項有關的對應關係資料估算第三項對應的未知資料。編程

什麼是線性插值原理,什麼是雙線性插值數組

簡單比方,原來的數值序列:0,10,20,30,40函數

線性插值一次爲:0,5,10,15,20,25,30,35,40優化

即認爲其變化(增減)是線形的,能夠在座標圖上畫出一條直線spa

在數碼相機技術中,這些數值能夠表明組成一張照片的不一樣像素點的色彩、色度等指標。數學

爲了方便理解,先考慮一維狀況下的線性插值變量

對於一個數列c,咱們假設c[a]到c[a+1]之間是線性變化的原理

那麼對於浮點數x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);擴展

把這種插值方式擴展到二維狀況:float

對於一個二維數組c,咱們假設對於任意一個浮點數i,c(a,i)到c(a+1,i)之間是線性變化的,c(i,b)到c(i,b+1)之間也是線性變化的(a,b都是整數) ,那麼對於浮點數的座標(x,y)知足(a<=x<a+1,b<=y<b+1),咱們能夠先分別求出c(x,b)和c(x,b+1):

c(x,b) = c[a+1][b]*(x-a)+c[a][b]*(1+a-x);

c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);

好,如今已經知道c(x,b)和c(x,b+1)了,而根據假設c(x,b)到c(x,b+1)也是線性變化的,因此:

c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)

這就是雙線性插值。

    在數學上,雙線性插值是有兩個變量的插值函數的線性插值擴展,其核心思想是在兩個方向分別進行一次線性插值。

另外一種表示方法:但增長了浮點運算,速度變慢

對於一個目的像素,設置座標經過反向變換獲得的浮點座標爲(i+u,j+v),其中i、j均爲非負整數,u、v爲[0,1)區間的浮點數,則這個像素得值 f(i+u,j+v) 可由原圖像中座標爲 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應的周圍四個像素的值決定,即:
    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)
其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推
  這就是雙線性內插值法。雙線性內插值法計算量大,但縮放後圖像質量高,不會出現像素值不連續的的狀況。因爲雙線性插值具備低通濾波器的性質,使高頻份量受損,因此可能會使圖像輪廓在必定程度上變得模糊

編程實現時:

//先垂直方向線性插值,int array[2][2]=原圖像中座標爲 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應的周圍四個像素的值

 t1 = (1-v)*array[0][0] + v*array[1][0];
       t2 = (1-v)*array[0][1] + v*array[1][1];

 //再水平方向線性插值
       float t=(int)((1-u)*t1 + u*t2);

 

優化:

通常來講,Su,Sv能夠表示成分數的形式:

Su = ( double )Dw / Sw; Sv = ( double )Dh / Sh

  其中Dw, Dh爲目標圖像的寬度和高度,Sw, Sh爲源圖像的寬度和高度(由於都是整數,爲求得浮點結果,須要進行類型轉換)。

  將新的Su, Sv代入前面的變換公式和插值公式,能夠導出新的插值公式:(m=u;n=v)

由於:

m = 1 – x * Sw % Dw / ( double )Dw; n = 1 – y * Sh % Dh / ( double )Dh

設:

M = Dw – x * Sw % Dw; N = Dh – y * Sh % Dh

則:

m = B / ( double )Dw; n = N / ( double )Dh

相關文章
相關標籤/搜索