Python中的旋转图像
我对scipy的ndimage.rotate方法的实现提出了一个问题,特别是当按任意数量旋转数组时,它的实际工作方式,以及它是否保留数组中包含的数字 我试图找到一种方法来旋转一些数组,同时保留数组中的数字,并且不丢失任何信息 我试图通过初始化一些数组来测试它,其中包含一些已知的形状,但是我注意到如果你初始化一些特定的形状,例如十字架,那么当你旋转一定量时,十字架将变成正方形,我担心我在这里丢失了信息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,
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°以外的任何角度都会导致一些损失。