Tensorflow CIELAB颜色空间边界

3

我有以下脚本,它将一个RGB图像转换为Lab色彩空间:

import tensorflow as tf
import tensorflow_io as tfio

img = tf.io.read_file(tf.keras.utils.get_file("tf", "https://upload.wikimedia.org/wikipedia/commons/e/e5/TensorFlow_Logo_with_text.png"))
img = tf.image.decode_png(img, channels=3)
img = tf.image.resize(img, [512, 512])
lab = tfio.experimental.color.rgb_to_lab(img)

lab = lab.numpy()
lab.shape  # (512, 512, 3)

lab[:, :, 0].min()  # 3660.3594
lab[:, :, 0].max()  # 9341.573

lab[:, :, 1].min()  # -49.76082
lab[:, :, 1].max()  # 4273.1514

lab[:, :, 2].min()  # -1256.8489
lab[:, :, 2].max()  # 6293.9043

维基百科CIELAB色彩空间:

LAB空间是三维的,覆盖了人类感知到的全部颜色范围。它基于人眼视觉的对立色模型,其中红/绿形成一对对立色,蓝/黄形成另一对对立色。亮度值L*,也称为“L星”,将黑色定义为0,将白色定义为100。a*轴相对于绿-红对立色而言,负值朝向绿色,正值朝向红色。b*轴代表蓝-黄对立色,负数表示朝向蓝色,正数表示朝向黄色。

a*和b*轴是无界的,根据参考白点不同,它们可以轻易地超过±150,以涵盖人类感知到的全部颜色。然而,出于实际原因,软件实现通常会夹紧这些值。例如,如果正在使用整数运算,则常见方法是将a*和b*夹紧在-128至127的范围内。

为什么"0 <= lab[:, :, 0].min() <= lab[:, :, 0].max() <= 100"不正确?

1个回答

5

tfio.experimental.color.rgb_to_lab函数期望其输入为0到1之间的浮点数。

如果您的输入是整数且目标输出是浮点数,可以调用tf.image.convert_image_dtype来进行归一化处理(该函数将自动将其标准化为0到1之间)。

import tensorflow as tf
import tensorflow_io as tfio

img = tf.io.read_file(tf.keras.utils.get_file("tf", "https://upload.wikimedia.org/wikipedia/commons/e/e5/TensorFlow_Logo_with_text.png"))
img = tf.image.decode_png(img, channels=3)
img = tf.image.convert_image_dtype(img, dtype=tf.float32)
img = tf.image.resize(img, [512, 512])
lab = tfio.experimental.color.rgb_to_lab(img)

lab = lab.numpy()

检查 L 维度:

>>> lab[:,:,0].min()
33.678085
>>> lab[:,:,0].max()
100.0

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