python - 有没有办法在不改变图像的情况下将灰度图像转换为 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 近似值在数学上很难。考虑从 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))
希望这可以帮助。