得鹿梦鱼 得鹿梦鱼

基于 CIE 的灰度化算法分析

在 RGB 色彩模型中,RGB 三个通道的相关性很大,因此可以将彩色图像从 RGB 色彩模型转换为 LAB 色彩模型

LAB颜色模型

Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩

XYZ颜色空间

就是在RGB系统的基础上,用数学方法,选用三个理想的原色来代替实际的三原色, XYZ颜色空间的三个分量分别代表了颜色的亮度(Y)和色度(X和Z)。X表示红色和绿色之间的差异,Y表示亮度,Z表示蓝色和黄色之间的差异

REG \Rightarrow LAB

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。
[XYZ]=[0.4124530.3575800.1804230.2126710.7151600.0721690.0193340.1191930.950227][RGB]1\begin{bmatrix}X \\Y \\Z\end{bmatrix}\text{=}\begin{bmatrix}0.412453 & 0.357580 & 0.180423 \\0.212671 & 0.715160 & 0.072169 \\0.019334 & 0.119193 & 0.950227\end{bmatrix}\cdot\begin{bmatrix}R \\G \\B\end{bmatrix}\tag{1}

{x=X255×0.950456y=Y255z=Z255×1.0887542\begin{cases}x = \frac{X}{255 \times 0.950456} \\y = \frac{Y}{255} \\z = \frac{Z}{255 \times 1.088754}\end{cases}\tag{2}

fx={x1/3if x>0.0088567.787x+16116if x0.0088563f_x = \begin{cases}x^{1/3} & \text{if } x > 0.008856 \\7.787x + \frac{16}{116} & \text{if } x \leq 0.008856\end{cases}\tag{3}

fy={y1/3if y>0.0088567.787y+16116if y0.0088564f_y = \begin{cases}y^{1/3} & \text{if } y > 0.008856 \\7.787y + \frac{16}{116} & \text{if } y \leq 0.008856\end{cases}\tag{4}

fz={z1/3if z>0.0088567.787z+16116if z0.0088565f_z = \begin{cases}z^{1/3} & \text{if } z > 0.008856 \\7.787z + \frac{16}{116} & \text{if } z \leq 0.008856\end{cases}\tag{5}

L={116fy16if y>0.008856903fyif y0.0088566L = \begin{cases}116 f_y - 16 & \text{if } y > 0.008856 \\903f_y & \text{if } y \leq 0.008856\end{cases}\tag{6}

a=500fxfy7a = 500 \left f_x - f_y \right \tag{7}
b=200fyfz8b = 200 \left f_y - f_z \right \tag{8}

L通道灰度化

对于转换后得到的L、a、b 三个分量,将a通道和b通道的值置零,然后将L分量的值映射到灰度图像的值中得到灰度图像

代码实现

引入color-convert的包

将彩色图像的RGB三个分量的加权平均值作为输出图像的灰度值 代码实现