首页 > 解决方案 > 如何将来自 CNN 预测的多张图像合并为一张图像?

问题描述

我在 Keras 中使用 CNN 构建模型,现在我想使用所有图像进行最终预测。这是我的输入和标签的尺寸:

X_pred, y_pred=next(pred_generator)
X_pred.shape, y_pred.shape

结果:

((132, 64, 64, 3), (132, 64, 64, 1))

这是预测的代码:

pred_64= model.predict(X_pred)
pred_64.shape

结果:

(132, 64, 64, 1)

很明显,有 132 个预测图像,大小为 64X64。我想合并每 4 个图像以创建大小为 128X128 的单个图像。最后,通过合并从 model.predict 生成的每 4 个图像,我应该有 33 个图像。

这是一个关于图像以 128X128 尺寸保存时的顺序的示例。

在此处输入图像描述

添加交换轴代码后,​​图像将旋转如下:

pred_128 = pred_64.reshape(66, 128, 64, 1).swapaxes(1, 2).reshape(33, 128, 128, 1)

在此处输入图像描述

我添加np.transpose如下。它有助于纠正旋转,但图像 2 替换了图像 3,反之亦然。你能帮我解决这个问题吗?

pred_128 = pred_64.reshape(66, 128, 64, 1).swapaxes(1, 2).reshape(33, 128, 128, 1)
pred_128= np.transpose(pred_128, [0, 2, 1, 3])

在此处输入图像描述

标签: arraysnumpymultidimensional-arraytranspose

解决方案


您可能会认为重塑可以解决问题,但排序有点棘手。小心swapaxes是可能的。以下行将解决问题:

pred_128 = pred_64.reshape(66, 128, 64, 1).swapaxes(1, 2).reshape(33, 128, 128, 1)

下面给出了一个示例来说明这一点。a在这里,我首先创建一个包含四个不同对角矩阵的数组。然后我以您希望看到打印结果的方式将它们放在一起。

import numpy as np

a = np.zeros((4, 2, 2, 1))
for i in range(0, 4):
    a[i, :, :, 0] = np.eye(2) * (i+1)

b = a.reshape(2, 4, 2, 1).swapaxes(1, 2).reshape(1, 4, 4, 1)
print(b[0, :, :, 0])

结果:

[[1. 0. 2. 0.]
 [0. 1. 0. 2.]
 [3. 0. 4. 0.]
 [0. 3. 0. 4.]]

推荐阅读