Python中的旋转图像

Python中的旋转图像,python,image,python-2.7,image-processing,Python,Image,Python 2.7,Image Processing,我对scipy的ndimage.rotate方法的实现提出了一个问题,特别是当按任意数量旋转数组时,它的实际工作方式,以及它是否保留数组中包含的数字 我试图找到一种方法来旋转一些数组,同时保留数组中的数字,并且不丢失任何信息 我试图通过初始化一些数组来测试它,其中包含一些已知的形状,但是我注意到如果你初始化一些特定的形状,例如十字架,那么当你旋转一定量时,十字架将变成正方形,我担心我在这里丢失了信息 matr_1= [[0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0,

我对scipy的ndimage.rotate方法的实现提出了一个问题,特别是当按任意数量旋转数组时,它的实际工作方式,以及它是否保留数组中包含的数字

我试图找到一种方法来旋转一些数组,同时保留数组中的数字,并且不丢失任何信息

我试图通过初始化一些数组来测试它,其中包含一些已知的形状,但是我注意到如果你初始化一些特定的形状,例如十字架,那么当你旋转一定量时,十字架将变成正方形,我担心我在这里丢失了信息

matr_1= [[0, 1, 0, 0, 0, 0],
    [1, 1, 1, 0, 0, 0],
    [0, 1, 0, 0, 0, 0],
    [0, 0, 0, 0, 1, 0],
    [0, 0, 0, 1, 1, 1],
    [0, 0, 0, 0, 1, 0]]

 matr_2= [[0, 0, 1, 0, 0, 0],
    [0, 1, 1, 1, 0, 0],
    [0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 1, 0],
    [0, 0, 0, 1, 1, 1],
    [0, 0, 0, 0, 1, 0]]

plt.imshow(matr_1)

plt.show()

print("Rotation by 45 degrees")

print(sp.ndimage.rotate(matr_1, 45, reshape=False)) 

plt.imshow(sp.ndimage.rotate(matr_1,45,reshape=False))

plt.show()

print("Rotation by 55 degrees")

print(sp.ndimage.rotate(matr_2, 90, reshape=False))

plt.imshow(sp.ndimage.rotate(matr_1,90,reshape=False))

我知道这可能是所有旋转算法固有的问题,但我想了解实际应用于阵列的操作。

在有疑问时阅读您正在使用的开源库的代码是一个很好的练习。 以下是链接:

您会注意到旋转是由旋转矩阵定义的,此处定义为:

    m11 = math.cos(angle)
    m12 = math.sin(angle)
    m21 = -math.sin(angle)
    m22 = math.cos(angle)
    matrix = numpy.array([[m11, m12],
                          [m21, m22]], dtype=numpy.float64)

在离散图像中,对于不是90倍的角度,损失是不可避免的。

可以旋转图像并使用最近邻插值。这意味着,该算法不必为新光栅(栅格)中的每个位置计算每个相邻像素的百分比,而是受限于从现有光栅中拾取最近的相邻像素

这意味着不会在图像中引入新的像素值(基本上是颜色或灰度)。也就是说,如果从黑色背景上的白色矩形开始,无论旋转多少度,都不会得到一个新的灰色像素来平滑锯齿状边缘-所有输出像素将继续为黑色或白色

我不确定确切的数学,但我不相信这意味着输入图像中黑白像素的确切数量将被保留,但这些值将被保留,因为不会引入新的、不同的值


我无法从你的问题的措辞判断这是否是你的选择。

将图像旋转90°以外的任何角度都会导致一些损失。