我正在使用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 environment
和cubic spline interpolation in a 4x4 environment
感到困惑。这是什么意思?
谢谢。
它们按复杂度从低到高的顺序列出。他们之间会有视觉上的差异。主要的区别在于算法执行需要多长时间。
你必须决定什么对你更重要,速度还是质量。如果你只拍了5张照片,那就选择高质量。如果你要拍10万张照片,也许要加快速度。这真的取决于你用它做什么。
2x2和4x4环境意味着算法会查看2x2或4x4像素区域。
ANTIALIAS
不再是合适的术语,取而代之的是LANCZOS
,这是对所用算法更具描述性的术语。出于向后兼容的目的,您仍然可以在代码中使用ANTIALIAS
,但不建议这样做。LANCZOS
使用比BICUBIC
更大的模式,应该会产生稍微尖锐的结果。它也会变慢。问题提出后documentation已经更改,对2x2或4x4的引用也已删除。你可能不是唯一被他们搞糊涂的人。
下面不再有效,它是固定在枕头2.7。我把它留给那些老版本的用户,尽管我强烈建议您升级。
我现在已经查了资料来源,想知道细节。我对所看到的并不十分满意。
首先,
BICUBIC
。有许多公式可以归类为双三次函数,其中最常见的是Catmull-Rom插值。这不是皮尔用的。唐·米切尔和阿伦·内特拉瓦利写了一篇论文,分析了所有的变化,并用两个变量B和C来描述它们;PIL使用的变量对应于B=0和C=1。在米切尔-内特拉瓦利的论文中,这显然是在振铃伪影区。这意味着放大后的图像边缘会有不自然的亮晕或暗晕。接下来是
ANTIALIAS
。这是基于Lanczos-3过滤器,这通常是一个很好的选择,无论是缩小规模还是扩大规模。不幸的是,在升迁时代码中有一个错误-不是采用6x6像素的区域来计算结果,而是截短为2x2像素。这使得它几乎不比双线性好。相关问题 更多 >
编程相关推荐