0

正如我在这里介绍的(以 2D 形式),我想知道我是否可以“缩放”要绘制到绘图范围内的图像输入。更清楚地说,这就是我需要的:

我有一个 400 * 400 的图像,它是基于间隔为 -1..1 的函数生成的。因此,我进行了翻译以保存这些数据,如下所示:

x = Utils.translate(pos_x, 0, self.width, -1, 1)
y = Utils.translate(pos_y, 0, self.height, -1, 1)
data = Utils.map_position_to_function(x, y)

即,首先我将其位置映射到我的范围,然后根据这个“新位置”计算 de f(x, y) 并保存数据。此外,当我保存此图像时,我对数据进行转换,使其适合 0..255 范围,生成灰度图像。

问题是,稍后,我必须在函数范围内表示图像轮廓。所以,我有一个图像,400 * 400,我必须在一个范围为 -1..1 的图中表示。

在 2D 中,我可以使用以下代码执行此操作:

im = plt.array(Image.open('Mean.png').convert('L'))
plt.figure()
CS = plt.contour(im, origin='image', extent=[-1, 1, -1, 1])
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("CountorLevel2D.png")

二维轮廓

在 3D 中,我尝试了这个:

fig = plt.figure()
ax = fig.gca(projection='3d')
row = np.linspace(0, 400, 400)
X,Y = np.meshgrid(row,row)
CS = ax.contour(X, Y, im, cmap=cm.coolwarm, extent=[-1, 1, -1, 1])
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("ContourLevel3D.png")

3D 轮廓

但 X 和 Y 仍在 0..400 范围内。我不知道出了什么问题,或者我必须做什么才能使 X 和 Y 在 -1..1 范围内。此外,没有显示标签。

此外,由于im是图像,我读取的值介于 0..255 之间。我怎么能在 -1..1 范围内呈现它呢?

提前致谢。(:

4

1 回答 1

0

试试这个:

fig = plt.figure()
ax = fig.gca(projection='3d')
row = np.linspace(-1, 1, 400)
X,Y = np.meshgrid(row,row)
CS = ax.contour(X, Y, im, cmap=cm.coolwarm)
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("ContourLevel3D.png")
于 2013-09-16T05:57:17.720 回答