首页 > 解决方案 > 有没有办法在不改变图像的情况下将灰度图像转换为 RGB 图像?

问题描述

我正在尝试使用 EMNIST 数据训练 resnet50 模型,该数据集是一个包含 300k 字母和数字图像的数据集。Resnet50 需要 3 维图像作为其输入而不是灰度图像,因此我尝试将所有灰度图像转换为 RGB,但它也没有像我想要的那样工作。当我使用 pyplot.imshow 查看它们时,RGB 图像与灰度图像确实不同,因为这些命令实际上只是在 3 维中复制粘贴相同的灰度矩阵。

我尝试过的 3 个命令如下:

> resizedImageRGB = cv2.cvtColor(resizedImage,cv2.COLOR_GRAY2RGB)
> resizedImageRGB = np.repeat(resizedImage[:,:,np.newaxis],3,-1) arr =
> np.expand_dims(resizedImage, axis=2) resizedImageRGB =
> np.concatenate((arr,arr,arr), axis=2)

分别给出其中一个字母的灰度图和RGB图:

灰度图像

RGB 图像

标签: pythonkerasdeep-learningconv-neural-networkresnet

解决方案


从灰度到 RGB 近似值在数学上很难。考虑从 RGB 到灰度值 Y 的(其中一个)公式:

Y = 0.299R + 0.587G + 0.114B

现在您可以想象,朝另一个方向前进,并尝试从 Y 中导出 R、G 和 B 值,嗯.. 需要太多信息(1 eq. 3 未知)。人们实际上将神经网络用于这些东西..

相反,对你来说正确的方法是反其道而行之。也就是说,如果您只能访问灰度数据(或就此而言的 1 通道数据),您应该修改您的网络,使其接受正确的输入。

我不确定您从问题中使用了哪些库或确切的代码,但总的来说这应该不会太难。

通常,您在网上找到的代码具有为您创建这些网络的功能,并提供了正确的输入参数。

def ResNET(shape=(256,256,3), ...):
    some_code()

那么你通常可以只传递你自己的输入:

net = ResNET(shape=(256,256,1))

希望这可以帮助。


推荐阅读