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]