我正在使用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 environment和cubic spline interpolation in a 4x4 environment感到困惑。它在这里是什么意思?
谢谢。
发布于 2014-04-16 23:24:58
它们是按照复杂度从低到高的顺序列出的。它们之间会有视觉上的差异。主要的区别是算法需要多长时间才能执行。
你必须决定哪个对你更重要,速度还是质量。如果你只做5张图片,那就去追求质量吧。如果你正在做100,000张图片,也许可以追求速度。这真的取决于你用它做什么。
2x2和4x4环境意味着算法查看像素的2x2或4x4区域。
发布于 2014-04-22 10:56:30
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过滤器,这通常是一个很好的选择,无论是缩小还是扩大。不幸的是,当升迁时,代码中有一个bug --不是采用6x6像素的区域来计算结果,而是将其截断为2x2像素。这使得它比双线性好不了多少。
https://stackoverflow.com/questions/23113163
复制相似问题