34

我对图像缩放算法很感兴趣,并且已经实现了双线性和双三次方法。但是,我听说过 Lanczos 和其他更复杂的方法来实现更高质量的图像缩放,我很好奇它们是如何工作的。

有人可以在这里解释使用 Lanczos 缩放图像(放大和缩小)背后的基本思想,以及为什么它会产生更高的质量吗?

我确实有傅里叶分析的背景,过去做过一些信号处理的工作,但与图像处理无关,所以不要害怕在你的回答中使用诸如“频率响应”之类的术语:)

编辑:我想我真正想知道的是使用卷积滤波器进行插值背后的概念和理论。

(注意:我已经阅读了有关 Lanczos 重采样的 Wikipedia 文章,但对我来说没有足够的细节)

4

1 回答 1

45

为图像处理选择特定的过滤器是一种魔法,因为判断结果的主要标准是主观的:在计算机图形学中,最终的问题几乎总是:“它看起来不错吗?”。那里有很多好的过滤器,最好的过滤器之间的选择通常归结为判断电话。

也就是说,我将继续进行一些理论...


由于您熟悉信号处理的傅立叶分析,因此您不需要了解更多信息即可将其应用于图像处理——所有直接感兴趣的滤波器都是“可分离的”,这基本上意味着您可以在x 和 y 方向。这将重新采样(2-D)图像的问题减少为重新采样(1-D)信号的问题。您的信号不是时间 (t) 的函数,而是坐标轴之一(例如 x)的函数;其他一切都完全相同。

归根结底,您完全需要使用过滤器的原因是为了避免混叠:如果您要降低分辨率,则需要过滤掉新的较低分辨率不支持的高频原始数据,否则将被添加改为不相关的频率。

所以。当您从原始信号中滤除不需要的频率时,您希望尽可能多地保留原始信号。此外,您不想扭曲您保留的信号。最后,您希望尽可能完全地消除不需要的频率。这意味着 - 从理论上讲 - 一个好的滤波器应该是频率空间中的“盒子”函数:对于高于截止频率的频率具有零响应,对于低于截止频率的频率具有统一响应,以及介于两者之间的阶跃函数。而且,从理论上讲,这种响应是可以实现的:您可能知道,直接 sinc 滤波器将准确地为您提供。


这有两个问题。首先,直 sinc 滤波器是无界的,并且不会很快下降;这意味着进行直接卷积将非常慢。与直接卷积相比,使用 FFT 并在频率空间中进行滤波会更快......

然而,如果你真的使用了一个直接的 sinc 滤波器,问题是它实际上看起来并不是很好!正如相关问题所说,感知上存在振铃伪影,实际上没有完全令人满意的方法来处理“下冲”导致的负值。

最后,然后:解决问题的一种方法是从 sinc 滤波器开始(因为它具有良好的理论特性),然后对其进行调整,直到你有一些东西也可以解决你的其他问题。具体来说,这将为您提供类似于 Lanczos 过滤器的内容:

Lanczos filter:       L(x)     = sinc(pi x) sinc(pi x/a) box(|x|<a)
frequency response: F[L(x)](f) = box(|f|<1/2) * box(|f|<1/2a) * sinc(2 pi f a)

    [note that "*" here is convolution, not multiplication]
       [also, I am ignoring normalization completely...]
  • sinc(pi x) 决定了频率响应的整体形状(对于较大的 a,频率响应看起来越来越像一个盒函数)
  • box(|x|<a) 给它有限的支持,所以你可以使用直接卷积
  • sinc(pi x/a) 平滑了盒子的边缘,并且(因此?等效地?)大大提高了对不需要的高频的抑制
  • 最后两个因素(“窗口”)也降低了铃声;它们在感知伪影和“下冲”的实际发生率方面都取得了巨大的进步——尽管没有完全消除它们

请注意,这一切都没有魔法。有各种各样的窗口可用,它们也可以正常工作。此外,对于 a=1 和 2,频率响应看起来不太像阶跃函数。但是,我希望这能回答您“为什么是 sinc”的问题,并让您对频率响应等有所了解。

于 2009-12-07T08:34:57.660 回答