【问题标题】:Interpolation algorithms when downscaling缩小时的插值算法
【发布时间】:2009-05-18 00:44:59
【问题描述】:

我试图理解缩减。我可以看到在放大时如何使用插值算法(例如双三次和最近邻)来“填充”旧的已知点(像素,如果是图像)之间的空白。

但是缩小规模?我看不出如何在那里使用任何插值技术。没有空白可填!

我已经被这个问题困扰很久了,请给我一个正确的方向。实际上,当您删除已知数据时,您如何进行插值?

编辑:假设我们有一个一维图像,每个点有一个颜色通道。按平均像素值缩放 6 到 3 个点的缩小算法如下所示: 1,2,3,4,5,6 = (1+2)/2,(3+4)/2,(5+6)/2 我在正确的轨道上吗?这种插值是缩小比例而不是丢弃数据吗?

【问题讨论】:

  • 您的编辑思路正确。 1,2,3,4,5,6 -> 1.5, 3.5, 5.5。另一个例子是 6,0,6,0,6,0 -> 3, 3, 3;优于 0,0,0 或 6,6,6。

标签: algorithm image interpolation


【解决方案1】:

如果将原始像素概念化为宽度为 n,则像素的中心距任一边缘为 n/2。

可以假设像素中心的这个点定义了颜色。

如果您进行下采样,您可以从概念上这样考虑:即使您正在减小物理尺寸,而是认为您在保持相同的尺寸,但减少了像素数量(从概念上讲,它们的尺寸正在增加) )。然后就可以算一算了……

示例:假设您的图像高 1 像素,宽 3 像素,而您只会水平缩小。假设您要将其更改为 2 像素宽。现在原始图像为 3n,而您将其转换为 2 个像素,因此每个新像素将占用原始图像像素的 (3/2)。

不再考虑中心...新像素的中心在 (3/4)n 和 (9/4)n [即 (3/4) + (3/2)]。原始像素的中心位于 (1/2)n、(3/2)n 和 (5/2)n。因此,每个中心都位于我们可以找到原始像素中心的位置之间——没有一个与原始像素的中心匹配。让我们看看 (3/4)n 处的第一个像素 - 它距原始第一个像素 (1/4)n,距原始第二个像素 (3/4)n。

如果我们想保持平滑的图像,使用反比关系:取第一个像素的颜色值的 (3/4) + 第二个像素的颜色值的 (1/4),因为新的像素中心,从概念上讲,将更接近第一个原始像素中心(n/4 距离)而不是第二个原始像素中心(3n/4 距离)。

因此,不必真正丢弃数据 - 只需从其邻居计算适当的比率(在整个图像的物理尺寸不变的概念空间中)。这是一个平均而不是严格的跳过/丢弃。

在 2d 图像中,比率的计算更复杂,但要点是相同的。插值,并从最接近的原始“邻居”中提取更多值。如果下采样不是非常严重,则生成的图像应该看起来与原始图像非常相似。

【讨论】:

  • 非常好的答案,我需要笔和纸才能完成,但我想我现在明白了。但假设我们将大小除以某个偶数 (2,4,8),以便样本网格与旧像素网格完美对齐。那么我是否总是从样本网格的每个单元格中的每个像素中获取等量的像素数据?
  • 如果你可以平均。缩放图像的方式有很多种。
  • 另一种思考方式是采用相同的概念方式,即物理尺寸不会改变,但像素的宽度会改变,而是考虑原始像素的数量和每个像素的数量新像素消耗的像素。这在偶数上效果很好(例如,当从 4 个像素水平缩放到 2 个像素时,每个新像素将消耗两个旧像素 - 平均它们)。
【解决方案2】:

无论是放大还是缩小,正在进行的“插值”实际上是重新采样。

如果缩小版本中的样本数不是全部样本数(像素等)的偶数除数,则简单地丢弃数据将产生在图像中显示为“锯齿”的采样错误。相反,如果您使用您提到的算法之一插入新样本在现有样本之间的空间中的位置,结果会更加平滑。

您可以将其概念化为首先放大到新旧尺寸的最小公倍数,然后通过丢弃样本缩小尺寸,而不会实际生成中间结果。

【讨论】:

  • 但是通过简单地丢弃数据以偶数除数 (2, 4, 8) 缩小也会产生抽样错误,对吗?
  • 是的,绝对不会和“实际”重新采样源数据一样。但是,插值“猜测”事物可能在哪里,但不能保证它们确实在那里。如果您希望原始数据准确,则需要重新采样。
  • “平均”比丢弃更好——它可以产生更平滑的缩小结果。在某些情况下,在缩小比例时,使用更复杂的过滤器对点组进行加权。缩小二维图像时,您必须对许多点进行聚类,而不仅仅是几个相邻点。
【解决方案3】:

此草图显示了几个像素的截面,这些像素从三个像素(黑色曲线)开始,然后使用插值(蓝色曲线)下采样到两个像素(红色曲线)。插值由原始的三个像素确定,最后两个像素设置为每个最终像素中心的插值值。 (如果这里不清楚,垂直轴显示的是单个颜色通道的每个像素的强度。)

alt text http://img391.imageshack.us/img391/3310/downsampling.png

【讨论】:

  • 可以恢复图片吗?
  • @nobar:抱歉,我不知道图片去哪儿了,当然也没有 5 年前的副本。希望 SO 或 imageshack 能恢复它……你知道它消失了多长时间吗?否则,我可能有机会重做,但我现在没有。
【解决方案4】:

上面是原始图像,中间是一个简单的去除算法,底部是一个插值算法。

考虑一个大聚光灯。中心的光最亮,边缘的光变暗。当你把它照得更远时,你会期待光束突然失去边缘附近的黑暗,变成一个坚实的光轮廓吗?

不,stackoverflow 徽标也发生了同样的事情。正如您在第一次缩小中看到的那样,图片失去了边缘的柔和度,看起来很糟糕。第二次缩小通过平均周围的像素来保持边缘的平滑度。

您可以尝试一个简单的卷积过滤器,就是将像素和周围所有其他像素的 RGB 值相加,然后做一个简单的平均。然后用该值替换像素。然后您可以丢弃相邻的像素,因为您已经在中心像素中包含了该信息。

【讨论】:

  • 因此计算平均值的一维缩减算法可能如下所示(6 分下降到 3 分):1,2,3,4,5,6 = (1+2)/2, (3+4)/2,(5+6)/2。正确的?在这里,样本网格在缩放期间包括两个点,但我是否应该在更多方向上采样更多点?
  • 是的,你可以这样做。更多的样本通常意味着更好的图片,但你应该小心。远离新内核的像素通常对新像素的贡献小于靠近的像素。
  • 我认为图像丢失了。还是您真的想展示这张 DVD 封面图片?请问可以重新发图片吗?这会很有帮助。
  • 显然 Imgur 已将原始图像的 URL 分配给另一个不相关的图像?
【解决方案5】:

无论我们是放大还是缩小,我们都需要确定(在一定程度上准确)两个像素之间的某个点的颜色值。

让我们取一行像素:

P     P     P     P     P     P     P     P     P

我们上采样,我们想知道在中间点使用的像素值:

P   P   P   P   P   P   P   P   P   P   P   P   P

当我们下采样时,我们还想知道在中间点使用的像素值:

P       P       P       P       P       P       P

(当然,我们希望在二维而不是一维中这样做,但原理相同。)

因此,无论如何,我们都需要进行插值以确定正确的样本值。根据我们想要结果的准确程度,有不同的插值技术。理想情况下,我们会正确地重新采样所涉及的所有数学......但即使这样也只是严格地进行插值!

【讨论】:

    【解决方案6】:

    如果您使用 lanczos 等加窗 sinc 滤波器,它实际上会滤除在较低分辨率下无法表示的高频细节。平均滤波器不会这样做,从而导致伪影。 sinc 滤镜还可以产生更清晰的图像,并且适用于放大和缩小。

    如果您要使用 sinc 放大图像,然后将其缩小回原始尺寸,您将获得几乎完全相同的图像,而如果您只是在缩小尺寸时对像素进行平均,您最终会得到稍微模糊的东西比原来的。如果您使用傅立叶变换来调整大小(窗口 sinc 试图逼近该大小),则除了舍入误差之外,您将获得准确的原始图像。

    但有些人不喜欢使用 sinc 滤波器在锐边周围产生的轻微振铃。我建议平均用于缩小矢量图形,sinc 用于缩小照片。

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多