0

最近学习了双线性插值,根据Wiki中的描述,感觉双线性插值只能用于整数倍放大,例如给定4x4分辨率的图像,通过双线性插值只能放大到8x8、12x12、16x16 ……等等,但是不能放大到9x9、13x13……就因为9、13这样的数字不能被4整除,对吗?如果不对,如何通过双线性插值将其放大到 n 倍,其中 n 不是整数?

4

1 回答 1

2

不,这是不对的。您可以从任何正分辨率调整到任何其他分辨率。因此,假设源图像是xs0,ys0,目标是xs1,ys1分辨率。

  1. 处理目标图像的所有像素

    所以 2 嵌套的 for 循环通过x1,y1覆盖xs1,ys1

  2. 为每个像素计算源图像中的浮动位置

    x0 = x1*(xs0-1)/(xs1-1)
    y0 = y1*(ys0-1)/(ys1-1)
    
  3. 从 4 个邻居进行双线性插值

    x0,y0点到起点的整数部分和小数部分是您的插值参数tx,ty......所以在源之间插值像素(x0,y0),(x0+1,y0),(x0,y0+1),(x0+1,y0+1)并将结果存储在目标图像中(x1,y1)。以不同方式处理边缘像素 ( x0==xs0-1 , y0==ys0-1) 以避免访问冲突。

于 2017-02-24T08:47:08.570 回答