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

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

我正在使用 PIL 调整图像大小,我的情况是放大原始图像。

我对与 `resample=ANTIALIAS' 一起使用的算法感到困惑。

根据下面的文档,ANTIALIAS 在缩小时似乎是最好的。我想知道在哪种情况下 BICUBIC 可以获胜?(我的一些测试用例显示 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.

我也对文档中的2x2 环境中的线性插值4x4 环境中的三次样条插值感到困惑。这里是什么意思?

谢谢。

最佳答案

ANTIALIAS 不再是正确的术语,它被 LANCZOS 取代,这是对所用算法更具描述性的术语。为了向后兼容,您仍然可以在代码中使用 ANTIALIAS,但不推荐这样做。

LANCZOS 使用比 BICUBIC 更大的图案,应该会产生稍微更清晰的结果。它也会变慢。

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

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.

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


我现在已经通过源代码找出细节。我对我所看到的并不十分满意。

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

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

关于python - PIL(Python 图像库)中的 ANTIALIAS 与 BICUBIC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23113163/

相关文章:

python - 从计数表计算相对频率

ios - 如何实现不同分辨率的图像

matlab - 使用matlab从具有透视失真的图像中进行文本检测

c# - 使用 C# 在图像中查找黑色正方形/矩形

image - 如何更改点击Unity时的按钮图像

opencv - 是否有可能使两个灰度图像在统计上相等?

python - 根据列名为 NetworkX 节点分配颜色

python - Conda 未安装最新版本

python - 如何使用 argparse 删除 CLI 参数,以便 unittest 接受 arg 列表

html - Retina Ready HTML image(<img/>) 正确的解决方案?