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()
输出
上述代码的输出如下 −
