Mahotas - XYZ 到 LAB 的转换
我们在之前的教程中讨论了 XYZ 和 LAB 颜色空间。现在让我们讨论一下 XYZ 颜色空间到 LAB 颜色空间的转换。
要将 XYZ 转换为 LAB,我们需要使用特定公式进行一些计算。这些公式涉及根据参考白点调整 XYZ 值,该白点代表了查看颜色的标准。
然后使用数学方程将调整后的值转换为 LAB 分量。
简而言之,XYZ 到 LAB 的转换使我们能够以更符合我们眼睛感知颜色的方式表示颜色,从而更容易准确地分析和比较颜色。
Mahotas 中的 XYZ 到 LAB 转换
在 Mahotas 中,我们可以使用 colors.xyz2lab() 函数将 XYZ 图像转换为 LAB 图像。
Mahotas 中的 XYZ 到 LAB 转换涉及以下步骤 −
标准化 XYZ 值 − 首先,我们需要通过将 XYZ 值除以白点值来标准化它们。白点表示被认为是纯白色的参考颜色。
此标准化步骤可确保颜色值与白点相关。
计算 LAB 值 − 一旦 XYZ 值标准化,mahotas 就会使用特定的转换矩阵将它们转换为 LAB。此转换考虑到人类颜色感知中的非线性,并相应地调整颜色值。
获取 LAB 值 − 最后,mahotas 会提供您开始使用的颜色的 LAB 值。然后可以使用得到的 LAB 值来描述颜色的亮度和两个颜色轴。
L 分量 − LAB 中的 L 分量表示颜色的亮度, 范围从 0 到 100。值越高表示颜色越亮,值越低表示颜色越暗。
A 和 B 分量 − LAB 中的 A 和 B 分量表示颜色信息。A 分量的范围从绿色 (-) 到红色 (+),而 B 分量的范围从蓝色 (-) 到黄色 (+)。
这些组件提供有关 XYZ 值的颜色特征的信息。
使用 mahotas.colors.xyz2lab() 函数
mahotas.colors.xyz2lab() 函数将 XYZ 图像作为输入并返回图像的 LAB 版本。
生成的 LAB 图像保留了原始 XYZ 图像的结构和整体内容 但更新了每个像素的颜色。
语法
以下是 mahotas − 中 xyz2lab() 函数的基本语法
mahotas.colors.xyz2lab(xyz, dtype={float})
其中,
xyz − 它是 XYZ 颜色空间中的输入图像。
dtype(可选 − 它是返回图像的数据类型(默认为浮点型)。
示例
在下面的示例中,我们使用 mh.colors.xyz2lab() 函数将 XYZ 图像转换为 LAB 图像 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('sun.png')
# 将 RGB 转换为 XYZ
xyz_image = mh.colors.rgb2xyz(image)
# 将 XYZ 转换为 LAB
lab_image = mh.colors.xyz2lab(xyz_image)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示 XYZ 图像
axes[0].imshow(xyz_image)
axes[0].set_title('XYZ Image')
axes[0].set_axis_off()
# 显示 LAB 图像
axes[1].imshow(lab_image)
axes[1].set_title('LAB Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图
mtplt.show()
输出
以下是上述代码的输出 −
随机图像的 XYZ 到 LAB 转换
我们可以将随机生成的 XYZ 图像转换为 LAB 颜色空间,方法是首先创建具有任意所需尺寸的图像。接下来,为每个像素的 X、Y 和 Z 通道分配随机值。
X、Y 和 Z 通道代表不同的颜色成分。获得 XYZ 图像后,您可以将其转换为 LAB 图像。
生成的图像将位于 LAB 颜色空间中,具有不同的亮度和颜色通道。
示例
以下示例显示将随机生成的 XYZ 图像转换为 LAB 图像 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 创建 XYZ 图像的函数
def create_xyz_image(width, height):
xyz_image = np.zeros((height, width, 3), dtype=np.float32)
for y in range(height):
for x in range(width):
# 为像素分配 XYZ 值
xyz_image[y, x, 0] = 0.035319468
xyz_image[y, x, 1] = 0.655582062
xyz_image[y, x, 2] = 0.157362328
return xyz_image
# 定义图像的尺寸
width = 512
height = 512
# 生成 XYZ 图像
xyz_image = create_xyz_image(width, height)
# 将 XYZ 转换为 LAB
lab_image = mh.colors.xyz2lab(xyz_image)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示 XYZ 图像
axes[0].imshow(xyz_image)
axes[0].set_title('XYZ Image')
axes[0].set_axis_off()
# 显示 LAB 图像
axes[1].imshow(lab_image)
axes[1].set_title('LAB Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图
mtplt.show()
输出
上述代码的输出如下 −

