📜  缩放方法

📅  最后修改于: 2021-01-08 05:20:13             🧑  作者: Mango


在本教程中,我们将正式介绍在“缩放简介”教程中介绍的三种缩放方法。

方法

  • 像素复制或(最近邻居插值)
  • 零阶保持方法
  • 放大K倍

每种方法都有其自身的优点和缺点。我们将从讨论像素复制开始。

方法1:像素复制:

介绍:

也称为最近邻居插值。顾名思义,在这种方法中,我们只是复制相邻像素。正如我们在“采样”教程中已经讨论的那样,缩放不过是增加采样或像素的数量而已。该算法以相同原理工作。

加工:

在这种方法中,我们从已经给定的像素中创建新像素。用这种方法将每个像素分别按行和列进行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行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。

方法3:K-时间缩放

介绍:

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个值。

现在,对下两个相邻像素重复此步骤。它显示在第一张表中。

插入值后,您必须按升序对插入的值进行排序,因此它们之间保持对称。

它显示在第二个表中

表格1。

15 20 25 30 20 25 15
30 20 25 15 20 25 30

表2。

表2

列明智缩放

必须逐列执行相同的过程。该过程包括获取两个相邻像素值,然后从较大的像素值中减去较小的像素值。然后,您必须将其除以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时间缩放算法的明显优势之一是它能够计算任何因子的缩放,这是像素复制算法的功效,并且它提供了改进的结果(较少模糊),这是零阶保持方法的功效。因此,它包含了两种算法的功能。

该算法的唯一困难在于,它必须最后进行排序,这是一个附加步骤,因此会增加计算成本。