2010-08-25 19 views
2

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

+2

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? –

+1

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

Répondre

2

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.

0

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).

+0

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