我正在尝试将 RGB 转换为感知均匀的色彩空间 CIELAB。维基百科指出:
“首先必须将 RGB 或 CMYK 值转换为特定的
绝对色彩空间,例如 sRGB 或 Adobe RGB。此次调整将
与设备相关,但转换产生的数据将是
独立于设备,允许将数据转换为 CIE 1931
色彩空间,然后转换为 L*a * b*。”
我知道转换为 sRGB 后有一些简单的转换,但我还没有找到任何从 RGB 到 sRGB 的材料。那么,有哪些方法可以进行这种转换呢?
不,您不应该从(线性)RGB 转换为 sRGB。事实上,情况恰恰相反。以下是步骤:
将 sRGB 转换为线性 RGB。 sRGB 图像是伽玛编码的,这意味着相机应用伽玛函数战俘(x, 1/2.2)到光信号上。该 sRGB 处于非线性的伽玛空间中。
现在,将线性 RGB 转换为 LAB 涉及两个步骤:首先是将线性 RGB 转换为 XYZ 颜色空间(这是基本颜色空间)。该转换是线性运算,即矩阵乘法。这就是为什么您需要线性 RGB 值而不是 sRGB 的原因。它需要在线性空间中。最后,XYZ 值通过非线性运算转换为 LAB 值,其中包含一些标准公式(您无需担心)。
有趣的链接:
(i) 了解 sRGB 和线性 RGB 空间:http://filmicgames.com/archives/299 http://filmicgames.com/archives/299; http://www.cambridgeincolour.com/tutorials/gamma- Correction.htm http://www.cambridgeincolour.com/tutorials/gamma-correction.htm
(ii) MATLAB 教程:https://de.mathworks.com/help/vision/ref/colorspaceconversion.html https://de.mathworks.com/help/vision/ref/colorspaceconversion.html
(三)Python包:http://pydoc.net/Python/pwkit/0.2.1/pwkit.colormaps/ http://pydoc.net/Python/pwkit/0.2.1/pwkit.colormaps/
(iv) C 代码:http://svn.int64.org/viewvc/int64/colors/color.c?view=markup http://svn.int64.org/viewvc/int64/colors/color.c?view=markup
(v) OpenCV 不执行 sRGB 到线性 RGB 转换,但它在 color.cpp 代码内执行转换(OpenCV_DIR\modules\imgproc\src\color.cpp)。检查调用的方法initLabTabs(),有伽马编码和解码。 OpenCV 颜色转换 API:http://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html http://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)