Coordenadas de la imagen girada después de scipy.ndimage.interpolation.rotate?

Tengo una matriz numpy para una imagen que leí en un archivo FITS. Lo scipy.ndimage.interpolation.rotate por N grados usando scipy.ndimage.interpolation.rotate . Luego quiero saber dónde termina un punto (x, y) en el marco original no girado en la imagen girada, es decir, ¿cuáles son las coordenadas del marco girado (x ‘, y’)?

Este debería ser un problema de matriz de rotación muy simple, pero si hago las ecuaciones de rotación habituales basadas en progtwigción o matemática, las nuevas (x ‘, y’) no terminan donde estaban originalmente. Sospecho que esto tiene algo que ver con la necesidad de una matriz de traducción, ya que la función de rotación de scipy se basa en el origen (0,0) en lugar del centro real de la matriz de la imagen.

¿Puede alguien decirme cómo obtener el marco girado (x ‘, y’)? Como ejemplo, podrías usar

 from scipy import misc from scipy.ndimage import rotate data_orig = misc.face() data_rot = rotate(data_orig,66) # data array x0,y0 = 580,300 # left eye; (xrot,yrot) should point there 

PS Las siguientes respuestas a las dos preguntas relacionadas no me ayudan:

Como es habitual en las rotaciones, es necesario traducir al origen, luego girar y luego volver a traducir. Aquí, podemos tomar el centro de la imagen como origen.

 import numpy as np import matplotlib.pyplot as plt from scipy import misc from scipy.ndimage import rotate data_orig = misc.face() x0,y0 = 580,300 # left eye; (xrot,yrot) should point there def rot(image, xy, angle): im_rot = rotate(image,angle) org_center = (np.array(image.shape[:2][::-1])-1)/2. rot_center = (np.array(im_rot.shape[:2][::-1])-1)/2. org = xy-org_center a = np.deg2rad(angle) new = np.array([org[0]*np.cos(a) + org[1]*np.sin(a), -org[0]*np.sin(a) + org[1]*np.cos(a) ]) return im_rot, new+rot_center fig,axes = plt.subplots(2,2) axes[0,0].imshow(data_orig) axes[0,0].scatter(x0,y0,c="r" ) axes[0,0].set_title("original") for i, angle in enumerate([66,-32,90]): data_rot, (x1,y1) = rot(data_orig, np.array([x0,y0]), angle) axes.flatten()[i+1].imshow(data_rot) axes.flatten()[i+1].scatter(x1,y1,c="r" ) axes.flatten()[i+1].set_title("Rotation: {}deg".format(angle)) plt.show() 

introduzca la descripción de la imagen aquí