python imshow像素大小在剧情内变化

时间:2017-01-10 08:10:44

标签: python matplotlib plot pixels

亲爱的stackoverflow社区!

我需要使用imshow在python中绘制2D地图。使用的命令是

plt.imshow(ux_map, interpolation='none', origin='lower', extent=[lonhg_all.min(), lonhg_all.max(), lathg_all.min(), lathg_all.max()])

然后保存图像如下

plt.savefig('rdv_cr%s_cmlon%s_ux.png' % (2097, cmlon_ref))

看起来像

image2d_problem

问题在于,当放大到绘图时,可以注意到像素具有不同的形状(例如,不同的宽度)。这在下面的缩放部分(从第一张图像的顶部区域拍摄)中说明:

enter image description here

这种行为有什么理由吗?我为我的数据输入了一个矩形网格,但我认为问题与数据本身没有关系。相反,它可能与渲染有关。我希望所有像素都具有相同的形状,但可以看出它们具有不同的宽度和高度。顺便说一句,这也发生在matplotlib的交互式情节中。然而,当放大那里时,它们会突然变得同样形状。

我不确定是否 https://github.com/matplotlib/matplotlib/issues/3057/及其中的链接可能是相关的,但我可以尝试使用dpi值。在任何情况下,如果有人知道为什么会发生这种情况,那么该人是否可以提供一些背景资料,说明为什么计算机无法使用上述命令按预期显示情节呢?

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

这与图像映射到屏幕的方式有关。为了确定屏幕中像素的颜色,从图像中采样相应的颜色。如果屏幕区域和图像大小不匹配,则会发生上采样(图像太小)或下采样(图像太大)。

您观察到了一个上采样的情况。例如,考虑在屏幕上的6x6像素区域上绘制4x4图像。有时两个屏幕像素落入图像像素,有时只有一个。在这里,我们观察到不同大小像素的极端情况。

Sampling

放大交互式视图时,此效果似乎消失了。那是因为突然你将图像映射到大量像素。如果一个图像像素被放大到例如10个屏幕像素而另一个像素被放大到11,则几乎没有注意到这种差异。当图像几乎与屏幕分辨率匹配时,效果最明显。

解决此问题的解决方案是使用插值,这可能会导致不希望的模糊外观。为了减少模糊,你可以......

  • 使用不同的插值函数。试试例如app_code

  • 或使用最近邻插值通过常数因子对图像进行放大(例如,用相同颜色的像素块替换图像中的每个像素)。然后,任何模糊只会影响块的边缘。