在matplotlib中防止imshow出现反锯齿效果

51

当我使用matplotlib的imshow()方法来表示一个小的numpy矩阵时,它会在像素之间进行一些平滑处理。有没有办法禁用这个功能?这会使我的图表在演示中误导观众。

使用imshow()绘制的28x28矩阵

上面的图是一个28x28的图像,因此我应该看到每个像素的单一颜色大方块(就像在matlab中使用imagesc()时显示的那样)。但是,相反,像素似乎与相邻像素模糊在一起。有没有办法禁用这种行为?

2个回答

56

对于imshow,有一个插值(interpolation)选项来控制是否以及如何应用插值算法来渲染矩阵。如果你尝试

imshow(array, interpolation="nearest") 

你可能会得到更符合你要求的东西。举个例子

A=10*np.eye(10) + np.random.rand(100).reshape(10,10)
imshow(A)

显示图像A

相比之下

A=10*np.eye(10) + np.random.rand(100).reshape(10,10)
imshow(A, interpolation="nearest")

在此输入图像描述


谢谢,看起来好像可以工作。出于好奇,为什么插值被称为“nearest”?此页面上的文档:http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.imshow 没有描述“nearest”的作用。 - Christopher Dorian
4
说实话,我不知道。在开发树中现在也有一个interpolation="none"选项,它基本上做了同样的事情。这个例子提供了更多关于interpolation="nearest"试图实现什么的信息。 - talonmies
9
或许它正在尝试从显示像素附近的“最近”邻居中进行采样? - DrSAR
这确实是“最近邻”插值。 - wim
3
@ChristopherDorian,虽然我来晚了4年,但最近和无差别的区别是什么:http://matplotlib.org/examples/images_contours_and_fields/interpolation_none_vs_nearest.html。 - Ander Biguri

20

你也可以尝试使用这个函数

matshow 

这个名称表明它确切地做了你要求的事情 - 表示矩阵。当你不需要太多自定义图形时,它非常方便。

顺便说一句,matplotlib 最好的资源之一是他们的Gallery


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接