Ani*_*tta 1 python arrays numpy image 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) 的平均像素值,并将它们放入新图片。
然而事实证明,这整个过程是一个昂贵的过程,考虑到我的数组的大小,它需要很多时间。有没有更快的方法来做到这一点? 我正在使用以下代码扩展原始图像
#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
Run Code Online (Sandbox Code Playgroud)
使用类似的方法将旋转后的图像缩小到原始大小。
在 numpy 中,您可以使用repeat:
large_img = original_img.repeat(2, axis=1).repeat(2, axis=0)
Run Code Online (Sandbox Code Playgroud)
和
final_img = 0.25 * rotated_img.reshape(5000,2,5000,2).sum(axis=(3,1))
Run Code Online (Sandbox Code Playgroud)
或使用scipy.ndimage.zoom. 这可以为您提供比 numpy 方法更平滑的结果。
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |