5

我使用PIL來調整圖像大小,我的情況是放大原始圖像。PIL(Python圖像庫)中的ANTIALIAS與BICUBIC?

我對`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 environmentcubic spline interpolation in a 4x4 environment。這是什麼意思?

謝謝。

+0

哇。我一直都知道PIL有點搞砸了,但直到看代碼才知道有多少。我會盡量在以後進行全面調查。 –

回答

0

這些按照從最低到最高複雜度的順序列出。他們之間會有視覺差異。主要的區別在於算法執行需要多長時間。

您必須決定對您更重要的是,速度或質量。如果你只做5張圖片,那麼請追求品質。如果你正在做10萬張圖片,也許會加快速度。這取決於你使用的是什麼。

2x2和4x4環境意味着該算法查看2x2或4x4像素區域。

+0

在我的一些測試用例中,雙三次是最好的。你能解釋一下嗎? – xunzhang

+1

他們都有自己的長處和短處,這實際上取決於來源形象。某些算法對於具有鮮明對比線的圖像看起來會更好,其他算法對於自然場景可能效果更好。 – aglassman

+0

這就是我要求的... – xunzhang

11

我現在通過源代碼來弄清楚細節。我看到的東西並不令人高興。

首先,BICUBIC。有許多可以分類爲雙三次的公式,其中最常見的是Catmull-Rom插值。這不是PIL使用的。 Don Mitchell和Arun Netravali寫了一篇論文,分析了所有的變化,並用兩個變量B和C來表徵它們; PIL使用的那個對應於B = 0和C = 1。在Mitchell-Netravali的論文中,這顯然是在Ringing神器區域。這意味着放大的圖像在邊緣周圍會出現不自然的明亮或黑暗的光暈。

接下來是ANTIALIAS。這是基於Lanczos-3過濾器的,通常這是小型化和大型化的好選擇。不幸的是,在升級時代碼中存在一個錯誤 - 而不是在6x6像素區域計算結果,它被截斷爲2x2像素。這使它幾乎比雙線性更好。

+0

您是否向PIL報告過這些問題?並且不管你是否知道他們是否還存在問題? –

+0

@GordonWrigley不,沒有。我懷疑在枕頭上的積極發展已經有所改善。 –