为图像处理选择特定的过滤器是一种魔法,因为判断结果的主要标准是主观的:在计算机图形学中,最终的问题几乎总是:“它看起来不错吗?”。那里有很多好的过滤器,最好的过滤器之间的选择通常归结为判断电话。
也就是说,我将继续进行一些理论...
由于您熟悉信号处理的傅立叶分析,因此您不需要了解更多信息即可将其应用于图像处理——所有直接感兴趣的滤波器都是“可分离的”,这基本上意味着您可以在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”的问题,并让您对频率响应等有所了解。