線性內插(Interpolation)

當我們圖像進行幾何轉換時,假使輸出像素映射的地方,不是輸入圖像某個整數像素位置,這時要用整數座標的灰度值進行推斷,這就是插值,這邊介紹幾種插值方式,通常較好的結果也導致較大的計算量。


最近插值法(Nearest Neighbor Interpolation):這是一種最簡單的插值算法,輸出像素的值為輸入圖像離映射點最近的像素值,如下圖假使(x0,y0)為映射點,則讓此點的強度值為(x1,y1)的值,這種算法作幾何轉換時,邊緣通常有較嚴重的鋸齒狀。

Nearest Neighbor Interpolation


雙線性插值法(Bilinear Interpolation):在兩個方向分別進行一次線性插值,輸出像素的值為映射點四周的2×2像素強度加權平均,如下圖我們簡化問題,四周位置分別為(0,0)、(1,0)、(0,1)、(1,1),強度分別為f(0,0)、f(1,0)、f(0,1)、f(1,1),(x,y)映射點強度為f(x,y),映射點到四邊的距離分別為d1、d2、d3、d4、我們依序進行以下三步驟:

  1. 對上端的兩個頂點進行線性插值得到x1的強度f(x1)。 f(x1) = f(0,0) + d1 * (f(1,0) – f(0,0))
  2. 對下端的兩個頂點進行線性插值得到x2的強度f(x2)。 f(x2) = f(0,1) + d1 * (f(1,1) – f(0,1))
  3. 由f(x1)和f(x2)來求得(x,y)的強度f(x,y)。 f(x,y)= f(x1)+ d3 * (f(x1)- f(x2))

我們擴展這個概念,就可得到圖像所有的雙線性插值強度,這概念假設強度在兩個像素之間是線性變化的,顯然是合理的假設,因此在一般的情況之下,雙線性插值都能得到不錯的結果。

Bilinear Interpolation


高階插值: 在一些幾何運算中,雙線性插值的平滑作用會導致細節的退化,這些可以透過高階插值彌補,可能會採用4×4或8×8的鄰域進行加權平均。

回到首頁

回到OpenCV教學