【发布时间】:2013-12-08 07:06:40
【问题描述】:
我对@987654321@ 的 API 感到困惑。从this issue来看,我不是唯一一个。我实际上想用affine_transform 做更多有趣的事情,而不仅仅是旋转图像,但对于初学者来说,旋转就可以了。 (是的,我很了解scipy.ndimage.interpolation.rotate,但我对如何驾驶affine_transform 很感兴趣)。
当我想在像 OpenGL 这样的系统中做这种事情时,我会考虑计算应用 2x2 旋转矩阵 R 关于中心 c 的变换,因此考虑点 @987654331 @ 被转换 (p-c)R+c = 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()
我明白了
不幸的是,它没有围绕中心旋转。
那么我在这里缺少什么技巧?
【问题讨论】:
-
只是做一些快速而肮脏的测试,我注意到你的偏移量的负值似乎围绕中心旋转。
-
啊哈!是的,很好,在这里确认。看来我的 scipy 系统模型应该是
(p-s)R。把它作为一个答案,我会接受它。
标签: python numpy matplotlib rotation scipy