问题描述
我有一个图像,即像素值的数组,可以说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
旋转后,可以使用类似的方法将图像缩小到原始尺寸。
1楼
在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方法相比,这可以为您提供更平滑的结果。
2楼
有一个不错的库,它可能具有处理图像所需的所有功能,包括旋转: