2017-09-08 4 views
1

Je cherche une transformation rotative en python, qui peut être inversée pour donner l'image originale. Jusqu'à présent, je me sersRotation inversible d'une image

import skimage.transform as tf 
import scipy 
im = scipy.misc.ascent() 

Original, unrotated image

r1 = tf.rotate(im, 10, mode='wrap') 

Image rotated 10 degrees

r2 = tf.rotate(r1, -10, mode='wrap') 

Rotated Image inversely rotated

Si je fais la même chose en utilisant reflect le résultat ressemble

Result using 'reflect'

Y at-il une possibilité de faire tourner simplement une image par angle et faites pivoter le résultat par retour -angle et se retrouver avec l'image originale?

Répondre

1

Une solution potentielle à votre problème serait d'utiliser rotate avec l'argument optionnel resize réglé sur True, puis de rogner le résultat final.

import skimage.transform as tf 
import scipy 
import matplotlib.pyplot as plt 

im = scipy.misc.ascent() 

r1 = tf.rotate(im, 10, mode='wrap', resize=True) 
plt.imshow(r1) 

r2 = tf.rotate(r1, -10, mode='wrap', resize=True) 
plt.imshow(r2) 

# Get final image by cropping 
imf = r2[int(np.floor((r2.shape[0] - im.shape[0])/2)):int(np.floor((r2.shape[0] + im.shape[0])/2)),int(np.floor((r2.shape[1] - im.shape[1])/2)):int(np.floor((r2.shape[1] + im.shape[1])/2))] 

plt.imshow(imf) 

Il y aura des différences mineures entre l'original et l'image deux fois mis en rotation en raison des opérations à l'intérieur de la fonction de rotation, mais à l'œil, il semble le même.

+0

C'est exactement ce que je cherchais. Je vous remercie. Bien sûr, l'image sera un peu différente en raison de l'interpolation, mais c'est comme ça. – Dschoni