Wie kann ich mit scipy.ndimage.interpolation.affine_transform um ein Bild zu drehen, über seine Mitte?

Ich bin verwirrt durch die API zu scipy.ndimage.interpolation.affine_transform. Und die Beurteilung durch dieses Problem ich bin nicht der einzige. Ich bin eigentlich zu wollen, mehr tun, interessante Dinge mit affine_transform als nur das Bild drehen, aber eine Drehung machen würde für den Anfang. (Und ja, ich bin mir wohl bewusst,scipy.ndimage.interpolation.drehen, aber herauszufinden, wie zu fahren affine_transform ist das, was mich hier interessiert).

Wenn ich will, das zu tun diese Art der Sache, die in Systemen wie OpenGL, ich bin der Meinung in Bezug auf die Berechnung der Transformation, die für eine 2x2-drehmatrix R über ein Zentrum c, und deshalb denken Punkte p transformiert (p-c)R+c = pR+c-cR gibt, die eine c-cR Begriff verwendet werden, da die übersetzung Bestandteil einer Transformation. Jedoch, nach der Ausgabe oben, scipy ist affine_transform bedeutet "offset ersten" also, wir müssen eigentlich zum berechnen eines offset - s so dass (p-c)R+c=(p+s)R die mit ein bisschen umbauen gibt s=(c-cR)R' wo R' ist die inverse von R.

Wenn ich stecken Sie diesen in einem ipython notebook (pylab-Modus; code unten vielleicht braucht einige zusätzliche Importe):

img=scipy.misc.lena()
#imshow(img,cmap=cm.gray);show()
centre=0.5*array(img.shape)
a=15.0*pi/180.0
rot=array([[cos(a),sin(a)],[-sin(a),cos(a)]])
offset=(centre-centre.dot(rot)).dot(linalg.inv(rot))
rotimg=scipy.ndimage.interpolation.affine_transform(
    img,rot,order=2,offset=offset,cval=0.0,output=float32
)
imshow(rotimg,cmap=cm.gray);show()

Bekomme ich

Wie kann ich mit scipy.ndimage.interpolation.affine_transform um ein Bild zu drehen, über seine Mitte?

welche leider nicht gedreht, der über das Zentrum.

Also, was ist der trick, ich bin hier noch fehlt?

  • Gerade dabei einige quick & dirty Tests habe ich bemerkt, dass unter den negativen Wert der Versatz scheint sich zu drehen über das Zentrum.
  • Aha! Ja, sehr gut, bestätigt sich hier. Es scheint, mein Modell von scipy system sollte (p-s)R. Stellen, dass als Antwort und ich würde es akzeptieren.
InformationsquelleAutor timday | 2013-11-23
Schreibe einen Kommentar