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

时间:2014-04-16 15:00:55

标签: python image image-processing python-imaging-library interpolation

我正在使用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.

我也对文档中的linear interpolation in a 2x2 environmentcubic spline interpolation in a 4x4 environment感到困惑。这是什么意思?

感谢。

2 个答案:

答案 0 :(得分:16)

ANTIALIAS不再是正确的术语,而是由LANCZOS取代,ANTIALIAS是所用算法的更具描述性的术语。您仍然可以在代码中使用LANCZOS以便向后兼容,但不建议这样做。

BICUBIC使用比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. 更大的模式,并且应该产生稍微更清晰的结果。它也会慢一点。

自提出问题以来documentation已更改,并且已删除对2x2或4x4的引用。你可能不是唯一被他们困惑的人。

BICUBIC

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

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

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

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

答案 1 :(得分:0)

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

您必须决定对您,速度或质量更重要的事情。如果您只拍摄5张图片,请选择质量。如果您要拍摄100,000张图片,可能会追求速度。这实际上取决于你使用它的目的。

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