ImageDataGenerator(Keras)中的channel_shift_range和brightness_range有什么区别?

3

有多个页面(例如这个这个)展示了channel_shift_range对图像的影响。乍一看,似乎只是应用了亮度变化。

Example of channel_shift_range application.

这个问题有多个评论提到了这个观察结果。那么,如果channel_shift_rangebrightness_range实现相同的功能,为什么它们都存在呢?

2个回答

4
经过长时间的逆向工程,我发现以下内容:
- `channel_shift_range`:将操作`(R + i, G + i, B + i)`应用于图像中的所有像素。其中,`i`是范围在`[0, 255]`内的整数值。 - `brightness_range`:将操作`(R * f, G * f, B * f)`应用于图像中的所有像素。其中,`f`是约等于`1.0`的浮点值。
两个参数都与亮度有关,但我发现了一个非常有趣的差异:`channel_shift_range`应用的操作大致保留了图像的对比度,而`brightness_range`应用的操作大致将图像的对比度乘以`f`并且大致保留了其饱和度。需要注意的是,当`i`或`f`的值较大时,图像的亮度会变得很强,并且它将失去许多信息。

1

通道偏移和亮度变化是完全不同的。

通道偏移:通道偏移通过改变输入图像的[R,G,B]通道来改变像素的颜色饱和度水平(例如浅红/深红)。通道偏移用于在数据集中引入颜色增强,以使模型学习基于颜色的特征,而不考虑其饱和度值。 以下是从所提到的文章中的通道偏移示例: Fig. 1 在上面的图像中,如果您仔细观察,对象(特别是云区域)即使在通道偏移增强后仍然清晰可见,并且可以与其相邻区域区分开来。

亮度变化:图像的亮度级别解释了整个图像的光强度,并用于在数据集中添加欠曝光和过曝光增强。 以下是亮度增强的示例: enter image description here 在上面的图像中,低亮度值时,对象(例如云)由于光强度水平低而失去了其可见性。


抱歉,但这个答案部分是不正确的,因为通道移位并不能始终改变图像的饱和度。 - Tedpac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接