首页 > 解决方案 > 将灰度图像内容复制到 3 个通道

问题描述

我正在使用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)

我应该朝哪个方向努力?

标签: pythontensorflowkerasdeep-learning

解决方案


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


您也可以使用preprocessing_functionof 的参数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', ...)

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

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


推荐阅读