精华内容
下载资源
问答
  • 颜色空间

    2018-03-29 23:15:29
    颜色空间

    颜色空间








    展开全文
  • 概述本文章会详细的介绍RGB颜色空间与RGB三色中色调、饱和度、亮度之间的关系,最后会介绍HSV颜色空间!一.RGB颜色空间1.起源RGB三原色起源于上世纪初1809年ThomasYoung提出视觉的三原色学说,随后Helmholtz在1824...

    一.概述

    本文章会详细的介绍RGB颜色空间与RGB三色中色调、饱和度、亮度之间的关系,最后会介绍HSV颜色空间!

     

    一.RGB颜色空间

    1. 起源

       RGB三原色起源于上世纪初1809Thomas Young提出视觉的三原色学说,随后Helmholtz1824年也提出了三原色学说即:视网膜存在三种视锥细胞,分别含有对红、绿、蓝三种光线敏感的视色素,当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的信息传至大脑中枢,就产生某一种颜色的感觉。

    在显示器发明之后,从黑白显示器发展到彩色显示器,人们开始使用发出不同颜色的光的荧光粉(CRT,等离子体显示器),或者不同颜色的滤色片(LCD),或者不同颜色的半导体发光器件(OLED和LED大型全彩显示牌)来形成色彩,无一例外的选择了Red,Green,Blue这3种颜色的发光体作为基本的发光单元。通过控制他们发光强度,组合出了人眼睛能够感受到的大多数的自然色彩。         

    计算机显示彩色图像的时候也不例外,最终显示的时候,要控制一个像素中Red,Green,Blue的值,来确定这个像素的颜色。计算机中无法模拟连续的存储从最暗到最亮的量值,而只能以数字的方式表示。于是,结合人眼睛的敏感程度,使用3个字节(3*8位)来分别表示一个像素里面的Red,Green 和Blue的发光强度数值,这就是常见的RGB格式。我们可以打开画图板,在自定义颜色工具框中,输入r,g,b值,得到不同的颜色。

    2. 概述

    RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。

    RGB空间是生活中最常用的一个颜色显示模型,电视机、电脑的CRT显示器等大部分都是采用这种模型。自然界中的任何一种颜色都可以由红、绿、蓝三种色光混合而成,现实生活中人们见到的颜色大多是混合而成的色彩。

    肉眼可以识别世界上的所有颜色,而RGB几乎可以组合成世界上所有的颜色!

    2. RGB颜色范围

    RGB的每个元素在计算机内存中占用1个字节,1个字节等于8个bit位,所以RGB每个元素的取值范围为:0~256(2的8次方)(从2开始算次方我个人觉得是因为bit位,因为一个bit位可以表示两种状态)

    那么三色组合起来256x256x256=16777216(一千六百七十七万七千二百一十六)种颜色,这么多的颜色几乎可以覆盖世界上所有的颜色!所以平常电视机、电脑屏幕、任何显示仪器都会通过这种RGB颜色空间来显示!

    3. 组合方法

    组合方法是通过互补光的形式来组合成任意颜色的

    例如:

    红色 + 绿色 = 黄色

    如图:

     

    红色 + 绿色 +蓝色 = 白色

    如图:

     

    你也可以调整RGB某一元素的色值来达到不同的颜色组合!

     

    3. RGBA

    RGBA(Alpha),A用于描述三原色的透明度!

    例如:

     

    4. RGB文件存储类型

    RGB色彩空间根据每个分量在计算机中占用的存储字节数分为如下几种类型:

    (1)RGB555

    RGB555是一种16位的RGB格式,各分量都用5位表示,剩下的一位不用。

    高字节 -> 低字节(根据内存大小端)

    XRRRRRGGGGGBBBBB(X代表不用)

    (2)RGB565

    RGB565也是一种16位的RGB格式,但是R占用5位,G占用6位,B占用5位。

    (3)RGB24

    RGB24是一种24位的RGB格式,各分量占用8位,取值范围为0-255。

    (4)RGB32

    RGB32是一种32位的RGB格式,各分量占用8位,剩下的8位作Alpha通道或者不用。

    (5)RGB222

    RGB222是一种8位的RGB格式,各分量占用2bit位,剩下的2bit位不用!

    注意这种格式一般用于灰度图,现在的CRT(阴极射线管)都是彩色RGB模型的CRT,所以在显示灰度图时都是放射RGB颜色模板(荧光粉)来做到显示颜色的,也就是说每个像素点上的荧光粉有三个RGB,所以显示灰度图时也就是单通道的图片时,是通过混合RGB来达到灰度色的!

    还有RGB232,RGB332,RGB233,...

    早期的CRT只能显示黑白照是因为工业水平有限,注意也不一定是黑白色,也有可能是单色,如红色,暗红,紫色,暗紫,只能显示一种颜色!

    5.单通道与多通道

     单通道:

    俗称灰度图,每个像素点只能有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色,可以说灰度是黑与白之间的过渡色!

    注意这个值不是RGB里的任何一个元素,显示设备是直接通过CRT(彩色阴极射线显像管)将单通道里的像素值显示黑白色图像,值越高黑色图越亮,一般灰度值大小不会超过125!

    多通道:

    多通道也就是RGB三原色,每个像素点有三个字节来表示(RGB),分别最大取值范围是0-255,可以组合成千万种颜色。

    图像处理优势对比:

    单通道往往应用于图像处理,因为单通道只有一个像素点(一个字节),所以相比多通道三个字节,处理速度上要尤为的快!

    而且单通道能将图像以灰度形式显示出来,不会影响图像识别,和特征提取!

    多通道以原图的形式将图像展示出来,所以可以提取特征很多,识别率高!

    例如:

     

    多通道也可以组合成灰度图,上面说过,红+绿+蓝=白色,注意这里补充一下,只有在三色相等时才会组合成白色!

     

    例如:

     

    想要达到灰度只要将RGB三色调低一点就可以达到!

    例如:

     

    但是当某一方的值不相同时就会产生其他颜色。

     

    所以三通道想要组合成黑白色(灰度)必须三原色值相同。

    也就是说灰度图不一定是单通道,但是单通道一定是灰度图!

     

    三. 色调、饱和度、亮度

    色调(色相):

      彩色图片中,色调决定彩色图片更加偏于哪一方!

    列如:

     

    我们修改一下色调

    当把色调调低时,颜色更加偏向于红色

     

    当我们把色调调高一点时,颜色更加偏向于绿色

     

    当颜色在调高一点时,颜色更加偏向于蓝色

     

    所以由此可以得出色调是决定一个像素点中的颜色更偏向于哪一方(RGB)

     

    2. 饱和度

    饱和度决定了颜色空间中颜色分量,饱和度越高,说明颜色越深,饱和度越低,说明颜色越浅!

    如图:

    当饱和度为55时,可以发现该颜色空间能显示的颜色分量非常低

     

    当我把饱和度调高一点时,可以发现颜色分量显示的明显要深!

     

    可以与上图形成鲜明的对比。

     

    所以饱和度在颜色空间中是起到一个控制RGB组合色的颜色深度的作用。

     

    3.亮度

     亮度决定颜色空间中颜色的明暗程度!

    如图,亮度设置比较高的时候会发现颜色显示的较为鲜艳

     

    当我们把亮度调低一点时

    会发现颜色会变得非常暗!

     

    所以亮度在颜色空间中起到一个控制RGB组合色的明暗程度的作用。

    下面有个答案是我在知乎上看到的觉得非常适合描述色调(色相)、饱和度、亮度与颜色空间的关系:

     

    1. 明度为0的时候,只有一个点,只能是黑色。没有光,啥都看不见。
    后面我们要让明度是某个不为零的值,才好谈下去。基于这个条件,
    2. 纯度为0的时候,只有一条线,只能是黑白的。没有对比度,就没有彩色。

    3. 纯度也不为0了,才可能出现彩色,至于到底是哪一种颜色,就要看色度了。

     

    不知道大家有没有发现,无论你怎么修改色调,饱和度,亮度,RGB三色值会跟随而变化,其实色调,饱和度,亮度都是通过特定的算法经过计算修改RGB三色而达到的控制颜色效果!

     

    本栏属于图像理论知识不提供任何实践代码!

     

     

    四. HSV颜色空间 (部分地方是参考他人博客的文章,然后根据自己的理解写出来的!)

    1. 起源

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

     

    这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

    2. HSV颜色模型介绍

    2.1色调H(Hue

    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°0°-  359°时颜色会依次变换当角度到达360°时也就是红色,角度也就又回到0°了,所以总共为360°,每变换1°时,色相就会有轻微的变化!如果是顺时针的话这个变换过程会从红色逐渐变换到绿色,在由绿色逐渐变换到蓝色,在由蓝色逐渐变换到红色!逆时针的话就是相反的!

     

    2. 2饱和度 S(Saturation

    饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

     

    2.3明度V(Value

    明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;通常取值范围为0%(黑)到100%(白)。

     

    2.4模型分析:

     

    H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。HSV中每一种颜色的互补色分别相差180度。意思就是说:两种颜色在互补时最大为180°

    例如:

    在HSV模型中红与绿的互补色为黄色,其角度为60°

     

    绿色与蓝色的互补光为青色其角度也为60°

     

    蓝色与红色的互补光为品红色其角度也为60°

     

    那么按逆反的方向来算,绿色到红色的互补光为60°

     

    蓝色到绿色的互补光也为60°

     

    红色到蓝色的互补光也为60°

     

    所以通过以上知识可以知道,红色到到绿色之间的互补光为60°,而绿色到红色之间的互补光也为60°所以每一种颜色的色差是:60°+  60°=  160°

     

    互补光的色差在HSV颜色模型中是这样来算的!

    纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。

    V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。 

    2.5 HSV颜色分析

    HSV对用户来说是一种直观的颜色模型。我们可以从一种纯色彩开始,即指定色彩角H,并让V=S=1,然后我们可以通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4 S=1 H=240度。要得到浅蓝色,V=1 S=0.4 H=240度。

     

    如图:

     

     一般说来,人眼最大能区分128种不同的色彩,130种色饱和度,23种明暗度。如果我们用16Bit表示HSV的话,可以用7位存放H,4位存放S,5位存放V,即745或者655就可以满足我们的需要了。

     

    由于HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,如Photoshop(在Photoshop中叫HSB)等等,但这也决定了它不适合使用在光照模型中,许多光线混合运算、光强运算等都无法直接使用HSV来实现

     

    RGB颜色空间更加面向于工业,而HSV更加面向于用户,大多数做图像识别这一块的都会运用HSV颜色空间,因为HSV颜色空间表达起来更加直观!

     

     

     

     

     

     

    展开全文
  • RGB与Lab颜色空间互相转换

    万次阅读 多人点赞 2017-08-17 23:25:17
    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客《光与色的故事—颜色模型浅析》),Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来...

    RGB与Lab颜色空间互相转换

     

    1.Lab颜色空间

     

           同RGB颜色空间相比(见博客光与色的故事--颜色空间浅析》),Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。下图所示为Lab颜色空间的图示;

     

     

          需要提醒的是,Lab颜色空间比计算机显示器、打印机甚至比人类视觉的色域都要大,表示为 Lab 的位图比 RGB 或 CMYK 位图获得同样的精度要求更多的每像素数据。虽然我们在生活中使用RGB颜色空间更多一些,但也并非Lab颜色空间真的一无所有。例如,在 Adobe Photoshop图像处理软件中,TIFF格式文件中,PDF文档中,都可以见到Lab颜色空间的身影。而在计算机视觉中,尤其是颜色识别相关的算法设计中,rgb,hsv,lab颜色空间混用更是常用的方法。

    两者的区别:

          RGB的是由红色通道(R)、绿色通道(G)、蓝色通道(B)组成的,最亮的红色+最亮的绿色+最亮的蓝色=白色;最暗的红色+最暗的绿色+最暗的蓝色=黑色;而在最亮和最暗之间,相同明暗度的红色+相同明暗度的绿色+相同明暗度的蓝色=灰色。在RGB的任意一个通道内,白和黑表示这个颜色的明暗度。所以,有白色或者灰白色的地方,R、G、B三个通道都不可能是黑色的,因为必须要有R、G、B三个通道来构成这些颜色。
          而LAB不一样,LAB中的明度通道(L)专门负责整张图的明暗度,简单的说就是整幅图的黑白版。a通道和b通道只负责颜色的多少。a通道表示从洋红色(通道里的白色)至深绿色(通道里的黑色)的范围;b表示从焦黄色(通道里的白色)至袅蓝色(通道里的黑色)的范围;a、b通道里的50%中性灰色表示没有颜色,所以越接近灰色说明颜色越少,而且a通道和b通道的颜色没有亮度。这就说明了为什么在a、b通道中红色T恤的轮廓是那么的清晰!因为红色是洋红色+焦黄色组成的。
        总的来说:
          1、适合RGB通道抠的图大部分LAB模式能完成,反之不成立。
          2、任何单一色调背景下,用通道抠有明显颜色区别的部分,用LAB模式很快能完成
          3、LAB模式下对明度(L)通道做任何操作(如锐化、模糊等)不会影响到色相。

    2.RGB转Lab颜色空间

          RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

         RGB与XYZ颜色空间有如下关系:

          仔细观察式(1),其中 X = 0.412453 * R +  0.412453 *G+ 0.412453B ;  各系数相加之和为0.950456,非常接近于1,我们知道R/G/B的取值范围为[ 0,255 ],如果系数和等于1,则X的取值范围也必然在[ 0,255 ]之间,因此我们可以考虑等比修改各系数,使其之和等于1,这样就做到了XYZ和RGB在同等范围的映射。这也就是为什么代码里X,Y,Z会分别除以0.950456、1.0、1.088754。

    RGB2Lab关键代码实现:

     

    //RGB2Lab Lab2RGB
    const float param_13 = 1.0f / 3.0f;
    const float param_16116 = 16.0f / 116.0f;
    const float Xn = 0.950456f;
    const float Yn = 1.0f;
    const float Zn = 1.088754f;
    
     float gamma(float x)
      {
    	  return x>0.04045?powf((x+0.055f)/1.055f,2.4f):(x/12.92);
      }; 
    
     void RGB2XYZ(T_U8 R, T_U8 G, T_U8 B, float *X, float *Y, float *Z)  
        {  
    	float RR = gamma(R/255.0);
    	float GG = gamma(G/255.0);
    	float BB = gamma(B/255.0);
    
            *X = 0.4124564f * RR + 0.3575761f * GG + 0.1804375f * BB;  
            *Y = 0.2126729f * RR + 0.7151522f * GG + 0.0721750f * BB;  
            *Z = 0.0193339f * RR + 0.1191920f * GG + 0.9503041f * BB;  
        }  
      
    
    
      void XYZ2Lab(float X, float Y, float Z, float *L, float *a, float *b)  
        {  
            float fX, fY, fZ;  
          
            X /= (Xn);  
            Y /= (Yn);  
            Z /= (Zn);  
          
            if (Y > 0.008856f)  
    	    fY = pow(Y, param_13);  	
            else  
    	    fY = 7.787f * Y + param_16116;  
       
            if (X > 0.008856f)  
                fX = pow(X, param_13);  
            else  
                fX = 7.787f * X + param_16116;  
          
            if (Z > 0.008856)  
                fZ = pow(Z, param_13);  
            else  
                fZ = 7.787f * Z + param_16116;  
    
            *L = 116.0f * fY - 16.0f;
    	*L = *L > 0.0f ? *L : 0.0f;   
            *a = 500.0f * (fX - fY);  
            *b = 200.0f * (fY - fZ);  
        }  
    
    int RGB2Lab(IMAGE_TYPE *bmp_img,float *lab_img)
    {
    	DWORD width,height,index;
    	WORD  biBitCount;
    	T_U8 *dst,*bmp,R,G,B;
    	float X,Y,Z,L,a,b;
    	
    	T_U32 line_byte;
    	T_U16 i,j;
    	
    	BITMAPFILEHEADER bf;
    	BITMAPINFOHEADER bi;
    	
    	memset(&bf, 0, sizeof(bf));
    	memset(&bi, 0, sizeof(bi));
    	
    	bmp = bmp_img;
    	memcpy(&bf,bmp,14);
    	memcpy(&bi,&bmp[14],40);
    	
    	height = bi.biHeight;
    	width  = bi.biWidth;
    	biBitCount = bi.biBitCount;//每一个像素由24 bits表示,即RGB分量每一个分量用8 bits表示
    	line_byte = WIDTHBYTES(width*bi.biBitCount);
    
    	dst = bmp_img+BMPHEADSIZE;
    	
    	for (i = 0; i <height;i++)
    	{
    		for (j = 0;j < width;j++)
    		{
    			index = i*line_byte+3*j;
    			B = dst[index];
    			G = dst[index+1];
    			R = dst[index+2];
    
    			RGB2XYZ(R,G,B,&X,&Y,&Z);
    			XYZ2Lab(X,Y,Z,&L,&a,&b);
    
    			lab_img[index] = L;
    			lab_img[index+1] = a;
    			lab_img[index+2] = b;
    		}
    	}
        
    	return 0;
    
    }

     

    3.Lab转RGB颜色空间   

     

    Lab2RGB关键代码实现:

     

    extern const float param_13;
    extern const float param_16116;
    extern const float Xn;
    extern const float Yn;
    extern const float Zn;
    
     float gamma_XYZ2RGB(float x)
      {
    	  return x>0.0031308?(1.055f*powf(x,(1/2.4f))-0.055):(x*12.92);
      };
    
    void XYZ2RGB(float X, float Y, float Z, unsigned char*R, unsigned char*G, unsigned char*B)  
        {       
    	float RR , GG, BB ;
            RR =  3.2404542f * X - 1.5371385f * Y - 0.4985314f * Z;  
            GG = -0.9692660f * X + 1.8760108f * Y + 0.0415560f * Z;  
            BB =  0.0556434f * X - 0.2040259f * Y + 1.0572252f * Z;  
    
    	RR = gamma_XYZ2RGB(RR);
    	GG = gamma_XYZ2RGB(GG);
    	BB = gamma_XYZ2RGB(BB);
    
            RR = CLIP255(RR*255.0+0.5);
            GG = CLIP255(GG*255.0+0.5);
            BB = CLIP255(BB*255.0+0.5);
    
            *R = (unsigned char)RR;  
            *G = (unsigned char)GG;  
            *B = (unsigned char)BB;  
        }  
          
      void Lab2XYZ(float L, float a, float b, float *X, float *Y, float *Z)  
        {  
    	float fX, fY, fZ;  
          
            fY = (L + 16.0f) / 116.0; 
    	fX = a / 500.0f + fY;
    	fZ = fY - b / 200.0f; 
    
    	if(powf(fY,3.0)>0.008856)
    	    *Y =powf(fY,3.0);
    	else
    	    *Y = (fY-param_16116)/7.787f;
    		
            if (powf(fX,3) > 0.008856)  
                *X = fX * fX * fX;  
            else  
                *X = (fX - param_16116) / 7.787f;  
          
            if (powf(fZ,3.0) > 0.008856)  
                *Z = fZ * fZ * fZ;  
            else  
                *Z = (fZ - param_16116) / 7.787f;  
          
            (*X) *= (Xn);  
            (*Y) *= (Yn);  
            (*Z) *= (Zn); 
        }  
    
    
    int Lab2RGB(IMAGE_TYPE *bmp_img,float *lab_img)
    {
    	DWORD width,height,index;
    	WORD  biBitCount;
    	T_U8 *bmp,R,G,B,*Lab2BMP;
    	float X,Y,Z,L,a,b;
    	
    	T_U32 line_byte;
    	T_U16 i,j;
    	
    	BITMAPFILEHEADER bf;
    	BITMAPINFOHEADER bi;
    
    	FILE *Lab2BMP_fp = fopen("Lab2BMP.bmp","wb");
    	
    	if(NULL == Lab2BMP_fp)
    	{
    		printf("Can't open Lab2BMP.bmp\n");
    		return -1;
    	}
    	
    	memset(&bf, 0, sizeof(bf));
    	memset(&bi, 0, sizeof(bi));
    
    	bmp = bmp_img;
    	memcpy(&bf,bmp,14);
    	memcpy(&bi,&bmp[14],40);
    
    	height = bi.biHeight;
    	width  = bi.biWidth;
    	biBitCount = bi.biBitCount;//每一个像素由24 bits表示,即RGB分量每一个分量用8 bits表示
    	line_byte = WIDTHBYTES(width*bi.biBitCount);
    	
    	fwrite(&bf,sizeof(BITMAPFILEHEADER),1,Lab2BMP_fp);
    	fwrite(&bi,sizeof(BITMAPINFOHEADER),1,Lab2BMP_fp);
    
    
    	Lab2BMP = (T_U8*)malloc(height*line_byte);
    	if (Lab2BMP == NULL)
    	{
    		printf("Can't malloc LabBMP image.\n");
    		return 0;
    	}
    	memset(Lab2BMP,0,height*line_byte);
    
    	
    	for (i = 0; i <height;i++)
    	{
    		for (j = 0;j < width;j++)
    		{
    			index = i*line_byte+3*j;
    			L = lab_img[index];
    			a = lab_img[index+1];
    			b = lab_img[index+2];
    
    			Lab2XYZ(L,a,b,&X,&Y,&Z);
    			XYZ2RGB(X,Y,Z,&R,&G,&B);
    		
    
    			Lab2BMP[index] = B;
    			Lab2BMP[index+1] = G;
    			Lab2BMP[index+2] = R;
    		}
    	}
    
    	fwrite(Lab2BMP, line_byte*height, 1, Lab2BMP_fp);
    	fclose(Lab2BMP_fp);  
        free(Lab2BMP);
        
    	return 0;
    
    }

    4.结果实例

     

    左侧图像是原始图像,右侧图像经过RGB->XYZ->LAB->XYZ->RGB的转换结果图。

     以D65光源下24色卡为例,对比其计算出来的RGB Lab值大小。

    24色在D65光源下sRGB值

     

    标准SRGB转Lab值
    上述Lab转RGB值

    按照上述公式,计算出来的Lab值与EasyRGB和Photoshop计算出来的值比较,与EasyRGB差值比较小。之所以有所差异,是lab计算中选取的参考白点Xn、Yn、Zn以及设备RGB转XYZ的矩阵略有差异。与Photoshop比较,主要差异在于a分量,其他两个分量已经比较接近了。

    常见的参考白点在XYZ颜色空间的坐标为:
    
    Observer 2° (CIE 1931) 10° (CIE 1964) Note
    Illuminant X2 Y2 Z2 X10 Y10 Z10  
    A 109.850 100.000 35.585 111.144 100.000 35.200 Incandescent/tungsten
    B 99.0927 100.000 85.313 99.178; 100.000 84.3493 Old direct sunlight at noon
    C 98.074 100.000 118.232 97.285 100.000 116.145 Old daylight
    D50 96.422 100.000 82.521 96.720 100.000 81.427 ICC profile PCS
    D55 95.682 100.000 92.149 95.799 100.000 90.926 Mid-morning daylight
    D65 95.047 100.000 108.883 94.811 100.000 107.304 Daylight, sRGB, Adobe-RGB
    D75 94.972 100.000 122.638 94.416 100.000 120.641 North sky daylight
    E 100.000 100.000 100.000 100.000 100.000 100.000 Equal energy
    F1 92.834 100.000 103.665 94.791 100.000 103.191 Daylight Fluorescent
    F2 99.187 100.000 67.395 103.280 100.000 69.026 Cool fluorescent
    F3 103.754 100.000 49.861 108.968 100.000 51.965 White Fluorescent
    F4 109.147 100.000 38.813 114.961 100.000 40.963 Warm White Fluorescent
    F5 90.872 100.000 98.723 93.369 100.000 98.636 Daylight Fluorescent
    F6 97.309 100.000 60.191 102.148 100.000 62.074 Lite White Fluorescent
    F7 95.044 100.000 108.755 95.792 100.000 107.687 Daylight fluorescent, D65 simulator
    F8 96.413 100.000 82.333 97.115 100.000 81.135 Sylvania F40, D50 simulator
    F9 100.365 100.000 67.868 102.116 100.000 67.826 Cool White Fluorescent
    F10 96.174 100.000 81.712 99.001 100.000 83.134 Ultralume 50, Philips TL85
    F11 100.966 100.000 64.370 103.866 100.000 65.627 Ultralume 40, Philips TL84
    F12 108.046 100.000 39.228 111.428 100.000 40.353 Ultralume 30, Philips TL83

     D65光源下,常见的RGB转XYZ以及XYZ转RGB矩阵如下表所示:

    RGB Working Space Reference White RGB to XYZ [M] XYZ to RGB [M]-1
    Adobe RGB (1998) D65
     0.5767309  0.1855540  0.1881852
     0.2973769  0.6273491  0.0752741
     0.0270343  0.0706872  0.9911085
     2.0413690 -0.5649464 -0.3446944
    -0.9692660  1.8760108  0.0415560
     0.0134474 -0.1183897  1.0154096
    AppleRGB D65
     0.4497288  0.3162486  0.1844926
     0.2446525  0.6720283  0.0833192
     0.0251848  0.1411824  0.9224628
     2.9515373 -1.2894116 -0.4738445
    -1.0851093  1.9908566  0.0372026
     0.0854934 -0.2694964  1.0912975
    Best RGB D50
     0.6326696  0.2045558  0.1269946
     0.2284569  0.7373523  0.0341908
     0.0000000  0.0095142  0.8156958
     1.7552599 -0.4836786 -0.2530000
    -0.5441336  1.5068789  0.0215528
     0.0063467 -0.0175761  1.2256959
    Beta RGB D50
     0.6712537  0.1745834  0.1183829
     0.3032726  0.6637861  0.0329413
     0.0000000  0.0407010  0.7845090
     1.6832270 -0.4282363 -0.2360185
    -0.7710229  1.7065571  0.0446900
     0.0400013 -0.0885376  1.2723640
    Bruce RGB D65
     0.4674162  0.2944512  0.1886026
     0.2410115  0.6835475  0.0754410
     0.0219101  0.0736128  0.9933071
     2.7454669 -1.1358136 -0.4350269
    -0.9692660  1.8760108  0.0415560
     0.0112723 -0.1139754  1.0132541
    CIE RGB E
     0.4887180  0.3106803  0.2006017
     0.1762044  0.8129847  0.0108109
     0.0000000  0.0102048  0.9897952
     2.3706743 -0.9000405 -0.4706338
    -0.5138850  1.4253036  0.0885814
     0.0052982 -0.0146949  1.0093968
    ColorMatch RGB D50
     0.5093439  0.3209071  0.1339691
     0.2748840  0.6581315  0.0669845
     0.0242545  0.1087821  0.6921735
     2.6422874 -1.2234270 -0.3930143
    -1.1119763  2.0590183  0.0159614
     0.0821699 -0.2807254  1.4559877
    Don RGB 4 D50
     0.6457711  0.1933511  0.1250978
     0.2783496  0.6879702  0.0336802
     0.0037113  0.0179861  0.8035125
     1.7603902 -0.4881198 -0.2536126
    -0.7126288  1.6527432  0.0416715
     0.0078207 -0.0347411  1.2447743
    ECI RGB D50
     0.6502043  0.1780774  0.1359384
     0.3202499  0.6020711  0.0776791
     0.0000000  0.0678390  0.7573710
     1.7827618 -0.4969847 -0.2690101
    -0.9593623  1.9477962 -0.0275807
     0.0859317 -0.1744674  1.3228273
    Ekta Space PS5 D50
     0.5938914  0.2729801  0.0973485
     0.2606286  0.7349465  0.0044249
     0.0000000  0.0419969  0.7832131
     2.0043819 -0.7304844 -0.2450052
    -0.7110285  1.6202126  0.0792227
     0.0381263 -0.0868780  1.2725438
    NTSC RGB C
     0.6068909  0.1735011  0.2003480
     0.2989164  0.5865990  0.1144845
     0.0000000  0.0660957  1.1162243
     1.9099961 -0.5324542 -0.2882091
    -0.9846663  1.9991710 -0.0283082
     0.0583056 -0.1183781  0.8975535
    PAL/SECAM RGB D65
     0.4306190  0.3415419  0.1783091
     0.2220379  0.7066384  0.0713236
     0.0201853  0.1295504  0.9390944
     3.0628971 -1.3931791 -0.4757517
    -0.9692660  1.8760108  0.0415560
     0.0678775 -0.2288548  1.0693490
    ProPhoto RGB D50
     0.7976749  0.1351917  0.0313534
     0.2880402  0.7118741  0.0000857
     0.0000000  0.0000000  0.8252100
     1.3459433 -0.2556075 -0.0511118
    -0.5445989  1.5081673  0.0205351
     0.0000000  0.0000000  1.2118128
    SMPTE-C RGB D65
     0.3935891  0.3652497  0.1916313
     0.2124132  0.7010437  0.0865432
     0.0187423  0.1119313  0.9581563
     3.5053960 -1.7394894 -0.5439640
    -1.0690722  1.9778245  0.0351722
     0.0563200 -0.1970226  1.0502026
    sRGB D65
     0.4124564  0.3575761  0.1804375
     0.2126729  0.7151522  0.0721750
     0.0193339  0.1191920  0.9503041
     3.2404542 -1.5371385 -0.4985314
    -0.9692660  1.8760108  0.0415560
     0.0556434 -0.2040259  1.0572252
    Wide Gamut RGB D50
     0.7161046  0.1009296  0.1471858
     0.2581874  0.7249378  0.0168748
     0.0000000  0.0517813  0.7734287
     1.4628067 -0.1840623 -0.2743606
    -0.5217933  1.4472381  0.0677227
     0.0349342 -0.0968930  1.2884099

    D50光源下常见的RGB转XYZ以及XYZ转RGB矩阵为:

    RGB Working Space Reference White RGB to XYZ [M] XYZ to RGB [M]-1
    Adobe RGB (1998) D50
     0.6097559  0.2052401  0.1492240
     0.3111242  0.6256560  0.0632197
     0.0194811  0.0608902  0.7448387
     1.9624274 -0.6105343 -0.3413404
    -0.9787684  1.9161415  0.0334540
     0.0286869 -0.1406752  1.3487655
    AppleRGB D50
     0.4755678  0.3396722  0.1489800
     0.2551812  0.6725693  0.0722496
     0.0184697  0.1133771  0.6933632
     2.8510695 -1.3605261 -0.4708281
    -1.0927680  2.0348871  0.0227598
     0.1027403 -0.2964984  1.4510659
    Bruce RGB D50
     0.4941816  0.3204834  0.1495550
     0.2521531  0.6844869  0.0633600
     0.0157886  0.0629304  0.7464909
     2.6502856 -1.2014485 -0.4289936
    -0.9787684  1.9161415  0.0334540
     0.0264570 -0.1361227  1.3458542
    CIE RGB D50
     0.4868870  0.3062984  0.1710347
     0.1746583  0.8247541  0.0005877
    -0.0012563  0.0169832  0.8094831
     2.3638081 -0.8676030 -0.4988161
    -0.5005940  1.3962369  0.1047562
     0.0141712 -0.0306400  1.2323842
    NTSC RGB D50
     0.6343706  0.1852204  0.1446290
     0.3109496  0.5915984  0.0974520
    -0.0011817  0.0555518  0.7708399
     1.8464881 -0.5521299 -0.2766458
    -0.9826630  2.0044755 -0.0690396
     0.0736477 -0.1453020  1.3018376
    PAL/SECAM RGB D50
     0.4552773  0.3675500  0.1413926
     0.2323025  0.7077956  0.0599019
     0.0145457  0.1049154  0.7057489
     2.9603944 -1.4678519 -0.4685105
    -0.9787684  1.9161415  0.0334540
     0.0844874 -0.2545973  1.4216174
    SMPTE-C RGB D50
     0.4163290  0.3931464  0.1547446
     0.2216999  0.7032549  0.0750452
     0.0136576  0.0913604  0.7201920
     3.3921940 -1.8264027 -0.5385522
    -1.0770996  2.0213975  0.0207989
     0.0723073 -0.2217902  1.3960932
    sRGB D50
     0.4360747  0.3850649  0.1430804
     0.2225045  0.7168786  0.0606169
     0.0139322  0.0971045  0.7141733
     3.1338561 -1.6168667 -0.4906146
    -0.9787684  1.9161415  0.0334540
     0.0719453 -0.2289914  1.4052427

    参考资料:

    http://www.cnblogs.com/Imageshop/archive/2013/02/02/2889897.html

    http://blog.csdn.net/grafx/article/details/59482320

    http://www.easyrgb.com/en/math.php

    http://www.brucelindbloom.com/

     

     

     

    展开全文
  • 1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成。然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 Hue,饱和度 Saturation,...

    1.1 颜色空间介绍

    RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成。然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 Hue,饱和度 Saturation,亮度 Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角 锥体模型。
    为什么会选择 HSV 空间而不是 RGB 空间? 对于图像而言,识别相应的颜色在 RGB 空间、 HSV 空间或者其它颜色空间都是可行的。之所以选择 HSV,是因为 H 代表的色调基本上可以 确定某种颜色,再结合饱和度和亮度信息判断大于某一个阈值。而 RGB 由三个分量构成, 需要判断每种分量的贡献比例。即 HSV 空间的识别的范围更广,更方便。

    在这里插入图片描述1.2 HSV到RGB转换
    在这里插入图片描述1.3 RGB到灰度
    在这里插入图片描述1.3.1 平均法

    平均法将R,G和B的平均值作为灰度值。

    灰度=(R + G + B)/ 3

    从理论上讲,公式是100%正确的。但是在编写代码时,您可能会遇到uint8溢出错误 - R,G和B的总和大于255.为避免异常,应分别计算R,G和B。

    灰度= R / 3 + G / 3 + B / 3

    平均法很简单,但效果不如预期。原因是人眼对RGB的反应不同。眼睛对绿光最敏感,对红光不敏感,对蓝光最不敏感。因此,三种颜色在分布上应具有不同的权重。这使我们得到加权方法。

    1.3.2 加权法
    也称为光度法,根据其波长称重红色,绿色和蓝色。改进后的公式如下:

    灰度 = 0.299R + 0.587G + 0.114B

    1.4 二值化:灰度到黑/白转换

    二值化将灰度图像转换为黑/白图像。该转换在检测斑点方面很有用,并进一步降低了计算复杂度。关键任务是找到合适的阈值。主要有两种方法:

    局部阈值  - 逐个像素地计算阈值
    全局阈值处理 - 为所有像素计算一次阈值
    

    1.4.1 局部阈值法

    利用局部阈值方法,在每个像素处计算阈值,其取决于一些局部统计,例如平均值,范围和像素邻域的方差。将图像分成几个子块,并分析每个块中灰度值的分布。
    在这里插入图片描述1.4.2 全局阈值方法

    全局阈值处理方法利用图像直方图。图像直方图是一种统计图,在x轴上具有灰度值,在y轴上具有每个灰度的像素数。
    在这里插入图片描述图像直方图可用于自动确定用于将灰度图像转换为二值图像的阈值。基本思想是在前景像素值的峰值和背景像素值的峰值之间找到一个点。如果像素的强度等级小于阈值,则将像素设置为黑色(灰度= 0),否则将其设置为白色(灰度= 255)。阈值用作分界线。

    展开全文
  • 一、什么是线性颜色空间和伽马颜色空间?         线性颜色空间是指与显示亮度值之间呈线性关系的像素值空间。         伽马(Gamma)颜色空间是指线性颜色空间中的像素值...
  • OpenCV颜色空间——HLS颜色空间

    万次阅读 2017-06-25 09:41:38
    HLS颜色空间,三个分量分别是色相(H)、亮度(L)、饱和度(S),这三个分量进行数字化处理,取值范围为:,,模型可以通过以下两幅图像理解(来自维基百科)从上图种可以看出,我们固定一个颜色(H),那么随着饱和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,908
精华内容 5,563
关键字:

颜色空间