Cast ImageDataGenerator数据输出

2024-09-28 20:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个图像分割的网络。我有我的ImageDataGenerator用于我的掩码(这是只有0和255作为值的RGB图像,黑色和白色),它是:

train_mask_data_gen = ImageDataGenerator(rotation_range=10,
                                         width_shift_range=10,
                                         height_shift_range=10,
                                         zoom_range=0.3,
                                         horizontal_flip=True,
                                         vertical_flip=True,
                                         fill_mode='nearest',#interpolation used for augmenting the image
                                         cval=0,
                                         rescale=1./255)

并从目录中流出:

train_mask_gen = train_mask_data_gen.flow_from_directory(os.path.join(training_dir, 'masks'),
                                                     target_size=(img_h, img_w),
                                                     batch_size=bs,
                                                     class_mode=None, # Because we have no class subfolders in this case
                                                     shuffle=True,
                                                     interpolation='nearest',#interpolation used for resizing
                                                     #color_mode='grayscale',
                                                     seed=SEED)

代码运行得很好,唯一的问题是,当我对掩码应用数据增强时,我将不再有二进制图像,但我得到一些介于0和1之间的值(标准化)。例如,如果我打印输出矩阵(图像),我会得到如下结果:

 [[0.         0.         0.        ]


[0.         0.         0.        ]
   [0.         0.         0.        ]
   ...
   [1.         1.         1.        ]
   [1.         1.         1.        ]
   [1.         1.         1.        ]]

  ...

  [[0.         0.         0.        ]
   [0.3457849  0.3457849  0.3457849 ]
   [1.         1.         1.        ]
   ...
   [0.         0.         0.        ]
   [0.         0.         0.        ]
   [0.         0.         0.        ]]

它还包含那些由于增强而产生的“额外”值。如果我不应用任何增强,我会得到我想要的二值图像

如何将强制转换嵌入整数(以获得仅为0或1的值) 我试图使用ImageDataGenerator中的dtype=int字段,但它没有起任何作用,我一直得到相同的结果


Tags: 图像truedatashiftmoderangetrainmask
1条回答
网友
1楼 · 发布于 2024-09-28 20:59:06

Keras文档确实建议设置Dtype是正确的做法,因此它可能是一个bug。。。你可以做的一件事是自己包裹Keras发生器并正确地投下它:

# quick stand in for a Keras image generator...
def img_gen():
    for i in range(3):
        yield np.random.rand(1, 2, 3) + 0.5


def int_gen(gen):
    for i in gen:
        yield i.astype(np.uint8)


for i in img_gen():
    print(i)


for i in int_gen(img_gen()):
    print(i)

输出:

...
[[[0.53385283 1.47129752 0.98338025]
  [0.56875012 1.19955292 0.90370756]]]
[[[1.03524687 0.66555768 1.08211682]
  [1.23256381 0.84470396 0.53269755]]]
[[[0.76095154 1.15223349 0.86353093]
  [0.63276903 0.74591046 0.50097586]]]


[[[1 1 0]
  [0 0 1]]]
[[[1 1 0]
  [1 1 1]]]
[[[1 1 0]
  [1 1 0]]]

相关问题 更多 >