首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow CIELAB颜色空间界

Tensorflow CIELAB颜色空间界
EN

Stack Overflow用户
提问于 2021-01-20 12:05:48
回答 1查看 622关注 0票数 3

我有以下脚本,它在RGB中获取图像并将其转换为Lab颜色空间:

代码语言:javascript
复制
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

Wiki CIELAB颜色空间

实验室空间是三维的,涵盖了整个人类的色觉,或色域.它基于人类视觉中的对手颜色模型,其中红色/绿色形成对手对,蓝色/黄色形成对手对。亮度值L*,也称为"Lstar“,定义黑色为0,白色定义为100。a*轴相对于绿红对手的颜色,负值为绿色,正值为红色。b*轴代表蓝色-黄色的对手,负数向蓝色,正向黄色。 a*和b*轴是无界的,根据参考白度,它们很容易超过±150来覆盖人类的色域。然而,软件实现常常出于实际原因而限制这些值。例如,如果使用整数数学,则通常将a*和b*夹在-128到127之间。

为什么0 <= lab[:, :, 0].min() <= lab[:, :, 0].max() <= 100不是真的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 13:39:44

函数tfio.experimental.color.rgb_to_lab期望它的输入是在0到1之间规范化的浮点。

您可以调用tf.image.convert_image_dtype对图像进行规范化(如果输入是整数,目标输出是浮点数,则函数将在0到1之间自动将其规范化)。

代码语言:javascript
复制
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维度:

代码语言:javascript
复制
>>> lab[:,:,0].min()
33.678085
>>> lab[:,:,0].max()
100.0
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65809222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档