1. 程式人生 > >【數字影象處理】二維(2D)線性插值的應用

【數字影象處理】二維(2D)線性插值的應用

應用情況

在使用matlab對影象進行各種操作的時候經常要使用插值進行計算。

例如:影象縮放、影象旋轉、仿射變換等等。

線性插值

先介紹線性插值的概念。

已知兩個點(x1, y1)、(x2, y2),求它們中間橫座標為x的點的y值。

則可以利用如下公式進行插值計算。其中a和(1-a)為x距離x1和x2的距離佔(x2-x1)的比例。

y = a*y1 + (1-a)*y2

線性插值的在二維影象上的計算

現在假設im(m, n)為原影象中第m行第n列的畫素,其周圍的幾個畫素為im(m+1, n)、im(m, n+1)、im(m+1, n+1)。

若把這幾個畫素的中心連線可以得到這樣一個正方形。

在影象變換的過程中,變換後的圖片中的畫素點的值可能需要原圖的畫素進行插值求出畫素的值,如果變化後的圖象所需的值對應在原圖中四個畫素圍成的正方形中間,則如下圖所示,P點為需要求出值的畫素點,則通過四個已知的畫素值可以插值求出P點的畫素值。

其中,a、(1-a)、b、(1-b)為P點距離邊緣的距離。

總的思路就是分兩次做插值計算,先用插值算出P1和P2點的畫素值在用這兩點求出P點的畫素值。

求出P1和P2的公式如下

P1 = b*im(m, n) + (1-b)*im(m+1, n)

P2 = b*im(m, n+1) + (1-b)*im(m+1, n+1)

求出P的公式如下

P = a*P1 + (1-a)*P2

   = a*[b*im(m, n) + (1-b)*im(m+1, n)] + (1-a)*[b*im(m, n+1) + (1-b)*im(m+1, n+1)]

   = a*b*im(m, n) + a*(1-b)*im(m+1,n) + (1-a)*b*im(m, n+1) + (1-a)*(1-b)*im(m+1, n+1)

總結

學習不息,繼續加油