hor*_*guy 25 algorithm graphics image image-processing image-scaling
我对图像缩放算法感兴趣,并实现了双线性和双三次方法.但是,我听说过lanczos和其他更复杂的方法可以实现更高质量的图像缩放,我很好奇它们是如何工作的.
有人可以在这里解释使用lanczos(放大和缩小)缩放图像背后的基本思想以及为什么它会带来更高的质量?
我确实有傅里叶分析的背景,过去曾做过一些信号处理工作,但与图像处理无关,所以不要害怕使用像"频率响应"这样的术语,如你的答案:)
编辑:我想我真正想知道的是使用卷积滤波器进行插值的概念和理论.
(注意:我已经阅读了有关lanczos重采样的维基百科文章,但它没有足够的细节供我使用)
非常感谢!
com*_*orm 35
选择用于图像处理的特定滤镜是一种黑色艺术,因为判断结果的主要标准是主观的:在计算机图形学中,最终的问题几乎总是:"它看起来好吗?".那里有很多好的过滤器,最好的选择往往归结为判断.
那就是说,我会继续讨论一些理论......
由于您熟悉信号处理的傅里叶分析,因此您不需要了解更多将其应用于图像处理 - 所有直接感兴趣的过滤器都是"可分离的",这基本上意味着您可以在x和y方向.这减少了重新采样(2-D)图像以重新采样(1-D)信号的问题.你的信号不是时间(t)的函数,而是一个坐标轴(比如x)的函数; 其他一切都完全一样.
最终,您需要使用滤波器的原因是为了避免混叠:如果要降低分辨率,则需要滤除新的,较低分辨率不支持的高频原始数据,或者将其添加改为不相关的频率.
所以.当您从原件中滤除不需要的频率时,您希望保留尽可能多的原始信号.此外,您不希望扭曲您保留的信号.最后,您希望尽可能完全消除不需要的频率.这意味着 - 理论上 - 良好的滤波器应该是频率空间中的"盒子"函数:对于截止频率以上的频率具有零响应,对于截止频率以下的频率具有单位响应,并且在它们之间具有阶跃函数.而且,从理论上讲,这种反应是可以实现的:正如您所知,直接正弦滤波器将为您提供准确的结果.
这有两个问题.首先,直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...]
Run Code Online (Sandbox Code Playgroud)
请注意,这些都没有任何魔力.有各种各样的窗户可供使用,也可以使用.此外,对于a = 1和2,频率响应看起来不像阶跃函数.但是,我希望这能回答你的问题"为什么sinc",并让你对频率响应等有所了解.