您的位置:首页 > 运维架构

颜色空间RGB与TSL的转换

2017-03-27 17:45 281 查看
        TSL是一种更加接近于描述颜色的色调和饱和度意义的空间。其是规格化RGB空间的一种变形,也是一种规格化的色度一亮度空间。其中T(Tint)维包含色彩信息,而 S(saturatinn)代表了饱和度,L(Lighthess)维即是亮度信息维。TSL色彩空间相比于RGB空间,是一种更加直观、更符合人类视觉原理的色彩空间。

       色度T、饱和度S、亮度L三个值来描述物体。转换关系如下:



          RGB->TSL转换,其中T,S取值范围为[0,1],L取值范围0-255。

opencv环境下由RGB转换到TSL空间:

代码;

IplImage* outputImage = cvLoadImage("lena.jpg", 1);

    CvScalar s;

    for (int i = 0; i < outputImage->height; i++)

    {

        for (int j = 0; j < outputImage->width; j++)

             {

            s = cvGet2D(outputImage, i, j);

            double B = s.val[0];

            double G = s.val[1];

            double R = s.val[2];

            double  r = R / (B + G + R) - 1.0 / 3;

            double  g = G / (B + G + R) - 1.0 / 3;

            s.val[1] = sqrt((9.0 / 5)*(r*r + g*g));                            //S channel

            s.val[2] = 0.229*R + 0.587*G + 0.114* B;                        //L channel

                                                                            //T channel

            if (g > 0)

                s.val[0] = (double)(atan(r / g) / (2 * PI) + 1.0 / 4);

            else if (g < 0)

                s.val[0] = (double)(atan(r / g) / (2 * PI) + 3.0 / 4);

            else

                s.val[0] = (double)0.0;

           cvSet2D(outputImage, i, j, s);

           }

    }

实例图像:

输入测试lena图像,输出:1.T、S分量取值范围[0,1];2.T、S分量取值范围为[0,255]



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息