PIL中的ANTIALIAS与BICUBIC(Python图像库)?

xun*_*ang 6 python interpolation image image-processing python-imaging-library

我正在使用PIL来调整我的图像大小,我的情况是扩大原始图像.

我对使用`resample = ANTIALIAS'的算法感到困惑.

根据下面的文件,ANTIALIAS在缩小规模时似乎是最好的.我想知道在哪种情况下可以BICUBIC获胜?(我的一些测试案例显示双三次更好的选择)

An optional resampling filter. 
  This can be one of NEAREST (use nearest neighbour), 
  BILINEAR (linear interpolation in a 2x2 environment), 
  BICUBIC (cubic spline interpolation in a 4x4 environment), 
  or ANTIALIAS (a high-quality downsampling filter). 
If omitted, or if the image has mode “1” or “P”, it is set NEAREST.
Run Code Online (Sandbox Code Playgroud)

我也感到困惑了linear interpolation in a 2x2 environment,并cubic spline interpolation in a 4x4 environment在文档中.这是什么意思?

谢谢.

Mar*_*som 16

ANTIALIAS不再是正确的术语,它被替换LANCZOS为使用的算法的更具描述性的术语.您仍然可以ANTIALIAS在代码中使用以实现向后兼容,但不建议这样做.

LANCZOS使用比模式更大的模式,BICUBIC并且应该产生稍微更清晰的结果.它也会变慢.

文件已被更改,因为有人问,以及2×2或4×4的引用已被删除.你可能并不是他们唯一困惑的人.

resample – An optional resampling filter. This can be one of PIL.Image.NEAREST
           (use nearest neighbour), PIL.Image.BILINEAR (linear interpolation),
           PIL.Image.BICUBIC (cubic spline interpolation), or PIL.Image.LANCZOS (a high-quality
           downsampling filter). If omitted, or if the image has mode “1” or “P”, it is set
           PIL.Image.NEAREST.
Run Code Online (Sandbox Code Playgroud)

以下内容不再有效,已在Pillow 2.7中修复.我将它留给那些旧版本的人,虽然我强烈建议你升级.


我现在已经通过消息来源找出细节.我对所看到的内容并不十分满意.

首先,BICUBIC.有许多公式可以归类为双三次,其中最常见的是Catmull-Rom插值.这不是PIL使用的.Don Mitchell和Arun Netravali撰写了一篇论文,分析了所有的变化并用两个变量B和C来表征它们.PIL使用的对应于B = 0和C = 1.在Mitchell-Netravali论文中,这显然是在Ringing神器区域.这意味着放大的图像会在边缘周围产生不自然的明亮或黑暗光晕.

接下来是ANTIALIAS.这是基于Lanczos-3过滤器,通常是缩小尺寸和增大尺寸的好选择.不幸的是,在升级时代码中存在一个错误 - 而不是采用6x6像素的区域来计算结果,它被截断为2x2像素.这使得它几乎不比双线性好.


agl*_*man 1

这些按复杂性从最低到最高的顺序列出。它们之间会有视觉差异。主要区别在于算法执行所需的时间。

您必须决定什么对您更重要:速度还是质量。如果您只制作 5 张图像,请追求质量。如果您要处理 100,000 张图像,也许会追求速度。这实际上取决于您使用它的目的。

2x2 和 4x4 环境意味着算法查看 2x2 或 4x4 的像素区域。