降尺度时的插值算法

时间:2009-05-18 00:45:00

标签: algorithm image interpolation

我试图了解降尺度。我可以看到在升级时可以使用插值算法(如bicubic和最近邻居),以便在旧的已知点(像素,如果是图像)之间“填充空白”。

但降尺度?我不知道如何在那里使用任何插值技术。没有空白填补!

我长期以来一直坚持这一点,给我一个正确方向的推动。实际上,当您删除已知数据时,如何进行插值?

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

6 个答案:

答案 0 :(得分:13)

如果将原始像素概念化为宽度为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远)。

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

在二维图像中,比率计算起来比较复杂,但要点是相同的。插值,从最近的原始“邻居”中提取更多的值。如果下采样不是非常严重,那么得到的图像看起来应该与原始图像非常相似。

答案 1 :(得分:8)

无论是升级还是降尺度,“插值”实际上都是重新采样。

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

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:5)

这里有原始图像,中间有一个天真的删除算法,底部有一个插值算法。

考虑一个重要的焦点。中心的光线最亮,边缘的光线变暗。当你将它照得更远时,你会不会期望光束突然失去边缘附近的黑暗并变成一个坚实的光线轮廓?

不,这里发生了与stackoverflow标志相同的事情。正如你在第一次降尺度中看到的那样,图片已经失去了边缘的柔软度,看起来很糟糕。第二次缩小通过平均像素环境来保持边缘的平滑度。

您可以尝试使用简单的卷积滤镜来添加像素的RGB值以及围绕它的所有其他像素,并进行简单的平均值。然后用该值替换像素。然后,您可以丢弃相邻像素,因为您已将该信息包含在中心像素中。

alt text

答案 4 :(得分:2)

无论我们是升级还是降尺度,我们都需要确定(在某种程度上准确度)两个像素之间的某个点的颜色值。

让我们拍摄一行像素:

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

(当然,我们希望在两个维度而不是一个维度中执行此操作,但这是相同的原则。)

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

答案 5 :(得分:1)

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

如果您使用sinc升级图像,然后将其缩小到原始尺寸,您将获得几乎完全相同的图像,而如果您只是在缩小尺寸时平均像素,则最终会出现稍微模糊的情况比原来的。如果您使用傅立叶变换来调整大小,窗口sinc尝试近似,那么除了舍入误差之外,您将获得精确的原始图像。

有些人不喜欢使用sinc过滤器产生的尖锐边缘周围的轻微振铃。我建议对缩小矢量图形进行平均处理,然后使用sinc来缩小照片尺寸。