19

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

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

我已经坚持了很长时间,请给我一个正确的方向。实际上,当您删除已知数据时,您如何进行插值?

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

4

6 回答 6

18

如果将原始像素概念化为宽度为 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 图像中,比率计算起来更复杂,但要点是相同的。插值,并从最接近的原始“邻居”中提取更多值。如果下采样不是非常严重,则生成的图像应该看起来与原始图像非常相似。

于 2009-05-18T01:26:26.393 回答
10

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

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

您可以将其概念化为首先放大到旧大小和新大小的最小公倍数,然后通过丢弃样本来缩小,只是没有实际生成中间结果。

于 2009-05-18T00:51:28.927 回答
8

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

替代文字 http://img391.imageshack.us/img391/3310/downsampling.png

于 2009-05-18T03:13:00.443 回答
7

在这里,您在顶部有原始图像,然后在中间有一个简单的去除算法,在底部有一个插值算法。

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

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

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

替代文字

于 2009-05-18T03:50:27.397 回答
3

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

让我们取一行像素:

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

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

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

于 2009-05-18T03:15:32.823 回答
3

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

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

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

于 2009-06-25T14:50:17.580 回答