假設有一張4*4的圖像.如下圖:

我們想縮放成3*3的圖像,計算如下(以縮放后的像素點B為例):

根據如下計算公式:
srcX=dstX* (srcWidth/dstWidth)
srcY = dstY * (srcHeight/dstHeight)
以E點坐標為例計算坐標點在原圖對坐標位置如下:
取原圖像的X坐標 = 1* (4/3)
1.3
取原圖像的Y坐標 = 1* (4/3)
1.3
使用雙線性插值法:
對(1.3,1.3)坐標在原圖像上進行投影,如下圖:

對於一個目的像素,設置坐標通過反向變換得到的浮點坐標為(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) v f(i , j + 1) + u (1 - v) f(i + 1 , j) + u v f(i + 1 , j + 1)
其中f(i , j)表示源圖像(i , j)處的的像素值,以此類推。
本例分析:
i = 1 , j = 1 , u = 0.3 , v = 0.3
f(1.3 , 1.3) 由(1 , 1) 、(2 , 1)、(1 , 2)、(2 , 2) 這四個像素的值決定,如下圖紅色框選的點:

f(1.3 , 1.3) = 0.7 * 0.7 * f(1 , 1) + 0.7 * 0.3 * f(1 , 2) + 0.3 * 0.7 * f(2 , 1) + 0.3 * 0.3 * f(2 , 2)
= 0.7 * 0.7 * 2 + 0.7 * 0.3 * 6 + 0.3 * 0.7 * 4 + 0.3 * 0.3 * 8
從上圖也可以看出,點2離目標點最近,其次4和6,最后是8,權重也是越近權重越大。
計算原理:

p點像素值決定於Q12、Q22、Q11、Q21這4個點點像素值。
我們先在X軸方向做2次插值操作(分別為R1和R2),然后在Y軸方向做一次插值操作(P),當然我認為也可以先在Y軸做2次插值操作,然后在X軸做一次插值操作。
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1mJTI4UjElMjkrKyU1Q2FwcHJveCsrJTVDZnJhYyU3QnhfJTdCMiU3RC14JTdEKyU3QnhfJTdCMiU3RC14XyU3QjElN0QlN0QrZiUyOFFfJTdCMTElN0QlMjkrJTJCKyU1Q2ZyYWMlN0J4XyU3QjElN0QteCU3RCslN0J4XyU3QjIlN0QteF8lN0IxJTdEJTdEK2YlMjhRXyU3QjIxJTdEJTI5.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1mJTI4UjIlMjkrKyU1Q2FwcHJveCsrJTVDZnJhYyU3QnhfJTdCMiU3RC14JTdEKyU3QnhfJTdCMiU3RC14XyU3QjElN0QlN0QrZiUyOFFfJTdCMTIlN0QlMjkrJTJCKyU1Q2ZyYWMlN0J4XyU3QjElN0QteCU3RCslN0J4XyU3QjIlN0QteF8lN0IxJTdEJTdEK2YlMjhRXyU3QjIyJTdEJTI5.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1mJTI4cCUyOSsrJTVDYXBwcm94KyslNUNmcmFjJTdCeV8lN0IyJTdELXklN0QrJTdCeV8lN0IyJTdELXlfJTdCMSU3RCU3RCtmJTI4Ul8lN0IxJTdEJTI5KyUyQislNUNmcmFjJTdCeV8lN0IxJTdELXklN0QrJTdCeV8lN0IyJTdELXlfJTdCMSU3RCU3RCtmJTI4Ul8lN0IyJTdEJTI5.png)
其中
、
、
、
都是權重值。
以
點計算舉例,假設
,
,
:
為總距離,
為
與
的距離,
為
與
的距離,
離
更近,對
的影響應該更大,所以權重應該更大,應為
,即為
。
這2次X軸插值操作和1次Y軸插值操作,合並成一個公式即為計算原理上面的步驟。
來源:https://zhuanlan.zhihu.com/p/58991226
