我很困惑的API到scipy.ndimage.interpolation.affine_transform
。並且由this issue來判斷,我不是唯一的一個。我實際上想要用affine_transform
來做更有趣的事情,而不僅僅是旋轉一張圖片,但是一個輪換對於初學者來說可以做。 (是的,我很清楚scipy.ndimage.interpolation.rotate
,但搞清楚如何駕駛affine_transform
是我感興趣的地方)。如何使用scipy.ndimage.interpolation.affine_transform旋轉關於其中心的圖像?
當我想要做這樣的事情,比如OpenGL系統,我覺得在被改造(p-c)R+c
計算變換施加一個2x2的旋轉矩陣R
圍繞中心c
,因此想點p
的方面= pR+c-cR
,它給出了c-cR
術語用作變換的轉換組件。 然而,根據上述問題,SciPy的的affine_transform
做「偏移第一」所以我們實際上需要計算的偏移s
,從而(p-c)R+c=(p+s)R
與一個位變換給人s=(c-cR)R'
其中R'
是R
倒數。
如果我插入到這一個IPython的筆記本(pylab模式;下面的代碼也許需要一些額外的進口):
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()
我得到
不幸的是不旋轉約中心。
那麼我在這裏失蹤的訣竅是什麼?
只是做一些簡單的&骯髒的測試我注意到,採取消極的抵消價值似乎圍繞中心旋轉。 – treddy
啊哈!是的,很好,在這裏證實。看來我的scipy系統模型應該是'(p-s)R'。把這作爲答案,我會接受它。 – timday