📅  最后修改于: 2021-01-08 05:20:13             🧑  作者: Mango
在本教程中,我们将正式介绍在“缩放简介”教程中介绍的三种缩放方法。
每种方法都有其自身的优点和缺点。我们将从讨论像素复制开始。
也称为最近邻居插值。顾名思义,在这种方法中,我们只是复制相邻像素。正如我们在“采样”教程中已经讨论的那样,缩放不过是增加采样或像素的数量而已。该算法以相同原理工作。
在这种方法中,我们从已经给定的像素中创建新像素。用这种方法将每个像素分别按行和列进行n次复制,即可得到缩放的图像。就这么简单。
如果您有2行2列的图像,并且想要使用像素复制将其缩放两次或2倍,请按照以下步骤进行操作。
为了更好地理解,已以具有图像像素值的矩阵形式拍摄图像。
1 | 2 |
3 | 4 |
上面的图片有两行两列,我们首先将其逐行缩放。
当我们按行缩放它时,我们将简单地将行像素复制到其相邻的新单元格中。
在这里将如何完成。
1 | 1 | 2 | 2 |
3 | 3 | 4 | 4 |
您可以在上述矩阵中将每个像素在行中复制两次。
下一步是按像素复制每个像素,我们将简单地将列像素复制到其相邻的新列或仅复制到其下方。
在这里将如何完成。
1 | 1 | 2 | 2 |
1 | 1 | 2 | 2 |
3 | 3 | 4 | 4 |
3 | 3 | 4 | 4 |
从上面的示例可以看出,缩放后2行2列的原始图像已转换为4行4列。这意味着新图像的尺寸为
(原始图像行*缩放系数,原始图像列*缩放系数)
这种缩放技术的优点之一是,它非常简单。您只需要复制像素即可。
这种技术的缺点是图像放大了,但是输出却非常模糊。随着缩放系数的增加,图像变得越来越模糊。最终将导致图像完全模糊。
零阶保持方法是另一种缩放方法。也称为两次缩放。因为它只能放大两次。我们将在下面的示例中看到为什么这样做。
在零阶保持方法中,我们分别从行中选择两个相邻的元素,然后将它们相加并将结果除以二,然后将其结果放在这两个元素之间。我们首先按行执行此操作,然后按列进行此操作。
让我们拍摄2行2列尺寸的图像,并使用零阶保持将其缩放两次。
1 | 2 |
3 | 4 |
首先,我们将其逐行缩放,然后逐列缩放。
1 | 1 | 2 |
3 | 3 | 4 |
当我们采用前两个数字时:(2 + 1)= 3,然后将其除以2,得到1.5,该数字近似于1。在第2行中应用相同的方法。
1 | 1 | 2 |
2 | 2 | 3 |
3 | 3 | 4 |
我们取两个相邻的列像素值1和3。我们将它们相加得到4。然后将4除以2,得到2放在它们之间。所有列均采用相同的方法。
如您所见,新图像的尺寸为3 x 3,原始图像的尺寸为2 x2。因此,这意味着新图像的尺寸基于以下公式
(2(行数)减1)X(2(行数)减1)
这种缩放技术的优点之一是,与最近的邻居插值方法相比,它不会产生模糊的图片。但是它也有一个缺点,那就是只能以2的幂运行。这可以在此处进行演示。
考虑上面的2行2列的图像。如果必须使用零阶保持方法将其缩放6倍,则无法执行此操作。如公式所示。
它只能放大2 2、4、8、16、32的幂,依此类推。
即使您尝试缩放它,也不能。因为起初将其放大两次,其结果将与尺寸等于3×3的列式缩放中所示的结果相同。然后,将其再次缩放,您将获得等于5 x 5的尺寸。现在,如果再次进行操作,则将获得等于9 x 9的尺寸。
而根据您的公式,答案应该是11×11。因为(6(2)减1)X(6(2)减1)得出11 x 11。
K倍是我们将要讨论的第三种缩放方法。它是迄今为止讨论的最完美的缩放算法之一。它迎合了两次缩放和像素复制的挑战。该缩放算法中的K代表缩放系数。
它像这样工作。
首先,您必须像放大两次一样获取两个相邻像素。然后,您必须从较大的值中减去较小的值。我们称此输出(OP)。
将输出(OP)除以缩放系数(K)。现在,您必须将结果添加到较小的值,并将结果放在这两个值之间。
再次将OP值添加到刚放置的值上,然后将其再次放置在先前放置的值旁边。您必须这样做直到将k-1个值放入其中。
对所有行和列重复相同的步骤,您将获得缩放的图像。
假设您有2行3列的图像,如下所示。而且您必须将其缩放三倍。
15 | 30 | 15 |
30 | 15 | 30 |
在这种情况下,K为3。K = 3。
应该插入的值的数量为k-1 = 3-1 = 2。
取前两个相邻像素。分别是15和30。
从30减去15。30-15= 15。
用15除以k。 15 / k = 15/3 =5。我们称它为OP。(其中op只是一个名字)
将OP添加到较低的数字。 15 + OP = 15 + 5 = 20。
再次将OP添加到20。 20 + OP = 20 + 5 = 25。
我们这样做两次,因为我们必须插入k-1个值。
现在,对下两个相邻像素重复此步骤。它显示在第一张表中。
插入值后,您必须按升序对插入的值进行排序,因此它们之间保持对称。
它显示在第二个表中
15 | 20 | 25 | 30 | 20 | 25 | 15 |
30 | 20 | 25 | 15 | 20 | 25 | 30 |
必须逐列执行相同的过程。该过程包括获取两个相邻像素值,然后从较大的像素值中减去较小的像素值。然后,您必须将其除以k。将结果存储为OP。将OP添加到较小的对象中,然后再次将OP添加到第一次添加OP中所提供的值中。插入新值。
这就是您所得到的一切。
15 | 20 | 25 | 30 | 25 | 20 | 15 |
20 | 21 | 21 | 25 | 21 | 21 | 20 |
25 | 22 | 22 | 20 | 22 | 22 | 25 |
30 | 25 | 20 | 15 | 20 | 25 | 30 |
计算新图像尺寸公式的最佳方法是比较原始图像和最终图像的尺寸。原始图像的尺寸为2 x3。新图像的尺寸为4 x 7。
因此,公式为:
(K(行数减1)+1)X(K(列数减1)+1)
k时间缩放算法的明显优势之一是它能够计算任何因子的缩放,这是像素复制算法的功效,并且它提供了改进的结果(较少模糊),这是零阶保持方法的功效。因此,它包含了两种算法的功能。
该算法的唯一困难在于,它必须最后进行排序,这是一个附加步骤,因此会增加计算成本。