Comment puis-je faire pivoter une image sur un pixel spécifique en Python? J'essaie de faire défiler une série d'images du ciel nocturne. Puisque les étoiles tournent autour de Polaris, je pourrais définir Polaris comme le centre de rotation et tourner chaque image pour aligner les étoiles.Faire pivoter une image sur un pixel spécifique en python
Répondre
Dans la réponse de phadej la transformation entre l'ancienne et la nouvelle coordonnées d'un point sur l'image est affine transformation. (Python Imaging Library) a une méthode d'image appelée transform
qui peut effectuer une transformation affine d'une image.
La documentation pour transform
se trouve près du bas de cette page.
Avec un peu de mathématiques: si chaque position de pixel de l'image est un vecteur a
, et la position de Polaris est p
, puis nouvelle position new_p
est
new_p = a + R * (a-p)
où R est Rotation matrix.
Il y aura un problème car new_p
n'est probablement pas un vecteur de position à valeur entière. Vous pouvez le faire à l'envers. Pour chaque pixel de l'image pivotée appliquer l'inverse de la transformation ci-dessus, que vous obtiendrez des pixels de l'image originale. Comme il pourrait ne pas être aussi entier, échantillonnez les pixels voisins comme dans wu-pixels (la quantité de points répartis peut être utilisée comme poids d'échantillonnage).
Je suis sûr qu'il y a de la librairie pour le faire pour vous, mais c'est un bel exercice de programmation. Par exemple 'imagemagick' a ce type de" distorsion "intégré: http://www.imagemagick.org/script/command-line-options.php?ImageMagick=gcvcqder3prdmhc6d8m6gk38v4#distort – phadej
Une fois que vous avez déterminé comment faire pivoter une image sur un pixel spécifique, comment définir par programme l'emplacement de Polaris? –
Polaris ne bouge pas (ou bouge très peu), et est donc toujours sur le même pixel. Je peux donc simplement définir son emplacement en coordonnées de pixels. – ogsrotag2423