缩放方法

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

方法

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

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

方法 1:像素复制:

简介:

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

工作原理:

在此方法中,我们从已给定的像素创建新像素。每个像素在此方法中按行和列复制 n 次,然后您便会得到放大的图像。就这么简单。

例如:

如果您有一张 2 行 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 x 2。因此,这意味着新图像的尺寸基于以下公式

(2(行数) 减 1) X (2(列数) 减 1)

优点和缺点。

这种缩放技术的优点之一是,与最近邻插值方法相比,它不会创建模糊的图像。但是它还有一个缺点,就是它只能以 2 的幂运行。这里可以演示一下。

两次缩放的原因:

考虑上面 2 行 2 列的图像。如果我们必须使用零阶保持方法将其放大 6 倍,我们就无法做到。正如公式所示。

它只能以 2、4、8、16、32 等的幂进行放大。

即使您尝试放大它,也无法做到。因为首先当您将其放大两倍时,结果将与按列缩放中所示的结果相同,尺寸等于 3x3。然后您再次放大​​它,您将获得等于 5 x 5 的尺寸。现在,如果您再次执行此操作,您将获得等于 9 x 9 的尺寸。

而根据您的公式,答案应该是 11x11。因为 (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。

我们这样做了 2 次,因为我们必须插入 k-1 个值。

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

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

它显示在第二个表中

表 1。

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

表 2.

Table2

按列缩放

按列执行相同的程序。该过程包括取两个相邻像素值,然后从较大的像素值中减去较小的像素值。然后,您必须将其除以 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 X 3。新图像的尺寸为 4 x 7。

因此公式为:

(K(行数减 1)+ 1) X (K(列数减 1)+ 1)

优点和缺点

k 倍缩放算法的一个明显优势是它能够计算任何倍数的缩放,这是像素复制算法的力量,它还可以提供改进的结果(更少模糊),这是零阶保持方法的力量。因此它包含了两种算法的力量。

该算法的唯一困难是它必须在最后进行排序,这是一个额外的步骤,从而增加了计算成本。