雙線性插值(Bilinear Interpolation)


雙線性插值(Bilinear Interpolation)

最近用到插值算法,使用三次樣條插值仿真速度太慢,於是采用算法簡單的線性插值。本篇主要介紹一下雙線性插值的實現方法。

1. 線性插值

已知坐標 (x0y0) 與 (x1y1),要得到 [x0x1] 區間內某一位置 x 在直線上的值。

由於 x 值已知,所以可以從公式得到 y 的值

已知 y 求 x 的過程與以上過程相同,只是 x 與 y 要進行交換。

 

2. 雙線性插值(Bilinear Interpolation)

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

圖中:紅色的數據點與待插值得到的綠色點

假如我們想得到未知函數 f 在點 P = (xy) 的值,假設我們已知函數 f 在 Q11 = (x1y1)、Q12 = (x1y2), Q21 = (x2y1) 以及 Q22 = (x2y2) 四個點的值。

首先在 x 方向進行線性插值,得到

然后在 y 方向進行線性插值,得到

這樣就得到所要的結果 f(xy),

雙線性插值在三維空間的延伸是三線性插值。

 

以下轉自:http://blog.chinaunix.net/uid-26727959-id-3118207.html

雙線性插值作為OpenCV中默認使用的圖像縮放算法,其效果和速度都是不錯的。並且效果也比較穩定,計算復雜度並不算太高。我看了很多網上的算法,自己也沒看太懂,下面是從網上找的雙線性插值 算法的講解。
“圖像的雙線性插值放大算法中,目標圖像中新創造的象素值,是由源圖像位置在它附近的2*2區域4個鄰近象素的值通過加權平均計算得出的。雙線性內插值算法放大后的圖像質量較高,不會出現像素值不連續的的情況。然而次算法具有低通濾波器的性質,使高頻分量受損,所以可能會使圖像輪廓在一定程度上變得模糊。”

雙線性插值 算法和最近鄰插值算法比較類似。在最近鄰插值算法中,目標圖像中的某個點(x,y)是去源圖像中找最鄰近的一個點(x0, y0)即可。目標圖像中的點(x, y)對應於源圖像中的點(x0',y0'),x0'、y0'很可能不是整數,而是小數,而最近鄰插值算法是找其鄰近整型值(int(x0'+0.5f),int(y0'+0.5f))(上篇文章中沒有進行四舍五入)。我們現在找x0', y0'所在位置旁邊的四個點,根據這四個點與(x0',y0')距離的關系計算目標圖像中(x,y)一點的像素值。算法描述如下:

 

 

(1)計算源圖像與目標圖像寬與高的比例
w0 : 表示源圖像的寬度
h0 : 表示源圖像的高度
w1 : 表示目標圖像的寬度
h1 : 表示目標圖像的高度
float fw = float(w0-1)/(w1-1);
float fh = float(h0-1)/(h1-1);
(2)針對目標圖像的一個點(x, y),計算在源圖像中的對應坐標,結果為浮點數。
float x0 = x * fw;
float y0 = y * fh;

int x1 = int(x0);
int x2 = x1 + 1;
int y1 = int(y0);
int y2 = y1+1;

所求的源圖像中的四個點坐標為(x1, y1) (x1, y2) (x2, y1) (x2,y2)
(3)求周圍四個點所占的權重比值
如上圖,
fx1 = x0 - x1;
fx2 = 1.0f - fx1;
fy1 = y0 - y1; 
fy2 = 1.0f - fy1;

float s1 = fx1*fy1;
float s2 = fx2*fy1;
float s3 = fx2*fy2;
float s4 = fx1*fy2;

我們以value(坐標)來代表取得此點的坐標值,則:
value(x0,y0) = value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;

如果 對上述運算不夠明白 的話,可以這樣來求。
我們先要求得(x0, y1) 和(x0,y2)的像素值。
則float value(x0,y1) = value(x1,y1)*fx2 + value(x2,y1)*fx1;
float value(x0,y2) = value(x1,y2)*fx2 + value(x2,y2)*fx1;
注釋:離某點越近,離權重越大,故取其與1的差值。
float value(x0,y0) = value(x0,y1)*fy2 + value(x0,y2)*fy1;
驗證后與上邊公式一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM