Are there any Python packages that can do this?
Sí! Ahora hay, al menos, un paquete de Python que tiene una función para volver a mapear una matriz desde coordenadas cartesianas a coordenadas polares: abel.tools.polar.reproject_image_into_polar()
, que es parte de PyAbel package.
(Iñigo Hernáez Corres es correcta, scipy.ndimage.interpolation.map_coordinates
es la manera más rápida que hemos encontrado hasta ahora reproyectar desde cartesianas a coordenadas polares.)
PyAbel se puede instalar desde PyPi introduciendo lo siguiente en la línea de comandos:
pip install pyabel
Luego, en Python, puede utilizar el código siguiente para volver a proyectar una imagen en coordenadas polares:
import abel
abel.tools.polar.reproject_image_into_polar(MyImage)
[Dependiendo de la aplicación, puede considerar pasar el argumento jacobian=True
, que vuelve a escalar las intensidades de la matriz para incluir en la cuenta el estiramiento de la cuadrícula (cambiando el "tamaño del contenedor") que se produce cuando se transforma de cartesiano a coodinates polares.]
Aquí es un ejemplo completo:
import numpy as np
import matplotlib.pyplot as plt
import abel
CartImage = abel.tools.analytical.sample_image(501)[201:-200, 201:-200]
PolarImage, r_grid, theta_grid = abel.tools.polar.reproject_image_into_polar(CartImage)
fig, axs = plt.subplots(1,2, figsize=(7,3.5))
axs[0].imshow(CartImage , aspect='auto', origin='lower')
axs[1].imshow(PolarImage, aspect='auto', origin='lower',
extent=(np.min(theta_grid), np.max(theta_grid), np.min(r_grid), np.max(r_grid)))
axs[0].set_title('Cartesian')
axs[0].set_xlabel('x')
axs[0].set_ylabel('y')
axs[1].set_title('Polar')
axs[1].set_xlabel('Theta')
axs[1].set_ylabel('r')
plt.tight_layout()
plt.show()
Nota: hay otra buena discusión (sobre imágenes en color re-mapeo de coordenadas polares) en SO: image information along a polar coordinate system
Eso no es un problema fácil, y sería interesante y un gran oso para escribir. Creo que me tomaría de 2 a 3 días encontrar algo terriblemente ineficiente. – Omnifarious