Actualmente estoy trabajando con datos astronómicos entre los que tengo imágenes de cometas. Me gustaría eliminar el gradiente de fondo del cielo en estas imágenes debido al tiempo de captura (crepúsculo). El primer programa que desarrollé para hacerlo tomó los puntos seleccionados por el usuario de la "ginput" de Matplotlib (x, y) extrajo los datos para cada coordenada (z) y luego cuadriculó los datos en una nueva matriz con "griddata" de SciPy.Ajuste de superficie polinomial 3D de Python, dependiente del pedido
Como se supone que el fondo varía ligeramente, me gustaría ajustar un polinomio de orden bajo de 3D a este conjunto de puntos (x, y, z). Sin embargo, el "gridData" no permite la entrada de una orden:
griddata(points,values, (dimension_x,dimension_y), method='nearest/linear/cubic')
¿Alguna idea sobre otra función que se puede utilizar o un método para desarrollar un LEA cuadrados encajan que me permitirá controlar el orden?
Se trata de una solución muy elegante al problema. He usado su código sugerido para caber en un paraboloide elíptico con una pequeña modificación que deseo compartir. Me interesaba adaptar solo soluciones lineales en la forma 'z = a * (x-x0) ** 2 + b * (y-y0) ** 2 + c'. El código completo de mis cambios se puede ver [aquí] (http://www.nublia.com/dev/stackoverflow/stow_polyfit2d.py). – regeirk
Nota: Para las versiones recientes de numpy, vea la respuesta de @klaus a continuación. En el momento de mi respuesta original 'polyvander2d', etc. no existía, pero son el camino a seguir, en estos días. –
¿es realmente un polinomio de tercer orden? a menos que lo entiendo mal pero ¿no tendrá un término 'X ** 3 * Y ** 3' de orden 6? – maxymoo