1. 程式人生 > 其它 >仿射變換與插值演算法

仿射變換與插值演算法

仿射變換

仿射變換數學上可以表示為矩陣乘法,本質是線性變換。具體可以實現為影象的平移、旋轉、以及縮放等。

插值演算法

插值的本質就是利用原圖已知點的畫素來計算新圖對應位置上的畫素值。插值演算法就是如何對原影象素點進行選取然後計算。

最近鄰法(nearest)

最近鄰法不需要計算,只需要按照影象比例,將新影象素點對映到原影象素點獲取畫素值。

假設新圖座標為(des_x,des_y),新圖長寬為img_o_h、img_o_w,原圖長寬為img_i_h、img_i_w。則新影象素點對應在原圖上座標為(src_x,src_y)

其中des_x/src_x = img_o_w/img_i_w,des_y/src_y = img_o_h/img_i_h

將求得的src_x和src_y四捨五入即可對應到原圖上某一點,認為此點畫素值即是新圖上對應點的畫素值。

單線性插值

公式來源

若認為y是新畫素點的畫素值,y1和y2是所取點的畫素值,即可根據兩個所取點的畫素值按照新點與所取點橫座標確定的權重係數獲得新的畫素值。

雙線性插值

雙線性插值的本質是進行三次單線性插值。即取四個點,例如(1,1)(2,2)(3,3)(4,4),四個點按照對角線分佈。

雙線性插值計算過程就是先在(1,1)(2,2)之間和(3,3)(4,4)之間分別進行單線性插值,獲得兩個中間點(x0,y0)(x1,y1),然後(x0,y0)(x1,y1)之間再進行一次單線性插值,即可獲得新畫素點的畫素值。

小結

影象的線性變換所有新畫素點的畫素值完全由原影象素點計算得來,具體精度取決於權重係數。

如影象放大,採用雙線性插值每4個點計算出8個畫素值即可進行放大。而每4個點計算出1個畫素值,就實現了縮放。

RTL實現

secret