如何重现按不同维度合并多个图像
How to reproduce merging multiple images by different dimensions
我之前问过一个将每 4 张大小为 64x64 的图像合并为 128x128 的问题,我将答案编辑如下:
# Initializing counters
i = 0 # Old image number
j = 0 # New image number
# Pre-allocate new images array
pred_128 = np.zeros((32, 128, 128, 1))
# Loop over new images
while j < 32:
pred_128 [j, :64, :64, 0] = pred_64[0+i, :, :, 0] # Upper left
pred_128 [j, 64:, :64, 0] = pred_64[2+i, :, :, 0] # Lower left
pred_128 [j, :64, 64:, 0] = pred_64[1+i, :, :, 0] # Upper right
pred_128 [j, 64:, 64:, 0] = pred_64[3+i, :, :, 0] # Lower right
# Add to counters
i += 4
j += 1
我现在想重新使用此代码从不同的图像大小生成 (32, 128, 128, 1)
并且:
1- (512, 32, 32, 1)
2- (2048, 16, 16, 1)
对于第一种情况(512, 32, 32, 1)
,我使用了下面的代码,它returns错误:
# Initializing counters
i = 0 # Old image number
j = 0 # New image number
# Pre-allocate new images array
pred_128 = np.zeros((32, 128, 128, 1))
# Loop over new images
while j < 32:
pred_128 [j, :32, :32, 0] = pred_32[0+i, :, :, 0] # Upper left
pred_128 [j, 32:, :32, 0] = pred_32[2+i, :, :, 0] # Lower left
pred_128 [j, :32, 32:, 0] = pred_32[1+i, :, :, 0] # Upper right
pred_128 [j, 32:, 32:, 0] = pred_32[3+i, :, :, 0] # Lower right
# Add to counters
i += 8
j += 1
ValueError Traceback (most recent call last)
<ipython-input-48-b4a45801c652> in <module>()
9 while j < 32:
10 pred_128 [j, :32, :32, 0] = pred_32[0+i, :, :, 0] # Upper left
---> 11 pred_128 [j, 32:, :32, 0] = pred_32[2+i, :, :, 0] # Lower left
12 pred_128 [j, :32, 32:, 0] = pred_32[1+i, :, :, 0] # Upper right
13 pred_128 [j, 32:, 32:, 0] = pred_32[3+i, :, :, 0] # Lower right
ValueError: could not broadcast input array from shape (32,32) into shape (96,32)
任何人都可以帮助复制代码并解决两种不同情况下的问题:
1- (512, 32, 32, 1) #merging every 16 images
2- (2048, 16, 16, 1) #merging every 64 images
使用建议的代码后出现错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-79-b71bf1e0ef80> in <module>()
12 # Loop over new images
13 for i in range(0, out_shape[0]):
---> 14 for x in range(0, out_shape[1]/dx):
15 for y in range(0, out_shape[2]/dy):
16 pred_128[i, 0+dx*x:dx*(x+1), 0+dy*y:dy*(y+1), 0] = pred_32[input_im_no, :, :, 0]
TypeError: 'float' object cannot be interpreted as an integer
-原始数据中每16张32x32图像的顺序
您需要添加更多图块才能获得完整图像。对于 pred_32
情况,您将需要 16 个输入图像来生成 1 个输出图像,而对于 pred_16
情况,您需要 64 个输入图像来生成 1 个输出图像。在这种情况下,编写一个 'shifts' 遍历所需输出图像并一次输入一个图像的循环可能更容易。假设您的图像从左到右填充更大的图像,我认为以下代码可能会帮助您:
# Pre-allocate new images array
out_shape = (32, 128, 128, 1))
pred_128 = np.zeros(out_shape)
# Input sizes
dx = 32 # 16 for the pred_16
dy = 32 # 16 for the pred_16
# Input images counter
input_im_no = 0
# Loop over new images
for i in range(0, out_shape[0]):
for y in range(0, int(out_shape[1]/dy)):
for x in range(0, int(out_shape[2]/dx)):
pred_128[i, 0+dx*x:dx*(x+1), 0+dy*y:dy*(y+1), 0] = pred_32[input_im_no, :, :, 0]
# Select next image
input_im_no += 1
编辑:问题更新后的 x 和 y 顺序。
我之前问过一个将每 4 张大小为 64x64 的图像合并为 128x128 的问题,我将答案编辑如下:
# Initializing counters
i = 0 # Old image number
j = 0 # New image number
# Pre-allocate new images array
pred_128 = np.zeros((32, 128, 128, 1))
# Loop over new images
while j < 32:
pred_128 [j, :64, :64, 0] = pred_64[0+i, :, :, 0] # Upper left
pred_128 [j, 64:, :64, 0] = pred_64[2+i, :, :, 0] # Lower left
pred_128 [j, :64, 64:, 0] = pred_64[1+i, :, :, 0] # Upper right
pred_128 [j, 64:, 64:, 0] = pred_64[3+i, :, :, 0] # Lower right
# Add to counters
i += 4
j += 1
我现在想重新使用此代码从不同的图像大小生成 (32, 128, 128, 1)
并且:
1- (512, 32, 32, 1)
2- (2048, 16, 16, 1)
对于第一种情况(512, 32, 32, 1)
,我使用了下面的代码,它returns错误:
# Initializing counters
i = 0 # Old image number
j = 0 # New image number
# Pre-allocate new images array
pred_128 = np.zeros((32, 128, 128, 1))
# Loop over new images
while j < 32:
pred_128 [j, :32, :32, 0] = pred_32[0+i, :, :, 0] # Upper left
pred_128 [j, 32:, :32, 0] = pred_32[2+i, :, :, 0] # Lower left
pred_128 [j, :32, 32:, 0] = pred_32[1+i, :, :, 0] # Upper right
pred_128 [j, 32:, 32:, 0] = pred_32[3+i, :, :, 0] # Lower right
# Add to counters
i += 8
j += 1
ValueError Traceback (most recent call last)
<ipython-input-48-b4a45801c652> in <module>()
9 while j < 32:
10 pred_128 [j, :32, :32, 0] = pred_32[0+i, :, :, 0] # Upper left
---> 11 pred_128 [j, 32:, :32, 0] = pred_32[2+i, :, :, 0] # Lower left
12 pred_128 [j, :32, 32:, 0] = pred_32[1+i, :, :, 0] # Upper right
13 pred_128 [j, 32:, 32:, 0] = pred_32[3+i, :, :, 0] # Lower right
ValueError: could not broadcast input array from shape (32,32) into shape (96,32)
任何人都可以帮助复制代码并解决两种不同情况下的问题:
1- (512, 32, 32, 1) #merging every 16 images
2- (2048, 16, 16, 1) #merging every 64 images
使用建议的代码后出现错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-79-b71bf1e0ef80> in <module>()
12 # Loop over new images
13 for i in range(0, out_shape[0]):
---> 14 for x in range(0, out_shape[1]/dx):
15 for y in range(0, out_shape[2]/dy):
16 pred_128[i, 0+dx*x:dx*(x+1), 0+dy*y:dy*(y+1), 0] = pred_32[input_im_no, :, :, 0]
TypeError: 'float' object cannot be interpreted as an integer
-原始数据中每16张32x32图像的顺序
您需要添加更多图块才能获得完整图像。对于 pred_32
情况,您将需要 16 个输入图像来生成 1 个输出图像,而对于 pred_16
情况,您需要 64 个输入图像来生成 1 个输出图像。在这种情况下,编写一个 'shifts' 遍历所需输出图像并一次输入一个图像的循环可能更容易。假设您的图像从左到右填充更大的图像,我认为以下代码可能会帮助您:
# Pre-allocate new images array
out_shape = (32, 128, 128, 1))
pred_128 = np.zeros(out_shape)
# Input sizes
dx = 32 # 16 for the pred_16
dy = 32 # 16 for the pred_16
# Input images counter
input_im_no = 0
# Loop over new images
for i in range(0, out_shape[0]):
for y in range(0, int(out_shape[1]/dy)):
for x in range(0, int(out_shape[2]/dx)):
pred_128[i, 0+dx*x:dx*(x+1), 0+dy*y:dy*(y+1), 0] = pred_32[input_im_no, :, :, 0]
# Select next image
input_im_no += 1
编辑:问题更新后的 x 和 y 顺序。