通过像一维数组一样访问二维数组来实现双线性插值的概念
The Concept of Bilinear Interpolation by Accessing 2-d array like 1-d array does
在二维数组中,有bmp文件的像素。它的大小是我缩放的宽度(3 * 65536)*高度(3 * 65536)。
就像这样。
1 2 3 4
5 6 7 8
9 10 11 12
在1和2之间,有2个孔,因为我把原来的二维数组放大了。 ( 乘以 3 )
我使用这样的一维数组访问方法。
array[y* width + x]
index
0 1 2 3 4 5 6 7 8 9...
1 2 3 4 5 6 7 8 9 10 11 12
(this array is actually 2-d array and is scaled by multiplying 3)
现在我可以像这个解决方案一样修补漏洞。
在双 for 循环中,在条件 (j%3==1)
Image[i*width+j] = Image[i*width+(j-1)]*(1-1/3) + Image[i*width+(j+2)]*(1-2/3)
另一种情况(j%3==2)
Image[i*width+j] = Image[i*width+(j-2)]*(1-2/3) + Image[i*width+(j+1)]*(1-1/3)
这是我知道我可以修补所谓 "Bilinear Interpolation" 漏洞的方法。
在我的代码中实现这个逻辑之前,我想确定我知道什么。谢谢阅读。
双线性插值需要每个插值像素进行 2 次线性插值(水平和垂直)(好吧,其中一些只需要 1 次),或者每个插值像素最多需要 4 个源像素。
1和2之间有两个洞。 1 和 5 之间有 2 个孔。 1 和 6 之间有 4 个孔。您编写的代码只能修补 1 和 2 之间的漏洞,不能正确修补其他漏洞。
另外你的除法是整数除法,不是你想要的
通常,您最好编写一个 r=interpolate_between(a,b,x,y)
函数,该函数在 a 和 b 之间插值,从 y 开始在第 x 步进行插值。然后测试并修复。现在使用它 水平 缩放您的图像,并目视检查是否正确(尤其是边缘!)
现在尝试使用它仅垂直缩放。
现在水平,然后垂直。
接下来写双线性版本,你可以用线性版本再测试三次(会在舍入误差范围内)。然后尝试双线性缩放图像,目视检查。
与双线性比例进行比较。它应该仅因舍入误差而异。
在每个阶段,您都会有一个可能出错的“新”操作,之前的代码已经过验证。
一次编写所有内容会导致代码复杂且漏洞百出。
在二维数组中,有bmp文件的像素。它的大小是我缩放的宽度(3 * 65536)*高度(3 * 65536)。 就像这样。
1 2 3 4
5 6 7 8
9 10 11 12
在1和2之间,有2个孔,因为我把原来的二维数组放大了。 ( 乘以 3 )
我使用这样的一维数组访问方法。
array[y* width + x]
index
0 1 2 3 4 5 6 7 8 9...
1 2 3 4 5 6 7 8 9 10 11 12
(this array is actually 2-d array and is scaled by multiplying 3)
现在我可以像这个解决方案一样修补漏洞。 在双 for 循环中,在条件 (j%3==1)
Image[i*width+j] = Image[i*width+(j-1)]*(1-1/3) + Image[i*width+(j+2)]*(1-2/3)
另一种情况(j%3==2)
Image[i*width+j] = Image[i*width+(j-2)]*(1-2/3) + Image[i*width+(j+1)]*(1-1/3)
这是我知道我可以修补所谓 "Bilinear Interpolation" 漏洞的方法。
在我的代码中实现这个逻辑之前,我想确定我知道什么。谢谢阅读。
双线性插值需要每个插值像素进行 2 次线性插值(水平和垂直)(好吧,其中一些只需要 1 次),或者每个插值像素最多需要 4 个源像素。
1和2之间有两个洞。 1 和 5 之间有 2 个孔。 1 和 6 之间有 4 个孔。您编写的代码只能修补 1 和 2 之间的漏洞,不能正确修补其他漏洞。
另外你的除法是整数除法,不是你想要的
通常,您最好编写一个 r=interpolate_between(a,b,x,y)
函数,该函数在 a 和 b 之间插值,从 y 开始在第 x 步进行插值。然后测试并修复。现在使用它 水平 缩放您的图像,并目视检查是否正确(尤其是边缘!)
现在尝试使用它仅垂直缩放。
现在水平,然后垂直。
接下来写双线性版本,你可以用线性版本再测试三次(会在舍入误差范围内)。然后尝试双线性缩放图像,目视检查。
与双线性比例进行比较。它应该仅因舍入误差而异。
在每个阶段,您都会有一个可能出错的“新”操作,之前的代码已经过验证。
一次编写所有内容会导致代码复杂且漏洞百出。