use*_*860 8 image colors image-processing
我正在尝试将RGB转换为感知均匀的色彩空间CIELAB。维基百科指出:
“首先必须将RGB或CMYK值转换为特定的绝对色彩空间,例如sRGB或Adobe RGB。此调整将取决于设备,但是转换后的结果数据将与设备无关,从而允许对数据进行转换转换为CIE 1931颜色空间,然后转换为L * a * b *。”
我知道一旦转换为sRGB,会有一些简单的转换,但是我还没有发现任何从RGB到sRGB的材料。那么,存在哪些方法可以进行这种转换?
不,您不应该从(线性)RGB转到sRGB。实际上,反之亦然。步骤如下:
将sRGB转换为线性RGB。sRGB图像是伽玛编码的,这意味着相机将伽玛函数pow(x,1 / 2.2)应用于光信号。该sRGB在非线性的伽马空间中。
现在,将线性RGB转换为LAB涉及两个步骤:首先是将线性RGB转换为XYZ颜色空间(这是基本的颜色空间)。该转换是线性运算,即矩阵乘法。这就是为什么您需要线性RGB值而不是sRGB的原因。它必须在线性空间中。最后,XYZ值通过包含一些标准公式的非线性操作转换为LAB值(您不必担心)。
有趣的链接:
(i)了解sRGB和线性RGB空间:http://filmicgames.com/archives/299;http://www.cambridgeincolour.com/tutorials/gamma-correction.htm
(ii)MATLAB教程:https://de.mathworks.com/help/vision/ref/colorspaceconversion.html
(iii)Python软件包:http://pydoc.net/Python/pwkit/0.2.1/pwkit.colormaps/
(iv)C代码: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