将灰度图像内容复制到 3 个通道

Per*_*azi 3 python deep-learning keras tensorflow

我正在使用ImageDataGenerator. 我需要将每个灰度图像的内容复制到 3 个通道中。我尝试了以下代码,但似乎不起作用:

def grayscale_to_rgb(images, channel_axis=-1):
images= K.expand_dims(images, axis=channel_axis)
tiling = [1] * 4    # 4 dimensions: B, H, W, C
tiling[channel_axis] *= 3
images= K.tile(images, tiling)
return images




train_images_orign= grayscale_to_rgb(train_images_orign)
valid_images_orign= grayscale_to_rgb(valid_images_orign)
test_images_orign= grayscale_to_rgb(test_images_orign)

x_train, y_train = next(train_images_orign)
x_valid, y_valid = next(valid_images_orign)
x_test, y_test = next(test_images_orign)
Run Code Online (Sandbox Code Playgroud)

我应该朝哪个方向来实现这一目标?

tod*_*day 6

更新:事实证明,load_imgKeras中的函数已经以这样的方式实现,如果正在加载的图像的颜色模式和给定的color_mode参数(默认为'RGB')不同,则图像将被转换为 given color_mode。因此,在这种情况下,灰度图像将自动转换为 RGB。


您也可以使用 的preprocessing_function参数ImageDataGenerator(假设您使用的是color_mode='grayscale',否则上面的注释适用):

import numpy as np

def gray_to_rgb(img):
    return np.repeat(img, 3, 2)

generator = ImageDataGenerator(..., preprocessing_function=gray_to_rgb)
train_gen = generator.flow_from_directory(color_mode='grayscale', ...)
Run Code Online (Sandbox Code Playgroud)

请注意,此功能在任何图像增强后应用:

preprocessing_function:将隐含在每个输入上的函数。该函数将在图像调整大小和增强后运行。该函数应采用一个参数:一张图像(等级为 3 的 Numpy 张量),并应输出具有相同形状的 Numpy 张量。

  • 我打印了形状,它是 (227,227,3)。原因是默认情况下,ImageDataGenerator 将灰度转换为 RGB。所以,实际上我无事可做。 (2认同)