Des polaires à la grille cartésienne
J'ai une polaire (r,theta) de la grille (ce qui signifie que chaque cellule est un anneau de section) contenant des valeurs d'une grandeur physique (par exemple, la température), et je tiens à re-grille (ou re-projet, ou rééchantillonner) ces valeurs sur une grille cartésienne. Existe-il des paquets Python qui peut faire cela?
Je ne suis pas intéressé à convertir les coordonnées des centres des cellules polaires cartésiennes - c'est très facile. Au lieu de cela, je suis à la recherche d'un package qui peut se ré-grille, les données correctement.
Merci pour toutes les suggestions!
- Ce n'est pas un problème facile, et il serait à la fois intéressant et d'un énorme ours à écrire. Je pense qu'il me faudrait 2 ou 3 jours à venir avec quelque chose de terriblement inefficace.
Vous devez vous connecter pour publier un commentaire.
Merci pour vos réponses - après avoir réfléchi un peu plus à propos de ce que je suis venu avec le code suivant:
Qui n'est pas strictement re-maillage, mais fonctionne très bien pour ce dont j'ai besoin. Simplement poster le code au cas où il est utile à quelqu'un d'autre. N'hésitez pas à suggérer des améliorations!
Vous pouvez le faire de manière plus compacte avec
scipy.ndimage.geometric_transform
. Voici un exemple de code:Vous pouvez modifier
order=0
comme vous le souhaitez pour une meilleure interpolation. Le tableau de sortietemperature_cartesian
est 2r par 2r ici, mais vous pouvez spécifier la taille et l'origine vous le souhaitez.Je suis venu sur ce post il y a quelques temps lorsque vous essayez de faire quelque chose de similaire, c'est, des polaires, des données dans une grille cartésienne et vice-versa. La solution proposée ici fonctionne très bien. Cependant, il faut un certain temps pour effectuer la transformation des coordonnées. Je voulais juste partager une autre approche qui permet de réduire le temps de traitement jusqu'à 50 fois ou plus.
L'algorithme utilise la
scipy.ndimage.interpolation.map_coordinates
fonction.Voyons un petit exemple:
J'espère que cela aide quelqu'un dans la même situation que moi.
Oui! Il y a maintenant au moins un paquet Python qui a une fonction de re-mapper une matrice de cartésiennes en coordonnées polaires:
abel.outils.polaires.reproject_image_into_polar()
, qui fait partie de la PyAbel paquet.(Iñigo Hernáez Corres est correct,
scipy.ndimage.interpolation.map_coordinates
est le moyen le plus rapide que nous avons trouvé jusqu'à présent pour reprojeter de cartésiennes en coordonnées polaires.)PyAbel peut être installé à partir PyPi en entrant la commande suivante sur la ligne de commande:
Puis, en python, vous pouvez utiliser le code suivant pour re-projeter une image en coordonnées polaires:
[Selon l'application, vous pouvez envisager de passer le
jacobian=True
argument, qui re-échelles de l'intensité de la matrice de prendre en compte l'allongement de la grille (en changeant "bin tailles"), qui a lieu lorsque vous transformer à partir d'Cartésiennes aux coordonnées polaires.]Voici un exemple complet:
Remarque: il y a un bon sujet de discussion (à propos de re-mappage des images en couleur en coordonnées polaires) sur DONC: informations sur l'image le long d'un système de coordonnées polaires
TypeError: 'numpy.float64' object cannot be interpreted as an integer
sur python3.4. Si vous êtes le responsable du code, vous devez vérifier que les.OpenCV 3.4 pouvez le faire maintenant assez facilement avec warpPolar()
Très simple appel: