Are there any Python packages that can do this?
Sì! C'è ora - almeno un - pacchetto Python che ha una funzione per ri-mappare una matrice da coordinate cartesiane a coordinate polari: abel.tools.polar.reproject_image_into_polar()
, che fa parte dello PyAbel package.
(Iñigo Hernáez Corres è corretta, scipy.ndimage.interpolation.map_coordinates
è il modo più veloce che abbiamo trovato finora riproiettare da cartesiane a coordinate polari.)
PyAbel può essere installato da PyPi inserendo la seguente nella riga di comando:
pip install pyabel
Poi, in python, è possibile utilizzare il seguente codice di ri-progetto di un'immagine in coordinate polari:
import abel
abel.tools.polar.reproject_image_into_polar(MyImage)
[A seconda dell'applicazione, si potrebbe considerare di passare l'argomento jacobian=True
, che ridimensiona le intensità della matrice per prendere in considerazione l'allungamento della griglia (cambiando "dimensioni bin") che si verifica quando si trasforma da cartesiano ai coodati polari.]
Ecco un esempio 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: c'è un'altra buona discussione (su immagini a colori ri-mappatura in coordinate polari) su SO: image information along a polar coordinate system
Questo non è un problema facile, e sarebbe sia interessante che un enorme orso da scrivere. Penso che ci vorrebbero 2-3 giorni per trovare qualcosa di orribilmente inefficiente. – Omnifarious