0

ここで(2D で)提示しているように、プロット内の範囲にプロットされる画像入力をどのように「スケーリング」できるか疑問に思っています。より明確にするために、これが私が必要とするものです:

間隔が-1..1の関数に基づいて生成された400 * 400の画像があります。したがって、このデータを保存するために、次のように変換を行います。

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 の範囲に収まるようにし、グレースケール画像を生成します。

問題は、後で関数範囲で画像の輪郭を表現しなければならないことです。したがって、範囲が -1..1 のプロットで表す必要がある 400 * 400 の画像があります。

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")

2D 輪郭

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 に答える