2011-10-14 169 views
28

是否可以增加matplotlib中的抗鋸齒? 我仍然可以在我的數據中看到一些別名,我嘗試了幾個後端,它仍然存在。線的抗鋸齒標誌被設置。更改matplotlib中抗鋸齒的強度

在這裏你可以明白我的意思

enter image description here

這是從截圖取樣。這可能不是最好的例子,但我想你可以看到線上的樓梯。它是與wxagg後端一起拍攝的。

我使用matplotlib 1.01版與Windows 7

更新: 我沒有它生產前一張照片了的代碼,但我仍然有問題。以下是一個簡單的代碼示例,顯示了別名。

import numpy as np 
import matplotlib 
matplotlib.use('wxAgg') 
import matplotlib.pyplot as pl 
print 'Backend:', pl.get_backend() 

x = np.linspace(0,6,100) 
y = np.sin(x) 

for a in range(10): 
    pl.plot(x, a/10.*x, linewidth=1) 

pl.show() 

它打印的Backend: WXAgg ,並將所得的情節如下所示。 aliasing

特別是較低的紅色曲線顯示清晰的鋸齒。

+6

以較高的像素尺寸呈現您的繪圖並使用高質量的算法縮小比例。 –

+0

但交互式會話呢? – P3trus

+0

你是用'imshow'來指圖像嗎?如果是這樣,這與抗鋸齒無關,這只是'imshow'使用的插值算法。 (它會插入3段顏色數組,而不是原始數據,這會導致很多僞像。) –

回答

4

你添加到你的問題的圖片已經完全消除鋸齒。它沒有比這更好。看一看圖像的放大版本:

Upscaled version of the image in question

+1

你是對的,這是很好的反鋸齒,但我不知道我會走得如此「完美」。有很多因素會進入一個好的反鋸齒算法。 –

+0

1.它看起來沒有有限數量的陰影(例如喜歡Windows字體渲染) 2.沒有可見的工件。 3.亞像素渲染不是紅色的東西的選擇。 4.每行像素跨度的寬度由線寬定義,因此算法無法更改。 我真的不知道如何以任何方式改善。你看到一種方式嗎? – Simon

+0

我甚至沒有提到子像素渲染。你已經提出了一個因素,即陰影的數量,這是由超採樣的數量決定的。我可以想到其他人:濾鏡的形狀和大小,色彩空間的線性。 –

4

如果您將圖片保存爲.svg文件,你將有無限的精度。然後你可以用InkScape這樣的東西編輯這個.svg文件,並且根據你的喜好獲得多少精度/抗鋸齒。

+0

是啊,輸出到'svg - > inkscape - >以5x dpi的輸出到png - > GIMP - > [模糊咯? - >]縮放到20% - >再次輸出到png。完全去除了相鄰多邊形之間的白線。 – naught101