为什么超级采样不被广泛用于图像缩放?

时间:2014-01-27 15:00:44

标签: image-processing image-resizing

我寻找一个合适的图像缩放算法,并想知道为什么超级采样不像bicubic,bilinear甚至lanczos那样受欢迎。

通过超级采样我的意思是一种将源图像分成相等矩形的方法,每个矩形对应于目标图像中的一个像素。在我看来,这是最自然和准确的方法。它考虑了源图像的所有像素,而双线性可能会跳过一些像素。据我所知,质量也非常高,与lanczos相当。

为什么流行的图像库(如GraphicsMagic,GD或PIL)没有实现此算法?我发现仅在英特尔IPP和AMD Framewave项目中实现。我知道至少有一个缺点:它只能用于降尺度,但是我错过了其他的东西吗?

为了进行比较,这是一个4.26倍缩小的图像。从左到右:GraphicsMagic Sinc滤镜(910ms),Framewave Super方法(350ms),GraphicsMagic三角滤镜(320ms):

http://i.stack.imgur.com/Csvg8.png

4 个答案:

答案 0 :(得分:2)

现在我知道了答案。因为pixel is not a little square。这就是为什么超级大小调整大小会给出别名结果的原因。这可以在样本图像上的薄水射流上看到。这不是致命的,超级采样可用于缩放到2x,3x等,以便在使用其他方法调整大小到精确尺寸之前大幅减小图片大小。这种技术在jpeglib中用于打开较小尺寸的图像。

当然,我们仍然可以将像素视为正方形,实际上,GD库可以。 imagecopyresampled是真正的超级采样。

答案 1 :(得分:1)

你有点误会(当说线性重新缩放错过像素时)。假设您将图像重新调整为最多因子2,则双线性插值会考虑源图像的所有像素。如果稍微平滑图像并使用双线性插值,则可以获得高质量的结果。对于大多数实际情况,甚至不需要进行双边插值。 由于双线性插值非常快(可以在定点计算中轻松执行),因此在处理实时处理时,它是迄今为止最佳的图像重新缩放算法。

如果你打算将图像缩小2倍以上,那么双线性插值在数学上是错误的,并且随着更大的因素,甚至双立方开始出错。这就是为什么在图像处理软件(如photoshop)中我们使用更好的算法(但要求更高的CPU)。

你的问题的答案是速度考虑。 考虑到CPU / GPU的速度,图像大小和所需的帧速率,您可以轻松计算每个像素可以执行的操作数量。例如 - 使用2GHZ CPU和1 [Gpix]图像尺寸,您每秒只能对每个像素进行少量计算。 给定允许的计算量 - 您选择最佳算法。因此,决定通常不是由图像质量驱动,而是由速度考虑驱动。

关于超级采样的另一个问题 - 有时如果你在频域中这样做,它的效果要好得多。这称为频率插值。但是你不想仅仅为了重新缩放图像来计算FFT。

此外 - 我不知道你是否熟悉反投影。这是一种从目标到源而不是从源到目的地插入图像的方法。使用背投影可以将图像放大10倍,使用双线性插值并且在数学上仍然是正确的。

答案 2 :(得分:0)

计算负担和增加的内存需求很可能是您正在寻找的答案。这就是为什么引入自适应超级采样,这会降低负担/内存需求和效率之间的关系。 我想即使对于今天的硬件来说,超级采样仍然太重了。

答案 3 :(得分:0)

简短回答:他们是超级采样。我认为问题在于术语。

在您的示例中,您正缩小。这意味着抽取,而不是插值。如果不使用超采样,则抽取将产生混叠。我在你发布的图片中看不到别名。

sinc滤波器涉及超级采样。它特别适用于抽取,因为它特别切断了频率高于最终图像中可见的频率。从名称来看,我怀疑三角滤波器也是超级采样的一种形式。您显示的第二个图像模糊,但我看不到锯齿。所以我的猜测是它也使用某种形式的超级采样。

就个人而言,我一直对Adobe Photoshop感到困惑,当我缩放时,它会问我是否需要“bicubic”或“bilinear”。但是Bilinear,Bicubic和Lanczos是插值方法,而不是抽取方法。

我还可以告诉你,现代视频游戏也使用超级采样。 Mipmapping是通过以2的幂预先抽取单个图像来实时抽取的常用快捷方式。