【问题标题】:change strength of antialiasing in matplotlib更改 matplotlib 中的抗锯齿强度
【发布时间】:2011-12-07 17:10:42
【问题描述】:

是否可以在 matplotlib 中增加抗锯齿? 我仍然可以在我的数据中看到一些混叠,我尝试了几个后端,它仍然存在。行的抗锯齿标志已设置。

这里你可以明白我的意思

这是从屏幕截图中截取的样本。这可能不是最好的例子,但我想人们可以看到排队的楼梯。它是使用 wxagg 后端拍摄的。

我在 Windows 7 上使用 matplotlib 1.01 版。

更新: 我没有产生上一张图片的代码了,但我仍然有问题。下面是一个显示别名的简单代码示例。

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 结果图如下所示。

尤其是下方的红色曲线显示出明显的锯齿。

【问题讨论】:

  • 使用高质量算法以更高的像素尺寸和更小的比例渲染您的绘图。
  • 但是交互式会话呢?
  • 您指的是带有imshow 的图像图吗?如果是这样,那与抗锯齿无关,那只是imshow使用的插值算法。 (它会插入 3 波段颜色数组,而不是原始数据,这会导致很多伪影。)
  • 不,我指的是简单的线图。
  • 啊,抱歉,我草率下结论...您使用的是什么后端?一些后端比其他后端处理得更好。基于 Agg 的后端抗锯齿效果很好。其他一些则没有。

标签: python matplotlib antialiasing


【解决方案1】:

如果您将图片保存为 .svg 文件,您将获得无限的精度。然后,您可以使用 InkScape 之类的工具编辑此 .svg,并根据需要获得多少精度/抗锯齿。

【讨论】:

  • 是的,导出到svg -> inkscape -> export to png at 5x the dpi -> GIMP -> [blur slightly? ->] scale to 20% -> export to png again。为我完全移除了相邻多边形之间的白线。
【解决方案2】:

您添加到问题中的图片已经完全消除锯齿。没有比这更好的了。看看图片的放大版本:

【讨论】:

  • 你是对的,这是很好的抗锯齿,但我不确定我是否会做到“完美”。一个好的抗锯齿算法有很多因素。
  • 1.它似乎没有数量有限的阴影(例如 Windows 字体渲染) 2. 没有可见的伪影。 3. 亚像素渲染不是红色事物的选项。 4. 每行一个pixel-span的宽度是由线宽定义的,不能被算法改变。我真的不知道如何以任何方式改善这种情况。你有办法吗?
  • 我什至没有提到亚像素渲染。您提出了一个因素,即阴影数量,它由应用的超级采样量决定。我能想到其他的:滤镜的形状和大小,色彩空间的线性度。
  • 没错,你是对的。没有考虑伽玛校正和那些东西。我刚才尝试了几种变体,使用 Gamma 校正和其他缩放,在不改变线宽的情况下无法让它看起来更好。很想听听你会改变什么。
  • 我认为必须在线性色彩空间中进行过滤,然后进行伽玛校正或转换为 sRGB 以进行输出。过滤器的选择将影响步骤的模糊性和可见性之间的权衡。我希望自己探索其中的一些选择,但我没有时间和动力。
猜你喜欢
  • 2012-01-12
  • 2010-11-28
  • 2014-02-18
  • 1970-01-01
  • 2016-06-28
  • 2011-07-05
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多