美文网首页
色彩空间类型转换

色彩空间类型转换

作者: 长歌行夜一 | 来源:发表于2020-05-04 17:23 被阅读0次

    RGB是一种比较常见的色彩空间类型,除此之外还有一些其他的色彩空间,比如常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIEL*a*b*色彩空间、CIEL*u*v*色彩空间、Bayer色彩空间等。每个色彩空间都有自己擅长的领域,因此,为了更方面的处理某个具体问题需要用到色彩空间的类型转换。

    色彩空间类型转换是指,将一个色彩空间转换为另一个色彩空间。例如,在进行图像的特征提取、距离计算时,往往先将图像从RGB色彩空间转换灰度色彩空间。一些应用中,可能将色彩空间的图像转换为二值图像。

    1. 色彩空间基础

    常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIEL*a*b*色彩空间、CIEL*u*v*色彩空间、Bayer色彩空间等。

    1) GRAY色彩空间

    GRAY(灰度图像)通常是指八位灰度图,有256个灰度级【0,255】。当图像有RGB转换为GRAY时,其处理方式如下:

    Gray = 0.299*R + 0.587*G + 0.114*B

    上述是标准的转换方式,也是OpenCV中使用的转换方式,有时也可以采用简化形式:

    Gray=\frac{R+G +B}{3}

    当图像由GRAY色彩空间转换为RGB时,最终所有通道的值将是相同的,即R=G=B=Gray

    2)XYZ色彩空间

    XYZ色彩空间是由CIE定义的,是一种更便于计算的色彩空间,其转换方式为:

    \begin{bmatrix}X\\ Y\\ Z\end{bmatrix}=\begin{bmatrix}0.412453 &0.357580  &0.180423 \\ 0.212671 &0.715160  &0.072169 \\ 0.019334 &0.119193  &0.950227 \end{bmatrix}.\begin{bmatrix}R\\ G\\ B\end{bmatrix}

    将XYZ色彩空间转换为GRB色彩空间:

    \begin{bmatrix}R\\ G\\ B\end{bmatrix}=\begin{bmatrix}3.240479 &-1.53715  &-0.498535 \\ -0.969256 &1.875991  &0.041556 \\ 0.055648 &-0.204043  &1.057311 \end{bmatrix}.\begin{bmatrix}X\\ Y\\ Z\end{bmatrix}

    3)YCrCb色彩空间

    人眼视觉系统(HVS, Human Visual System)对颜色的敏感程度要低于对亮度的敏感度。在传统的RGB色彩空间内,三原色具有相同的重要性,但忽略了亮度信息。

    在YCrCb色彩空间中,Y代表亮度,色度信息保存在Cr和Cb中,其中,Cr表示红色分量信息,Cb表示蓝色分量信息。亮度给了颜色亮或者暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。在RGB光源中,绿色分量的影响最大,蓝色分量的影响最小。

    从RGB色彩空间到YCrCb的转换公式:

    Y=0.299\cdot R + 0.587\cdot G + 0.114\cdot B\\Cr = (R - Y) \times 0.713 + delta\\Cb = (B-Y)\times 0.564 + delta

    式中delta的值为:对于8位图象,delta为128;对于16位图像,delta=32768; 对于单精度图像,为0.5。

    从YCrCb色彩空间到RGB色彩空间的转换公式:

    R = Y + 1.403 \cdot (Cr - delta)\\B = Y - 0.714\cdot (Cr - delta) -0.344\cdot (Cb - delta)\\B = Y + 1.773\cdot (Cb - delta)

    4)HSV色彩空间

    RGB是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定差异,HSV是一种面向视觉感知的颜色模型。

    HSV色彩空间从心理学和视觉的角度出发,指出人的色彩知觉主要包含三要素:色调(Hue,也叫色相)、饱和度(Saturation)、亮度(Value),色调指光的颜色,饱和度指色彩的深浅程度,亮度指人眼感受到的光的明暗程度。

    色调:色调与混合光谱中主要光波长有关。

    饱和度:指相对纯净度,或者一种颜色混合白光的数量。纯谱系是全饱和的,像深红色(红加白)和淡紫色(紫加白)这样的彩色是欠饱和的。如果颜色的饱和度很低,那么它计算所得的色调就不可靠。作为灰度图像显示时,较亮区域对应的颜色具有较高的饱和度。

    亮度:反映的是人眼感受光的明暗程度。该指标与物体的反射度有关。对于色彩来讲,若在其中掺入的白色越多,则其亮度越高;掺入的黑色越多,则其亮度越低。

    在具体实现上,我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。色调的取值范围为【0,360】,但为保证取值范围在【0,255】内,在OpenCV中对色调做了映射---除以2,从而将色调范围映射到了【0,180】。

    饱和度为一比例值,范围【0,1】,饱和度为0时,只有灰色。亮度的取值范围也是【0,1】。当然,饱和度和亮度也被映射到了【0,255】

    我们可以通过调用cv2.cvtColor()函数来实现色彩空间的转换。

    5)HLS色彩空间

    与HSV色彩空间类似,只是HLS用“光亮度/明度(lightness)”替换了亮度。取值范围也是【0,1】,用它来衡量有多少光线从物体表面反射出来。

    6)CIEL*a*b*色彩空间

    CIEL*a*b*色彩空间是均匀色彩空间模型,它是面向视觉感知的颜色模型。从视觉感知的角度讲,人所感知到的两种颜色的区别程度,应该与这两个颜色在色彩空间中的距离成正比,这个空间称为均匀色彩空间。

    L*分量用来表示像素的亮度,取值范围【0,100】;

    a*分量表示从红色到绿色的范围,取值范围【-127,127】;

    b*分量表示从黄色到蓝色的范围,取值范围【-127,127】

    7)CIEL*u*v*色彩空间

    与CIEL*a*b*色彩空间一样,都属于均匀的颜色模型,适用于显示器显示和根据加色原理进行组合的场合。该模型对红色的变化比较敏感,对蓝色的变化不太敏感。

    8)Bayer色彩空间

    Bayer色彩空间被广泛的用于CCD和CMOS相机中。

    2.类型转换函数

    在OpenCV内,我们使用cv2.cvtcolor()函数实现色彩空间类型转换:

    dst = cv2.cvtcolor(src, code [, dstcn])

    参数src 表示原始输入图像。可以是8位无符号图像、16位无符号图像,或者单精度浮点数等;

    参数code 是色彩空间转换码;

    可选参数dstcn 是目标图像的通道数。如果参数默认为0,则通道数自动通过原始图像和code得到。

    dst表示输出图像,与原始输入图像具有相同的数据类型和深度。

    颜色空间的转换都用到了如下约定:

    8位图像的取值范围是[0,255];

    16位图像的取值范围是[0,65535];

    浮点数图像值的范围是[0.0~1.0]。

    3. 类型转换实例

    import cv2

    import numpyas np

    imgs = cv2.imread('water.jpg')

    gray_img = cv2.cvtColor(imgs,cv2.COLOR_RGB2GRAY)

    # 由灰度色彩空间转换为GRB,三个通道的值是一样的,所以得到的仍然是灰度图像

    rgb_img = cv2.cvtColor(gray_img,cv2.COLOR_GRAY2RGB)

    cv2.imshow('RGB_student',imgs)

    cv2.imshow('gray_student',gray_img)

    cv2.imshow('RGB2_student',rgb_img)

    wait_re = cv2.waitKey(0)

    cv2.destroyAllWindows()

    相关文章

      网友评论

          本文标题:色彩空间类型转换

          本文链接:https://www.haomeiwen.com/subject/aqblghtx.html