Trazar el contorno 3D de una imagen utilizando la extensión con Matplotlib

Como presento aquí (en 2D), me pregunto si podría “escalar” una entrada de imagen para trazarla en un rango en el gráfico. Para ser más claros, esto es lo que necesito:

Tengo una imagen de 400 * 400 que se genera en función de una función cuyo intervalo es -1..1. Entonces, hago una traducción para guardar esta información, como esta:

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) 

Es decir, primero asigno su posición a mi rango y luego calculo la f (x, y) en base a esta “nueva posición” y guardo los datos. Además, al guardar esta imagen, traduzco los datos para que quepan en un rango de 0..255, generando una imagen en escala de grises.

El problema es que, más adelante, tengo que representar el contorno de la imagen en el rango de funciones. Entonces, tengo una imagen, 400 * 400, que tengo que representar en un gráfico cuyo rango es -1..1.

En 2D, podría hacer esto con este código:

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

Contorno 2D

En 3D, he intentado esto:

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

Contorno 3D

Pero el X y el Y todavía están en el rango de 0..400. No sé qué está mal, o qué debo hacer para tener X e Y en el rango de -1..1. Además, no se muestra ninguna etiqueta.

Además, como im es una imagen, leo valores que oscilan entre 0..255 valores. ¿Cómo podría presentar esto en un rango de -1..1 también?

Gracias por adelantado. (:

Intente esto insted:

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