给定一张图片一世(米, n )和, n _整数,该图像在任意点的插值m′,n′可以写成
I~(m′,n′)=∑m=⌊m′⌋−w+1⌊m′⌋+w ∑n=⌊n′⌋−w+1⌊n′⌋+wI(m,n) f(m′−m,n′−n)
结果I~仍然只是真实的底层连续图像的近似值I(x,y)不同的插值函数所做的只是在不同的约束和目标下最小化近似误差。
在信号处理中,您需要插值函数f(m,n)成为理想的低通滤波器。但是,它的频率响应需要无限支持,并且仅对带限信号有用。大多数图像没有带宽限制,并且在图像处理中还有其他因素需要考虑(例如眼睛如何解释图像。数学上最优的可能在视觉上并不吸引人)。插值函数的选择,就像窗口函数一样,很大程度上取决于手头的具体问题。我没有听说过 Connes、Welch 和 Parzen(也许它们是特定领域的),但其他的应该是上面 Wikipedia 链接中给出的一维窗口的数学函数的二维等价物。
就像时间信号的窗口函数一样,通过查看图像内插核的频率响应,很容易了解图像内插核的作用。从我对窗口函数的回答:
描述窗函数的两个主要因素是:
- 主瓣宽度(即,在哪个频率区间,功率是最大响应的一半)
- 旁瓣的衰减(即,旁瓣离主瓣有多远)。这告诉您窗口中的频谱泄漏。
这几乎适用于插值内核。选择基本上是在频率过滤(旁瓣衰减)、空间定位(主瓣宽度)和减少其他影响(例如振铃(吉布斯效应)、混叠、模糊等)之间进行权衡。例如,具有振荡的内核因为 sinc 内核和 Lanczos4 内核会在图像中引入“振铃”,而高斯重采样不会引入振铃。
这是 Mathematica 中的一个简化示例,让您可以看到不同插值函数的效果:
true = ExampleData[{"TestImage", "Lena"}];
resampling = {"Nearest", "Bilinear", "Biquadratic", "Bicubic",
"Gaussian", "Lanczos", "Cosine", "Hamming", "Hann", "Blackman",
"Bartlett", "Connes", "Welch", "Parzen", "Kaiser"};
small = ImageResize[true, Scaled[1/4]];
在这里,true
代表我认为是“精确”图像的离散等效的图像I(x,y), 并small
表示较小比例的图像I(m,n)(我们不知道它是如何获得的)。我们将插值I(m,n)4x 给I~(m′,n′)与原始大小相同。下面,我展示了这种插值的结果以及与真实图像的比较:
您可以亲自看到不同的插值函数具有不同的效果。Nearest 和其他一些具有非常粗糙的特征,您基本上可以看到锯齿状线条(查看完整尺寸的图像,而不是网格显示)。Bicubic、biquadratic 和 Parzen 克服了这一点,但引入了很多模糊。在所有内核中,Lanczos 似乎(在视觉上)是最吸引人的,也是最出色的内核。
当我有时间时,我将尝试扩展这个答案并提供更直观的示例来展示差异。您可能想阅读我在网上找到的这篇非常简单且内容丰富的文章(PDF 警告)。