如何将 MATLAB Lab 色标转换为 OpenCV Lab 色标?

How to convert from MATLAB Lab color scale to OpenCV Lab color scale?

我正在尝试使用 Color Thresholder App 在 MATLAB 中对颜色进行采样,然后使用 L * a * b 在 OpenCV 中输出。但似乎存在规模不匹配。以下是MATLAB和OpenCV中的L * a * b尺度:

  1. MATLAB: 0 <= L <= 100; -100 <= 一个 <= 100;和 -100 <= b <= 100

  1. OpenCV: 0 <= L <= 100; -127 <= 一个 <= 127;和 -127 <= b <= 127

根据这两个来源:Source 1; and Source 2

看来我们需要以下 L * a * b 范围 8 OpenCV 中的位图:

0 <= L <= 255; 0 <= 一个 <= 255;和 0 <= b <= 255

我们如何从 MATLAB 转换为 OpenCV L * a * b 色标对于 8 位图像 ?

Matlab 在其图像处理工具箱中使用国际色彩联盟的颜色表示规范。 ICC 配置文件规范几乎普遍用于颜色规范和转换。

ICC Lab 指定 LAB 用于各种分辨率的配置文件转换 space。对于 8 位,使用无符号的 8 位值。 L* 映射为 0->0 和 100->255。对于 a* 和 b*,值限制在 -128 和 +127 之间。因此,实际编码将 128 添加到 a* 和 b* 以产生 0 到 255 之间的无符号值。

可以在此处规范的第 6.3.4.2 节的表 12 和 13 中找到这些和其他更大的位大小的表示:

http://color.org/specification/ICC1v43_2010-12.pdf

大多数程序(例如 Photoshop、Tiff 文件等)都使用 ICC 格式。此外,Matlab 的函数包括各种转换函数,例如 lab2uint8(lab),可用于将平点 Lab 值转换为固定大小的正确表示形式,例如无符号 8 位整数。