我有一组灰度图像作为2D numpy阵列。旋转numpy 2D阵列
我需要旋转关于不同的,浮动角度的一个点(内部)的图像。轮换不需要到位,我会允许(当然,如果我已经很好地解释了)进行插值。
我想留在numpy中,因为我需要对结果执行数字运算,但是我也可以(如果这是不可能的)允许步进/退出;例如我尝试使用PIL,即Image.rotate(theta),但不明白如何将它应用于我的数组,以及如何获取数组。
谢谢您的输入。
我有一组灰度图像作为2D numpy阵列。旋转numpy 2D阵列
我需要旋转关于不同的,浮动角度的一个点(内部)的图像。轮换不需要到位,我会允许(当然,如果我已经很好地解释了)进行插值。
我想留在numpy中,因为我需要对结果执行数字运算,但是我也可以(如果这是不可能的)允许步进/退出;例如我尝试使用PIL,即Image.rotate(theta),但不明白如何将它应用于我的数组,以及如何获取数组。
谢谢您的输入。
见cgohlke 11月10 '11注释在18点34分:
scipy.ndimage.interpolation考虑.shift()和旋转(),用于内插的翻译和2D numpy的阵列旋转。
基本操作在维基百科transformation matrix页面描述 - 我不打算在这里做ascii矩阵艺术,但输出P'= R * P其中P'是输出点,R是2×2包含旋转角度的正弦和余弦的变换矩阵,并且P是输入点。如果要旋转除原点以外的其他物体,请在旋转之前移动原点:P'= T + R *(P-T)其中T是平移坐标。基本矩阵运算不会执行插值,所以如果您没有使用基于numpy的image processing library,则需要进行反向转换:对于每个(整数值)输出坐标,找到(浮点)坐标将旋转到该点的点,并从周围像素内插该输入点的值。
这将是困难的方式......如果您没有检查cgohlke的解决方案,我会在120±13秒内实施它。 – astabada
我想采取的上述帮助和解决这个由一个例子:
import pandas as pd
import numpy as np
bd = np.matrix([[44., -1., 40., 42., 40., 39., 37., 36., -1.],
[42., -1., 43., 42., 39., 39., 41., 40., 36.],
[37., 37., 37., 35., 38., 37., 37., 33., 34.],
[35., 38., -1., 35., 37., 36., 36., 35., -1.],
[36., 35., 36., 35., 34., 33., 32., 29., 28.],
[38., 37., 35., -1., 30., -1., 29., 30., 32.]])
def rotate45(array):
rot = []
for i in range(len(array)):
rot.append([0] * (len(array)+len(array[0])-1))
for j in range(len(array[i])):
rot[i][int(i + j)] = array[i][j]
return rot
df_bd = pd.DataFrame(data=np.matrix(rotate45(bd.transpose().tolist())))
df_bd = df_bd.transpose()
print df_bd
的输出将是这样的:
44 0 0 0 0 0 0 0 0
42 -1 0 0 0 0 0 0 0
37 -1 40 0 0 0 0 0 0
35 37 43 42 0 0 0 0 0
36 38 37 42 40 0 0 0 0
38 35 -1 35 39 39 0 0 0
0 37 36 35 38 39 37 0 0
0 0 35 35 37 37 41 36 0
0 0 0 -1 34 36 37 40 -1
0 0 0 0 30 33 36 33 36
0 0 0 0 0 -1 32 35 34
0 0 0 0 0 0 29 29 -1
0 0 0 0 0 0 0 30 28
0 0 0 0 0 0 0 0 32
我改变了你的灰色日历'标签到'图像处理'之一。我认为它更好地描述了你的意图。随意将其更改回 – BlackBear
您可以直接在numpy中做到这一点,但是为了来回转换,请参阅http://effbot.org/zone/pil-numpy.htm。 –
谢谢你的建议,我只注意到这个盒子! – astabada