如何在python

时间:2017-02-10 01:59:38

标签: python arrays image numpy scipy

我有一个图像,即一个像素值数组,比方说5000x5000(这是典型的大小)。现在我想将它扩展2倍到10kx10k。 (0,0)像素值的值在扩展图像中变为(0,0),(0,1),(1,0),(1,1)。

之后我使用scipy.interpolate.rotate旋转展开的图像(我相信没有比给定数组大小更快的方法)

接下来,我必须再次将此10kx10k阵列调整为原始大小,即5kx5k。为此,我必须在扩展图像中取平均像素值(0,0),(0,1),(1,0),(1,1)并将它们放入(0,0)新形象。

然而事实证明,考虑到我的阵列的大小,整个过程是一个昂贵的过程需要花费很多时间。 有更快的方法吗? 我使用以下代码来扩展原始图像

#Assume the original image is already given
largeImg=np.zeros((10000,10000), dtype=np.float32)
for j in range(5000):
    for k in range(5000):
          pixel_value=original_img[j][k]
          for x in range((2*k), (2*(k+1))):
                for y in range((2*j), (2*(j+1))):
                    largeImg[y][x] = pixel_value

旋转后使用类似的方法将图像缩小为原始尺寸。

2 个答案:

答案 0 :(得分:4)

在numpy中你可以使用repeat

large_img = original_img.repeat(2, axis=1).repeat(2, axis=0)

final_img = 0.25 * rotated_img.reshape(5000,2,5000,2).sum(axis=(3,1))

或使用scipy.ndimage.zoom。这可以比numpy方法给你更平滑的结果。

答案 1 :(得分:0)

有一个很好的库,可能具有处理图像所需的所有功能,包括旋转:

http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.rotate