J'ai besoin d'aide pour coder un algo qui me permettrait de tracer une courbe en 3d à partir d'une image en nuance de gris.
Seulement je n'ai pas étudié les fonctions plot3d, et je n'arrive pas à trouver un moyen simple.
J'ai créé une fonction qui renvoie un tableau avec les valeurs des nuances. Ainsi à chaque coordonnées x et y correspondrait une valeur de gris, et donc une certaine côte.
Il s'agit là d'une première approche pour tenter de modéliser en 3d une image obtenue au microscope électronique. Je pourrai complexifier une fois que j'en saurai plus sur les modules

Ici, il me suffirait de renvoyer chaque élément de la matrice M.
Seulement, python me renvoie une erreur d'indexage :
j'écris M[x][y], ce qui apparemment est une erreur d'argument de la fonction "ax.plot_surface". Du coup j'ai essayé de vectoriser la fonction, mais ça change rien !!
Y a-t-il un moyen de s'en sortir ?
from __future__ import division
from scipy import *
from pylab import *
from PIL import Image
import numpy as np
#utilisation de PIL :
i=Image.open("M:/tipe/image.jpg")
(lo,la)=i.size
i.show()
# Matrice des nuances de gris :
def matrice(lo,la):
L=np.array(i.getdata())
M=[]
P=np.zeros(lo)
for k in range(la):
for j in range(lo):
P[j]=L[j]
M.append(np.array(P))
return M
#tracé altitude > nuance de gris :
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
M=matrice(lo,la)
x=np.arange(la)
y=np.arange(lo)
X,Y=np.meshgrid(x,y)
def z(x,y):
return M[x][y]
Z=vectorize(z(x,y))
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z,rstride=2,cstride=2,cmap=cm.RdPu,linewidth=1,antialiased=True)