PIL(Python图像库)中的反别名vs双三次?

2024-06-01 03:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我对“resample=antialas”使用的算法感到困惑。

根据下面的文档,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.

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

谢谢。


Tags: orin文档图像pilenvironment情况filter
2条回答

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

你必须决定什么对你更重要,速度还是质量。如果你只拍了5张照片,那就选择高质量。如果你要拍10万张照片,也许要加快速度。这真的取决于你用它做什么。

2x2和4x4环境意味着算法会查看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.

下面不再有效,它是固定在枕头2.7。我把它留给那些老版本的用户,尽管我强烈建议您升级。


我现在已经查了资料来源,想知道细节。我对所看到的并不十分满意。

首先,BICUBIC。有许多公式可以归类为双三次函数,其中最常见的是Catmull-Rom插值。这不是皮尔用的。唐·米切尔和阿伦·内特拉瓦利写了一篇论文,分析了所有的变化,并用两个变量B和C来描述它们;PIL使用的变量对应于B=0和C=1。在米切尔-内特拉瓦利的论文中,这显然是在振铃伪影区。这意味着放大后的图像边缘会有不自然的亮晕或暗晕。

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

相关问题 更多 >