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

时间:2018-10-14 03:49:16

标签: c++ matlab opencv image-thresholding lab-color-space

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

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

MATLAB Lab Scale

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

根据以下两个来源:Source 1;和Source 2

对于OpenCV中的8位图像,我们似乎需要以下 L * a * b 范围:

0 <= L <= 255; 0 <= a <= 255;和0 <= b <= 255

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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