0

我在维基百科上读到过,理论听起来不错,但我不知道是否适用于实践。
我有一个像这样的小例子:
原始图像矩阵

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

然后对其应用双三次插值(此时忘记使用 16 个相邻像素,我没有足够的空间在这里演示如此大的矩阵)。


现在我的问题是:
1. 我做数据传输(从旧矩阵到新矩阵)对吗?如果不是,它应该是什么样子?
2.新矩阵中x变量的值应该是多少?对我来说,这似乎是正确的,因为至少我们有一些值来进行计算,而不是 x 符号。

1 1 2 2 
1 1 2 2
3 3 4 4 
3 3 4 4

3. 新矩阵中的所有像素都会被插值吗?因为边界处的像素没有足够的相邻像素来执行计算。
非常感谢你。

4

1 回答 1

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)。

双三次算法将需要原始图像之外的点的数据。最简单的解决方案是为像素使用预乘 alpha表示,然后您可以使用 (0,0,0,0) 作为图像边界之外的任何值。

于 2012-11-27T20:48:59.013 回答