旋转numpy二维数组
image-processing
numpy
python
6
0

我有一组作为2D numpy数组的灰度图像。

我需要围绕不同的浮动角度的一个点(在它们内部)旋转图像。旋转不需要就位,并且我将允许(当然,如果到目前为止我做得很好)插值。

我想保留在numpy中,因为我需要对结果执行数字运算,但是我也可以(如果不可能的话)允许进/出;例如,我尝试使用PIL,即Image.rotate(theta),但不了解如何将其应用于我的数组,以及如何取回数组。

谢谢您的意见。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我想在上述帮助下并通过示例解决此问题:

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
收藏
评论

请参阅cgohlke '11 Nov 10在18:34的评论:

考虑scipy.ndimage.interpolation .shift()和rotate()进行二维numpy数组的内插平移和旋转。

收藏
评论

基本操作在Wikipedia 转换矩阵页面中进行了描述-我在这里不打算尝试ascii矩阵,但是输出P'= R * P,其中P'是输出点,R是2x2转换矩阵,包含旋转角的正弦和余弦,P是输入点。如果要绕原点以外的位置旋转,请在旋转之前移动原点:P'= T + R *(PT)其中T是平移坐标。基本矩阵运算不进行插值,因此,如果您不使用基于numpy的图像处理库 ,则需要进行反向转换:对于每个(整数值)输出坐标,找到(浮点) )旋转到该点的坐标,并从周围的像素内插该输入点的值。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号