将 PNG 或 JPEG 图像转换为 GAN 算法接受的格式

Convert PNG or JPEG images to the format accepted by GAN algorithm

我是 GAN 领域的新手,我尝试了一些教程,但是,其中大部分使用的是 Cifar 或 mnist 数据集。因此,大多数都是以这样的格式构建的 (xxxx, 28, 28)。

最近想试试我们的另一张照片。例如,

from scipy import misc
data = misc.imread("1.PNG") #this can be any images from JPEG or any
print(data.shape)

我的输出:

(842, 1116, 4) # Seriously I dont understand what does this mean. 842 means 842 files? I thought I have only 1 image loaded.

我的预期输出:

因为我是新手,所以我真的很想问一下它应该是 (1, 28, 28) 还是其他什么?这样我就可以适应 GAN,因为它在教程中使用了 784

通常,在 mnist 的数据集中,我们有 (60000, 28, 28),这意味着 60k 张图片,每张图片的形状为 28x28。我上面的输出呢? (842, 1116, 4) 不是指形状为 1116 x 4 的 842 张图片吗?我只加载了一张图片。有人可以帮助我如何转换它并理解它。谢谢

图像 x、y (842x1116) 的像素大小和颜色通道数 - 4(R、G、B、Alpha)

imread 使用 PIL 或 Pillow 读取图片,它 returns 格式的图片: 高 x 宽 x 通道 其中通道通常是 3 个通道(普通彩色图像的红色、绿色、蓝色 [RGB])或有时是 4 个通道(红色、绿色、蓝色、alpha/transparency [RGBA])。

因此您读取了一个大小为 842x1116 像素且具有 4 个颜色通道的图像。你说你使用形状 (xxxx, 28, 28) 的训练数据,所以你使用灰度而不是彩色图像。第一步是将彩色图像转换为灰度图像。 Pillow(作为 PIL 的替代品)是一个很好的图像操作库。或者你可以只使用一个频道

gray_data = data[:,:,0]

要将其用作训练数据,您现在可以将其大小调整为 28x28 或从中提取大小为 28x28 的小块。

small_data = gray_data[:28,:28]

这将导致 (28,28)。大多数学习算法期望的不是一张而是几张图像,主要格式为 (#images, height, width)。所以你需要重塑它:

final_data = small_data.reshape(1,28,28)

应该可以了。然而,适当的 RGB(A) 到灰色转换和调整大小将是更好的解决方案。查看 Pillow 文档了解详情。