【问题标题】:ANTIALIAS vs BICUBIC in PIL(Python Image Library)?PIL(Python图像库)中的ANTIALIAS vs BICUBIC?
【发布时间】:2019-01-31 08:12:04
【问题描述】:

我正在使用 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 感到困惑。这里是什么意思?

谢谢。

【问题讨论】:

  • 哇。我一直都知道 PIL 有点混乱,但直到查看代码我才意识到有多少。稍后我会尝试进行全面调查。

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


【解决方案1】:

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 论文中,这显然是在 Ringing artifact 区域。这意味着放大的图像会在边缘周围出现不自然的明亮或黑暗光晕。

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

【讨论】:

  • 您是否向 PIL 报告了这些问题?不管您是否碰巧知道它们是否仍然存在问题?
  • @GordonWrigley 没有,也没有。我怀疑随着 Pillow 的积极发展,情况有所改善。
  • 看起来ANTIALIAS 过滤器已重命名为LANCZOS,并且发行说明说它已被修复。 pillow.readthedocs.io/en/3.0.x/releasenotes/2.7.0.html
  • @user666 这是个好消息!感谢发布说明的链接。他们解决了我发现的所有问题。
【解决方案2】:

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

您必须决定对您来说更重要的是速度还是质量。如果您只制作 5 张图片,请选择质量。如果您要处理 100,000 张图像,也许会追求速度。这真的取决于您使用它的目的。

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

【讨论】:

  • 在我的一些测试用例中,双三次是最好的。你能解释一下吗?
  • 他们都有自己的长处和短处,这真的取决于源图像。有些算法可能更适合具有鲜明对比线的图像,而另一些算法可能更适合自然场景。
  • 只是做一些谷歌搜索。关于哪种算法最适合哪种类型的图像,有很多博客文章和其他内容。最后,归根结底是什么对你来说更好看。
  • 问题在于,虽然“双三次”是一种定义明确的算法,但“抗锯齿”却不是。不可能找到可以定义差异的博客文章。 PIL 使用的算法可能是众所周知的,只是没有那个名字。不过,我从来没有尝试过深入研究源头来为自己弄清楚。
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多