首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIL(Python Image Library)中的ANTIALIAS vs BICUBIC?

PIL(Python Image Library)中的ANTIALIAS vs BICUBIC?
EN

Stack Overflow用户
提问于 2014-04-16 23:00:55
回答 2查看 12.4K关注 0票数 10

我正在使用PIL来调整我的图像大小,我的案例是放大原始图像。

我对使用‘`resample=ANTIALIAS’的算法感到困惑。

根据下面的文档,在缩小规模时,ANTIALIAS似乎是最好的。我想知道在哪种情况下BICUBIC可以获胜?(我的一些测试案例表明双立方是更好的选择)

代码语言:javascript
复制
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感到困惑。它在这里是什么意思?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-16 23:24:58

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

你必须决定哪个对你更重要,速度还是质量。如果你只做5张图片,那就去追求质量吧。如果你正在做100,000张图片,也许可以追求速度。这真的取决于你用它做什么。

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

票数 1
EN

Stack Overflow用户

发布于 2014-04-22 10:56:30

ANTIALIAS不再是合适的术语,取而代之的是LANCZOS,后者是所用算法的更具描述性的术语。出于向后兼容的目的,您仍然可以在代码中使用ANTIALIAS,但不推荐这样做。

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

提出问题后,documentation已更改,并删除了对2x2或4x4的引用。你可能不是唯一一个被它们弄糊涂的人。

代码语言:javascript
复制
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过滤器,这通常是一个很好的选择,无论是缩小还是扩大。不幸的是,当升迁时,代码中有一个bug --不是采用6x6像素的区域来计算结果,而是将其截断为2x2像素。这使得它比双线性好不了多少。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23113163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档