Lab颜色空间进行颜色提取 及其实现

  这段时间在做车灯检测,晚上有些尾灯偏黄色亮度偏弱,仅用灰度度是不够的,经比较了在RGB、HSV、Lab颜色空间下进行颜色提取,发现Lab颜色模型的效果是最好的。下面介绍Lab的原理及其代码实现。

  Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。(这段百度的,哈哈 )

  RGB转换到Lab颜色空间,这个里http://blog.csdn.net/shamaozi/article/details/6221029 有介绍。其中,最精华的公式如下:

     L = Y1 = (13933 * R + 46871 * G + 4732 * B) div 2^16
         a = 377 * (14503 * R - 22218 * G + 7714 * B) div 2^24 + 128
         b = 160 * (12773 * R + 39695 * G - 52468 * B) div 2^24 + 128

BGR转换到Lab,下面显示了L、a、b三通道的效果图。从中可以看出提取颜色的基本方法。灰度图没有颜色,故在a和b通道中值为 128;(-127~127);提取不同的颜色 可以在 三个通道上选取相应的阈值。

转换代码如下:

#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{

  Mat srcImg = imread("0.jpg");
  Mat rgbImg;

  if (!srcImg.data)
  {
    cerr<<" faild read Image"<<endl;
    return -1;
  }

  float nScale = 1;//0.25;
  Size sz;
  sz.width = (int)(srcImg.cols * nScale);
  sz.height = (int)(srcImg.rows * nScale);
  rgbImg.create(sz, srcImg.type());
  resize(srcImg,rgbImg,sz);

  for (int i = 0; i < rgbImg.rows; ++i)
  {
  uchar* Bdata = BGR_mv[0].ptr<uchar>(i);
  uchar* Gdata = BGR_mv[1].ptr<uchar>(i);
  uchar* Rdata = BGR_mv[2].ptr<uchar>(i);

  uchar* Ldata = LImg.ptr<uchar>(i);
  uchar* adata = aImg.ptr<uchar>(i);
  uchar* bdata = bImg.ptr<uchar>(i);

  for (int j = 0; j < rgbImg.cols; ++j)
  {
    //L
    Ldata[j] = (13933 * Rdata[j] + 46871*Gdata[j] + 4732*Bdata[j]) / 65536;
    //a
    adata[j] = 377 * (14503 * Rdata[j] - 22218*Gdata[j] + 7714*Bdata[j]) / 16777216 + 128;
    //b
    bdata[j] = 160 * (12773 * Rdata[j] + 39695*Gdata[j] - 52468*Bdata[j])/ 16777216 + 128;

    //L
    // Ldata[j] = (0.2126 * Rdata[j] + 0.7152*Gdata[j] + 0.0722*Bdata[j]);
    //a
    // adata[j] = 1.4749 * (0.2213 * Rdata[j] - 0.3390*Gdata[j] + 0.1177*Bdata[j]) + 128;
    //b
    // bdata[j] = 0.6245 * (0.1949 * Rdata[j] + 0.6057*Gdata[j] - 0.8006*Bdata[j]) + 128;

  }

  imshow("b",bImg);
  imshow("a",aImg);
  imshow("L",LImg);

  waitKey(0);
  return 0;
}

时间: 2024-10-06 22:07:12

Lab颜色空间进行颜色提取 及其实现的相关文章

Lab颜色空间

原文:http://blog.csdn.net/carson2005/article/details/7200440 同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的.1976年,经修改后被正式命名为CIELab.它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统.这也就意味着,它是用数字化的方法来描述人的视觉感应.Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白:a

学习笔记TF015:加载图像、图像格式、图像操作、颜色

TensorFlow支持JPG.PNG图像格式,RGB.RGBA颜色空间.图像用与图像尺寸相同(height*width*chnanel)张量表示.通道表示为包含每个通道颜色数量标量秩1张量.图像所有像素存在磁盘文件,需要被加载到内存. 图像加载与二进制文件相同.图像需要解码.输入生成器(tf.train.string_input_producer)找到所需文件,加载到队列.tf.WholeFileReader加载完整图像文件到内存,WholeFileReader.read读取图像,tf.ima

利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码

要想提取车牌号,首先你要定位车牌区域嘛,本文分别两种方法用,即颜色和形态学的方法,对车牌区域进行判定.说得是两种方法,其实两种方法并无多大的区别,只是有一步的判断标准不一样而已,你看了下面整理出的的思路就知道两者的区别真的很小了. 方法一:利用颜色提取车牌区域的思路: ①求得原图像的sobel边缘sobelMat ②在HSV空间内利用车牌颜色阈值对图像进行二值化处理,得到图像bw_blue→ ③由下面的判别标准得到图像bw_blue_edge for (int k = 1; k != heigh

Quartz2D 编程指南(一)概览、图形上下文、路径、颜色与颜色空间

概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 0.说明 本篇博客主要是对官方文档的总结与补充.翻译部分参考了南峰子的博客.你可以在参考资料中查看. 1.概览 简介 Quartz2D 是二维图形绘制引擎,支持 iOS 和 OS X. Page Quartz2D 在图像中使用了绘画者模型.在绘画者模型中,每个连续的绘制操作都是将一个绘制层放置于一个画布,我们通常称这个画布为 Pag

Quartz 2D编程指南(4) - 颜色和颜色空间

不同的设备(显示器.打印机.扫描仪.摄像头)处理颜色的方式是不同的.每种设备都有其所能支持的颜色值范围.一种设备能支持的颜色可能在其它设备中无法支持.为了有效的使用颜色及理解Quartz 2D中用于颜色及颜色空间的函数,我们需要熟悉在Color Management Overview文档中所使用的术语.该文档中讨论了色觉.颜色值.设备依赖及设备颜色空间.颜色匹配问题.再现意图(rendering intent).颜色管理模块和ColorSync.在本章中,我们将学习Quartz处理颜色和颜色空间

基于RGB颜色模型的图像提取与二值化

现实中我们要处理的往往是RGB彩色图像.对其主要通过HSI转换.分量色差等技术来提出目标. RGB分量灰度化: RGB可以分为R.G.B三分量.当R=G=B即为灰度图像,很多时候为了方便,会直接利用某个分量来进行灰度化,如下图所示: 上图中R分量下红色部分明显比其他两幅更偏白:同样地G分量草地较淡,B分量天空较淡.其他部分如灰黑色马路则相差不多.实际中,我们可以根据 需求有选择地选择分量. RGB分量差灰度化: 有时候我们的要求是从图像中提取某种颜色区域,那么最简单的方法就是采用RGB色差. 例

超简单的视频对象提取程序

视频对象提取 与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测. HSV介绍 HSV分别代表,色调(H:hue),饱和度(S:saturation),亮度(V:value),由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model): 色调(H:hue):用角度度量,取值范围为0°-360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°.它们的补色是:黄色为60°,青色为180

RGB和HSV颜色空间

转载:http://blog.csdn.net/carson2005/article/details/6243892 RGB颜色空间: RGB(red,green,blue)颜色空间最常用的用途就是显示器系统(计算机.电视机等都是采用RGB颜色空间来进行图像显示).一般来说,电脑,电视机等是利用三个电子枪分别发射R分量,G分量,B分量的电子束,以此来激发屏幕上的RGB三种颜色的荧光粉,从而发出不同颜色.不同亮度的像素.进而组成了一幅图像:很明显,RGB颜色空间利用了物理学中的三原色叠加从而组成产

RGB、CMY、HSV、HSL颜色空间

1.颜色空间(又称彩色模型.色彩空间. 彩色系统等)是对色彩的一种描述方式,定义有很多种,区别在于面向不同的应用背景. 颜色空间的应用背景: 显示器中采用的RGB颜色空间是基于物体发光定义的(RGB对应光的三原色:Red,Green,Blue): 工业印刷中常用的CMY颜色空间是基于光反射定义的(CMY对应了绘画中的三原色:Cyan,Magenta,Yellow): HSV.HSL两个颜色空间都是从人视觉的直观反映而提出来的(H是色调,S是饱和度,I是强度). 2.RGB颜色空间 基于颜色的加法