我在维基百科上看到它,理论听起来不错,但我不知道申请练习。
我有一个像这样的小例子:
原始图像矩阵
1 2
3 4
如果我想将图像加倍,那么新矩阵
x x x x
x x x x
x x x x
x x x x
现在,有趣的部分是如何将原始矩阵中的旧值传递给新矩阵,我打算这样做
1 x 2 x
x x x x
3 x 4 x
x x x x
然后在它上面应用Bi三次插值(此时只是忘记使用16个相邻像素,我没有足够的空间来展示这么大的矩阵)。
现在我的问题是:
1。我是否正在进行数据传输(从旧矩阵到新矩阵)?如果没有,它应该是什么样子?
2。新矩阵中x变量的值应该是多少?对我来说,这似乎是正确的,因为至少我们有一些值来进行计算而不是x符号。
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
3。是否会对新矩阵中的所有像素进行插值?因为边界处的像素没有足够的相邻像素来执行计算。
非常感谢你。
答案 0 :(得分:1)
插值是指估算实际不存在的点的值。你需要从一个坐标系开始,所以让我们只使用两个递增的整数来表示X位置和Y位置。
0, 0 1, 0
0, 1 1, 1
您的输出需要4x4像素,间距应为0.5,而不是输入的1.0间隔:
-0.25,-0.25 0.25,-0.25 0.75,-0.25 1.25,-0.25
-0.25, 0.25 0.25, 0.25 0.75, 0.25 1.25, 0.25
-0.25, 0.75 0.25, 0.75 0.75, 0.75 1.25, 0.75
-0.25, 1.25 0.25, 1.25 0.75, 1.25 1.25, 1.25
输出中没有输出中的坐标,因此它们都需要进行插值。
选择第一个坐标-0.25的偏移量,使第一个和最后一个坐标与输入边缘的距离相等,并通过输出和输入间隔之差除以2来计算。例如如果你想要10倍变焦,间隔为0.1,初始偏移为(0.1-1)/ 2,点数为(-0.45,-0.35,-0.25,-0.15,... 1.35,1.45)。
Bicubic算法将需要原始图像之外的点的数据。当您对像素使用premultiplied alpha表示时,最简单的解决方案是,您可以使用(0,0,0,0)作为图像边界之外的任何值。