我正在使用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
感到困惑。这是什么意思?
感谢。
答案 0 :(得分:16)
ANTIALIAS
不再是正确的术语,而是由LANCZOS
取代,ANTIALIAS
是所用算法的更具描述性的术语。您仍然可以在代码中使用LANCZOS
以便向后兼容,但不建议这样做。
BICUBIC
使用比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.
更大的模式,并且应该产生稍微更清晰的结果。它也会慢一点。
自提出问题以来documentation已更改,并且已删除对2x2或4x4的引用。你可能不是唯一被他们困惑的人。
BICUBIC
以下不再有效,已在Pillow 2.7中修复。我将它留给那些旧版本的人,虽然我强烈建议你升级。
<小时/> 我现在已经通过消息来源找出细节。我对所看到的内容并不十分满意。
首先,ANTIALIAS
。有许多公式可以归类为双三次,其中最常见的是Catmull-Rom插值。这不是PIL使用的。 Don Mitchell和Arun Netravali撰写了一篇论文,分析了所有的变化并用两个变量B和C来表征它们。 PIL使用的对应于B = 0和C = 1。在Mitchell-Netravali论文中,这显然是在Ringing神器区域。这意味着放大的图像会在边缘周围产生不自然的明亮或黑暗光晕。
接下来是{{1}}。这是基于Lanczos-3过滤器,通常是缩小尺寸和增大尺寸的好选择。不幸的是,在升级时代码中存在一个错误 - 而不是采用6x6像素的区域来计算结果,它被截断为2x2像素。这使得它几乎不比双线性好。
答案 1 :(得分:0)
这些按最低至最高复杂度的顺序列出。它们之间会有视觉差异。主要区别在于算法执行的时间。
您必须决定对您,速度或质量更重要的事情。如果您只拍摄5张图片,请选择质量。如果您要拍摄100,000张图片,可能会追求速度。这实际上取决于你使用它的目的。
2x2和4x4环境意味着算法会查看2x2或4x4像素区域。