图像色彩空间与应用转换

news/2024/7/5 5:35:36

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达引言

重新写了一下图像色彩空间相关的知识,希望给大家多一点背景多点了解,不说别的,看完了肯定会涨知识。

RGB色彩空间

图像处理最基础的知识点之一就是图像色彩跟颜色模型,对计算机来说表示一张图

像,只是一些零壹的二进制值,但是对人眼来说看到的都是一些可见光,而且人眼只对三种可见光比较敏感,分别是红色(red)、绿色(green)、蓝色(blue)。这个就是最基本的RGB颜色模型,三种颜色的波长范围表示如下:

4cb31914e4e7ed491543ba375d5202f9.png

Blue: 450–495 nm
Green: 495–570 nm
Yellow: 570–590 nm

针对人眼对颜色这个物理现象的生物感知表达模型,国际照明协会在1931年发布了一个颜色模型/色彩空间,表示如下:

c7dbda12ce0fa132e784bd608c33157b.png

因此就出现了对应颜色模型的色彩空间CIE XYZ模型,对于的表示色度跟亮度表示,图示如下:

d1e82335879719bbd27f0073cc5001fc.png

从这个上面看不到Z,其实Z是表示颜色得亮度,或者深度,所以CIE XYZ颜色模型的这个图又被称为CIE 色度图。CIE XYZ颜色模型表示的范围比较大,所以后来微软跟惠普就提出了一个它的子集的颜色模型sRGB色彩空间,其中S是英文单词标准的首字母,sRGB色彩空间的表示如下:

fb84498443b0a41d8c8c21c564ccb46b.png

上面的黑色三角形区域就称为sRGB色彩空间,被广泛应用在个人电脑显示器、打印机、数码相机中,占据了大量市场份额、到了90年代的时候Adobe公司提出了一个新RGB色彩空间模型Adobe RGB色彩空间,它比sRGB色彩空间有更大的取值范围,因此色彩更加细腻更加丰富,它的色彩空间图示如下:

08d376c1a2e2f3d57182f7e172ddddb4.png

从图中可以看成Adobe RGB色彩空间是比sRGB色彩空间大的,但是这个也有缺陷,就是不同色彩空间生成的彩色图像,在不同的设备上显示或者浏览会出现色差,为了解决这个问题,需要对不同色彩空间之间建立转换模型,实现不同色彩空间模型的转。后来RGB色彩空间就被大家玩坏了,现在常用的RGB色彩空间如下:

9b9cb0da9369e4f9fa8dede0bbd4409d.png

其中值得关注的部分是sRGB跟CMYK之间的相互转换,这个转换之后会导致很明显的色彩差异,原因在于CMYK色彩空间又一部分不在sRGB内部,所以这种情况下,需要对RGB色彩空间进行非线性变换,获得颜色补偿。原因在于多数商业打印机都是基于四色(Cyan, Yellow, Magenta and Black),无法打印一些sRGB范围的颜色,所以必须进行非线性变换跟补偿。这个其中最常见的就是Gamma校正。

非RGB色彩

RGB色彩空间比较丰富,但是它也是有缺点的,最大的缺点就是无法直观的区分图像颜色、亮度、饱和度等值。所以我们需要一些更加直观的图像色彩空间,排在第一位的就是HSV色彩空间,它直观,容易理解,因此在图像处理非常有用。

HSV色彩空间

RGB立方图色彩空间无法很好区分颜色与亮度的关系,要单独调整颜色或者亮度不是很方便,这个时候HSV色彩空间是一个很好的选择,它对颜色与亮度有着很好的区分度,HSV色彩空间图示如下:

c4f5aa6b10bc8df387821acadd581b87.png

解释如下:

  • H(Hue) 表示颜色通道,不同的值表示不同的颜色范围

  • S表示饱和度通道,表示色泽

  • V表示亮度通道,代表图像亮度高低级别

在H、S、V通道上对图像亮度跟颜色或者饱和度的调整就非常方便了,另外对一些特定的颜色值进行分离也比较方便了。

YCrCb色彩空间

YCrCb色彩空间被开发作为当时的数字分量视频的标准,它跟YUV色彩空间有着一定相似性,它的三个通道的取值范围分别被定义为:

  • Y通道:16~235

  • Cr通道:16~240

  • Cb通道:16~240

需要特别注意的是,RGB到YCrCb的色彩空间转换时候,不同的YCrCb色彩空间标准会有不同,下面标清电视跟高清电视上YCrCb的色彩差异:

bc7c04b6d5c2cd7604c3983fc8b7cfc2.png

很显然它们的转换公式也会有所不同,所以千万不用看到不同转换公式就大惊小怪的!

LAB色彩空间

LAB色彩空间又名CIE Lab / LAB,它的图示如下:

ee57098870ada58ff51d608809bb2afa.png

其中:

  • L通道表示亮度值

  • A通道表示红色/绿色值

  • B通道表示蓝色/黄色值

在LAB色彩空间,L表示亮度分量、AB表示颜色通道,所以有时候LAB色彩空间处理图像也会必RGB色彩空间好用,会有意想不到的好结果。

OpenCV实现

OpenCV色彩空间相互转换与操作的函数主要有两个,其中支持色彩空间转换的函数为:

void cv::cvtColor(
InputArray src,
OutputArray dst,
int   code,
int   dstCn = 0
)

参数解释如下

  • src 表示输入图像

  • dst 表示输出图像

  • code 表示空间转换代码,支持常见的各种色彩空间转换

从色彩空间中提取不同色颜色值函数:

void cv::inRange(
InputArray src,
InputArray      lowerb,
InputArray      upperb,
OutputArray   dst
)

参数解释如下:

  • src是输入图像

  • lowerb是取值范围最小值

  • upperb是取值范围最大值

  • dst是输出的mask图像,二值的

一个例子,绿色背景对象上前景对象提取,先看一下效果:

1873c9fc929e944e39d685065906c2c3.png

相关代码如下:

1#include <opencv2/opencv.hpp>2#include <iostream>34using namespace cv;5using namespace std;67int main(int argc, const char *argv[])8{9    Mat src = imread("D:/vcprojects/images/cat.jpg");
10    if (src.empty()) {
11        printf("could not load image...\n");
12        return -1;
13    }
14    namedWindow("input", WINDOW_AUTOSIZE);
15    imshow("input", src);
16
17    // RGB to HSV
18    Mat hsv;
19    cvtColor(src, hsv, COLOR_BGR2HSV);
20    imshow("hsv", hsv);
21
22    // RGB to YUV
23    Mat yuv;
24    cvtColor(src, yuv, COLOR_BGR2YUV);
25    imshow("yuv", yuv);
26
27    // RGB to YUV
28    Mat ycrcb;
29    cvtColor(src, ycrcb, COLOR_BGR2YCrCb);
30    imshow("ycrcb", ycrcb);
31
32    Mat src2 = imread("D:/javaopencv/tinygreen.png");
33    imshow("src2", src2);
34    cvtColor(src2, hsv, COLOR_BGR2HSV);
35    Mat mask;
36    inRange(hsv, Scalar(35, 43, 46), Scalar(99, 255, 255), mask);
37    imshow("mask", mask);
38
39    waitKey(0);
40    return 0;
41}

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

59f7075f2fce71afb6039927089766a4.png

0fa37646a83474f09bb97d5b77ffdd88.png


http://lihuaxi.xjx100.cn/news/273140.html

相关文章

普通域账号客户端计算无关机选项

组策略-》计算机配置-》安全设置-》本地策略-》用户权限分配-》关闭系统把DOMIAN USERS 组加进去我是在Default Domain Policy 里面加的转载于:https://blog.51cto.com/zhangjunjie/219613

搞懂Transformer结构,看这篇PyTorch实现就够了

作者丨Alexander Rush来源丨哈工大SCIR编辑丨极市平台下面分享一篇实验室翻译的来自哈佛大学一篇关于Transformer的详细博文。"Attention is All You Need"[1] 一文中提出的Transformer网络结构最近引起了很多人的关注。Transformer不仅能够明显地提升翻译质量&#…

Git从入门到放不下

点击上方“方志朋”&#xff0c;选择“设为星标”回复”666“获取新整理的面试文章作者&#xff1a;gafishhttps://github.com/gafish/gafish.github.comGit简介Git 是一种分布式版本控制系统&#xff0c;它可以不受网络连接的限制&#xff0c;加上其它众多优点&#xff0c;目前…

初学python的30个操作难点汇总(入门篇)希望对你有帮助

初学Python的人总会遇到这样或者那样的问题&#xff0c;在我学习Python的这段时间我总结了自己的29个问题&#xff0c;具体如下&#xff1a; 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹&#xff0c…

tornado+nginx上传视频文件

[http://arloz.me/tornado/2014/06/27/uploadvideotornado.html] [NGINX REFRER: Nginx upload module] 由于tornado通过表达上传的数据最大限制在100M&#xff0c;所以如果需要上传视屏文件的情况在需要通过其他方式实现&#xff0c; 此处采用nginx的nginx-upload-module和jQu…

MySQL性能与磁盘读写的关系及优化策略

作者&#xff1a;kider出处&#xff1a;MySQLpub.com转贴请表明作者和出处并不能用于商业目的。这些天&#xff0c;对一个场地服务器慢的情况&#xff0c;进行了监控跟踪&#xff0c;也得出一些好的结论。现在记录一些过程&#xff0c;列出可以供参考的部分&#xff0c;同时有一…

语义分割标注工具Semantic Segmentation Editor 快速安装指南

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达简介Semantic-Segmentation-Editor是由日立汽车工业实验室&#xff08;Hitachi Automotive And Industry Lab&#xff09;开源的基于Web的语义对象标注编辑器&#xff08;…

Java之戳中痛点之 synchronized 深度解析

点击上方“方志朋”&#xff0c;选择“设为星标”回复”666“获取新整理的面试文章作者&#xff1a;Json_wangqiangcnblogs.com/JsonShare/p/11433302.html概览&#xff1a;简介&#xff1a;作用、地位、不控制并发的影响用法&#xff1a;对象锁和类锁多线程访问同步方法的7种情…