基于局部多项式法的RGB到CIELab颜色空间转换算法的研究
颜色的复制与再现依赖于各种硬件设备,如显示器、打印机等,但是这些硬件设备的特性无法完全相同,使得即使对于同类型设备,若输入同样的颜色值(如RGB、CMYK),其显示或者打印的效果也不一致,甚至相差甚远。为在不同硬件设备上实现颜色再现的一致性,基于设备无关空间的色彩管理技术应运而生。如图一所示,把与设备相关空间(如RGB、CMY)转换到与设备无关空间(如CIELab),然后再与设备无关空间转换到与设备有关空间。因此,色彩管理技术的核心内容是颜色空间的转换。空间转换的传统数学方法如插值法、多项式回归法已被广泛应用到实践中去,取得了良好效果。本文采用一种区别于以上两种方法的局部多项式法,实现从RGB到CIELab颜色空间的转换,并与多项式回归法(20项)进行对比。实验结果表明,该模型具有较高的转换精度,可以为科学研究提供参考依据。
图一 基于设备无关空间的色彩管理系统
一、基于局部多项式RGB到CIELab颜色空间转换算法
1.算法原理
在图二的子图(a)中,RGB空间中有512个点,这些点整齐排列成一个大立方体。但是如果在Photoshop软件中获取这些点对应的CIELab值,并在CIELab空间中显示,如图二的子图(b)所示,点的分布并不是一个大立方体,而是一种不规则的体形。因此,RGB与CIELab空间之间是一种非线性关系。
(a) RGB空间 (b) CIELab空间
图二 Photoshop中RGB空间及对应的CIELab空间
为了逼近两者的非线性关系,本文采用局部多项式法。它的特点是对源空间进行分割,即分割大颜色空间为若干子颜色空间,然后在子颜色空间内采用多项式回归法进行颜色空间转换。而传统的多项式回归法,是直接在大颜色空间里实现转换,这样会在空间的某些区域出现大误差,因为有些区域的非线性关系非常明显以致于很难用全局的方法来逼近。因此,若先分割源色空间,然后在子空间内采用多项式回归法实现空间转换,这样可以更好地逼近两个颜色空间的非线性关系,提高转换精度。
局部多项式法可分为两步:首先,需要分割源色空间,获取建模点,建立查找表。若分割的等级越高,则分割的子空间体积越小,转换精度也就越高,但同时计算量也增大。其次,在子空间内采用多项式回归法实现空间转换。先利用子空间栅格点的颜色值(RGB、CIELab)解出多项式系数,然后根据所得系数,求出待转换点在目标空间的颜色值。
2.实现步骤
①建立查找表
首先,本文对RGB空间进行8级均匀分割获取512个建模点(n级分割,就有n3个建模点个数),即分别在R、G、B三个通道上进行等间距采样,间距为36,采样点分别为0、36、72、108、144、180、216、255,如图三的子图(a)所示。其次,为了更好地检验模型的误差大小,必须消除其它误差的产生,如实验数据的测量误差。因此,本文并未用测量仪器读取实验数据,而是直接在Photoshop的拾色器面板中获取512个建模点的RGB值以及所对应的CIELab值。
(a) RGB空间8级均匀分割 (b) 子空间的8个栅格点
图三 RGB空间8级均匀分割及其子空间的8个栅格点
②寻找子空间
由于已对源空间进行8级分割,则形成343个子空间(n级分割,就有(n-1)3个子空间),如图三的子图(a)所示。对于某一个待转换的颜色点,若该点为建模点,则直接根据查找表输出对应的CIELab值。若为非建模点,则利用其RGB值,在RGB三维空间中寻找该点所在的子空间,如图三的子图(b)所示,然后提取这个子空间8个栅格点的RGB和CIELab值,准备做多项式回归,求解多项式系数。
例如:对于一个RGB值为(33,144,200)的待转换点(该点为非建模点),它所在子空间8个栅格点的RGB值分别为(0,108,180)(0,108,216)(0,144,180),(0,144,216),(36,108,180),(36,108,216),(36,144,216)。由于这些栅格点都是建模点,所以在查找表中可以找出对应的CIELab值。通过查表确定这些栅格点的RGB和CIELab值后,可以为下一步求解这个子空间所对应的多项式系数做准备,每个子空间都有唯一对应的多项式系数。
③求子空间的多项式系数
多项式回归法要求其项数应小于建模点个数。在求解子空间的系数时,由于本文只有子空间的8个栅格点作建模点,所以最多只能采用7项多项式,如式(1)、(2)、(3)所示。
式中:R、G、B、L、A、B分别为子空间栅格点的R、G、B、L、a、b值;、、分别为求解L、a、b值所对应的多项式系数。
例如,在求解过程中,应把子空间的第1个到第8个栅格点的RGB和L值依次代入式(1)中,可以得到8个方程,然后采用高斯消元法求出。同理,把8个栅格点的RGB、a值和RGB、b值分别代入式(2)和式(3)中,可以求出和。例如:对于RGB值为(33,44,200)的颜色点,其所在子空间对应的多项式系数如式(4)、(5)、(6)所示。
④求CIELab值
求出、、后,把颜色点的RGB值代入式(1)、(2)、(3)中,求解该点的CIELab值。比如:RGB值同样为(33,44,200)的颜色点,把R=33,G=44,B=200依次代入系数已知的式(4),式(5),式(6)中,就可以分别求出L=56,A=-15,B=-38,从而实现RGB到CIELab空间的转换。
二、实验结果及分析
1.精度检验
本文对RGB颜色空间进行六级分割,获取216个测试点,同样在Photoshop中获取这些颜色点的RGB值及对应的CIELab值,然后采用这些数据检验模型的精度。
2.结果分析
在检验模型的精度过程中,本文还采用多项式回归法(20项)与之对比,实验结果如表1所示。明显,无论是转换的最大色差、最小误差、平均误差,局部多项式法都大大优于多项式回归法(20项)。
表1 两种方法实验结果对比
此外,两种方法的误差分布如图四、图五所示。对于216个测试点,采用局部多项式法,误差在0~1之间的数目约150个,将近占70%,而且绝大多数误差在0~2之间;若采用多项式回归法(20项),误差主要分布在1到5之间,少量点分布在7~9之间,分布情况不理想。因此,局部多项法是一种转换精度较高的方法。
图四 局部多项式法误差分布图 图五 多项式回归法误差分布图
三、结束语
本文采用局部多项式法实现RGB到CIELab颜色空间转换,并且与多项式回归法(20项)进行比较。实验结果表明,局部多项式法是一种精度较高的转换方法,并且优于多项式回归法(20项)。同时,若要进一步提高转换精度以及更好地改善误差分布,建模数据可以采用8级以上的分割或者采用非均匀分割方法,也可以在多项式中引入非线性函数以更好地逼近两个颜色空间之间的非线性关系。