LAB颜色空间各通道的取值范围

您所在的位置:网站首页 LAB颜色空间软件 LAB颜色空间各通道的取值范围

LAB颜色空间各通道的取值范围

2023-08-04 18:53| 来源: 网络整理| 查看: 265

   同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颜色空间混用更是常用的方法。

简介

LAB颜色空间在计算机视觉中经常被使用,知道L,A,B三个通道的取值范围有一定的意义。

L∈[0, 100]A∈[−86.1813, 98.2352]B∈[−107.8618, 94.4758]

OpenCV获取LAB取值范围

下面是一段实验代码,用于获取LAB的取值范围。

基本思路是,排列组合所有RGB可能,然后转变成LAB,在所得LAB中求取最大最小值。

#include #include using namespace std; #include using namespace cv; int main(int argc, char** argv){ Mat img(256, 256, CV_32FC3); vector pv(256); // pixel color is in [0.f, 1.f]; for (int t = 0; t < 256; t++){ pv[t] = t / 255.f; } Mat img_lab; vector mv; float min_l = FLT_MAX, max_l = FLT_MIN; float min_a = FLT_MAX, max_a = FLT_MIN; float min_b = FLT_MAX, max_b = FLT_MIN; for (int c1 = 0; c1 < 256; c1++){ for (int c2 = 0; c2 < 256; c2++){ for (int c3 = 0; c3 < 256; c3++){ img.at(c2, c3) = Vec3f(pv[c1], pv[c2], pv[c3]); } } cvtColor(img, img_lab, CV_BGR2Lab); cv::split(img_lab, mv); double min_val, max_val; cv::Point min_loc, max_loc; cv::minMaxLoc(mv[0], &min_val, &max_val, &min_loc, &max_loc); // L if (min_l > min_val) min_l = min_val; if (max_l < max_val) max_l = max_val; cv::minMaxLoc(mv[1], &min_val, &max_val, &min_loc, &max_loc); // A if (min_a > min_val) min_a = min_val; if (max_a < max_val) max_a = max_val; cv::minMaxLoc(mv[2], &min_val, &max_val, &min_loc, &max_loc); // B if (min_b > min_val) min_b = min_val; if (max_b < max_val) max_b = max_val; imshow("test", img); waitKey(10); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3