学习
实践
活动
工具
TVP
写文章
专栏首页灿视学长面经|2. 面试官:“除了RGB,你还知道哪些颜色通道?”

面经|2. 面试官:“除了RGB,你还知道哪些颜色通道?”

百面AI,致力构建起最强AI算法面经!欢迎关注我们!

1.使用颜色空间进行空间变换的项目

在我所做的一些项目中,目前使用颜色空间变换的比较少,目前就是看pix2pix-tensorflow中使用过,直接上图:

项目中使用了Lab空间变换来学习A->B图像的映射。在测试的时候,同样是使用了Lab变换,将生成的图来进行前向预测,再将输出结果转换成RGB图像。

当然,后面要是看到了其它项目使用到的话,我这边再进行补充!

2. 相关颜色空间

2. 1. RGB

RGB 是我们接触最多的颜色空间,由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝色(B)三个通道。这

三种颜色的不同组合可以形成几乎所有的其他颜色。RGB 颜色空间是图像处理中最基本、最常用、面向硬件的颜色空间。

RGB 颜色空间利用三个颜色分量的线性组合来表示颜色,任何颜色都与这三个分量有关,而且这三个分量是高度相关的,所以连续变换颜色时并不直观,想对图像的颜色进行调整需要更改这三个分量才行。

但是,人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,所以 RGB 颜色空间是一种均匀性较差的颜色空间。如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的三个分量数值来表示。

所以,RGB 颜色空间适合于显示系统,却并不适合于图像处理。

2.2 CMY/CMYK颜色空间

CMY是工业印刷采用的颜色空间。它与RGB对应。简单的类比RGB来源于是物体发光,而CMY是依据反射光得到的。具体应用如打印机:一般采用四色墨盒,即CMY加黑色墨盒。

2.3 HSV颜色空间

由于上述的原因,在实际图像处理中,我们使用更多的是HSV颜色空间,因为它可以比RGB更接近人们对彩色的感知经验。

其中,HSV主要是由表达彩色图像的三个部分组成:

  • Hue,色相、色调
  • Saturation:饱和度
  • Value,明度

其中用一张图可以表明H、S、V三者之间的关系:

img

  • H用极坐标的极角表示
  • S用极坐标的极轴长度表示
  • V用圆柱中轴的高度表示 其中,Hue是用角度度量,取值范围为0~
360^{\circ}

,表示所处的光谱颜色的位置。Hue=0表示红色,Hue=120表示绿色,Hue=240表示蓝色,等等。 Saturation是饱和度,其表示颜色接近光谱色的程度。其中,饱和度越高,表明颜色就越深。饱和度为0考试为纯色,取值范围为0~1,值越大,表示颜色越饱和。 Value表明了颜色空间中颜色的阴暗程度,明度越高,表示颜色越亮,范围为0~1,0为纯黑色。

2.4 HLS颜色空间

HLS 和 HSV 比较类似,这里一起介绍。HLS 也有三个分量,hue(色相)、saturation(饱和度)、lightness(亮度)。

HLS 中的 L 分量为亮度,亮度为100,表示白色,亮度为0,表示黑色。其中,S与L与HSV中保持一致。

2.5 YUV/YCbCr颜色空间

YUV是通过亮度-色差来描述颜色的颜色空间。亮度信号经常被称作Y,色度信号是由两个互相独立的信号组成。视颜色系统和格式不同,两种色度信号经常被称作UV或PbPr或CbCr。这些都是由不同的编码格式所产生的,但是实际上,他们的概念基本相同。在DVD中,色度信号被存储成Cb和Cr(C代表颜色,b代表蓝色,r代表红色)。

2.6 Lab颜色空间

Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。Lab是由一个亮度通道(channel)和两个颜色通道组成的。在Lab颜色空间中,每个颜色用L、a、b三个数字表示,各个分量的含义是这样的:

  • L代表明度,取值0~100
  • a代表从绿色到红色的分量 ,取值-128~127
  • b代表从蓝色到黄色的分量,取值-128~127

2.7 LUV颜色空间

LUV通常是指一种颜色空间标准,目的是建立与视觉统一的颜色空间,因为人类眼睛有响应不同波长范围的三种类型的颜色传感器,所有可视颜色的完整绘图是三维的。但是颜色的概念可以分为两部分:明度和色度。

LUV的存在三个分量,L是亮度,u和v是色度坐标。对于一般的图像,u和v的取值范围为-100到+100,亮度为0到100。

2.8 代码举例

import matplotlib.pyplot as plt
import cv2
 
canshi_BGR = cv2.imread("./canshi.png")
 
# show BGR canshi
plt.subplot(3, 3, 1)
plt.imshow(canshi_BGR)
plt.axis('off')
plt.title('canshi_BGR')
 
# BGR to RGB
canshi_RGB = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2RGB)
plt.subplot(3, 3, 2)
plt.imshow(canshi_RGB)
plt.axis('off')
plt.title('canshi_RGB')
 
# BGR to GRAY
canshi_GRAY = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2GRAY)
plt.subplot(3, 3, 3)
plt.imshow(canshi_GRAY)
plt.axis('off')
plt.title('canshi_GRAY')
 
 
# BGR to YCrCb
canshi_YCrCb = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2YCrCb)
plt.subplot(3, 3, 4)
plt.imshow(canshi_YCrCb)
plt.axis('off')
plt.title('canshi_YCrCb')
 
# BGR to HSV
canshi_HSV = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2HSV)
plt.subplot(3, 3, 5)
plt.imshow(canshi_HSV)
plt.axis('off')
plt.title('canshi_HSV')
 
# BGR to HLS
canshi_HLS = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2HLS)
plt.subplot(3, 3, 6)
plt.imshow(canshi_HLS)
plt.axis('off')
plt.title('canshi_HLS')
 
# BGR to CIE L*a*b
canshi_Lab = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2Lab)
plt.subplot(3, 3, 7)
plt.imshow(canshi_Lab)
plt.axis('off')
plt.title('canshi_Lab')
 
# BGR to CIE L*u*v
canshi_Luv = cv2.cvtColor(canshi_BGR, cv2.COLOR_BGR2Luv)
plt.subplot(3, 3, 8)
plt.imshow(canshi_Luv)
plt.axis('off')
plt.title('canshi_Luv')
 
plt.show()

2.9 转换的具体公式(看了也记不住,整理在这,感兴趣的看看就好!反正我直接查API了)

2.9.1 RGB与灰度图之间的转换

  • RGB -> GRAY
  • Gray -> RGB

2.9.2 RGB与YCrCb之间的转换

  • RGB -> YCrCb
  • YCrCb -> RGB

2.9.3 RGB转HSV

  • RGB -> HSV
  • HSV -> RGB

2.9.4 RGB与HLS转换

  • RGB -> HLS
  • HLS -> RGB

2.9.5 RGB与Lab转换

  • RGB转Lab RGB无法直接转换成Lab,需要先转换成XYZ再转换成Lab,即:RGB—>XYZ—>Lab。 1.首先是RGB转XYZ:

则:

其中:

等价于

2.其次是XYZ转Lab

上面两个公式中,

L^{\star}

a^{\star}

b^{\star}

是最终的LAB色彩空间三个通道的值。X,Y,Z是RGB转XYZ后计算出来的值,

X_{n}

Y_{n}

Y_{n}

一般默认是1,1,1

  • Lab转RGB 同样,需要Lab -> XYZ ->RGB. 1.Lab -> XYZ

其中,

3. 小结

传统图像处理关于颜色空间部分,基本上了解下,毕竟现在深度学习时代,基本上很多都只知道RGB~但是,我们是专业的AI从业人员,专业的CV工程师。

4. 往期干货


关于我

你好,我是灿视。目前我正致力于做出最强的AI算法面经。如果你从业算法,或者打算从业算法,可以关注我们哦!

文章分享自微信公众号:
灿视学长

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:灿视
原始发表时间:2021-04-13
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 五月过后,你一定要紧张起来了!

    五月份过后,从六月份开始,就要开始着手准备找工作了。假期不仅可以放松,更多的是可以给我们思考的时间。

    灿视学长
  • Softmax与Sigmoid你还不知道存在这些联系?

    之间,我们通常把它拿来作为一个二分类的方案。其输出范围有限,可以用作输出层,优化稳定。

    灿视学长
  • 阿里视频一面Java面经,回馈牛客(目测已凉)

    最近抽奖拿了牛客的T-shit,马克杯,电风扇,于是乎决定写篇新鲜的面经哈哈哈,各位有面经也都不要吝啬啊!

    牛客网
  • 我丢!算法岗必问!建议收藏!

    ps:5月8日,灿视学长粉丝群有抽奖与送书哦!具体可以查看下图。欢迎加我微信,进群参加活动哦!

    灿视学长
  • 没文章,没背景,想做CV?那就按这个干!

    在我开始做号的这半个多月的时间里,有一些同学也添加了我为好友,跟我分享了一些ta们现在的困惑,其中有个问题比较普遍,概括来说就是“我要怎么学CV,以后才能找到工...

    灿视学长
  • 4面揽下美团offer-幸运不止一点点

    获取往期以上更多最新面试题资料,直接转发一下这篇文章+关注公众号【Java烂猪皮】关注后回复【666】即可获取哦~

    烂猪皮
  • 腾讯暑假实习产品策划正式批面经

    在下是上海五角场某财经类专科女子学院,性别男,爱好女。有过两段创业经历,后面实习经历没有产品相关,都是咨询。

    牛客网
  • java程序员|超详细面经(四面一总结),助你逆袭!

    面经不同的人问的问题很可能不同,不能押宝在这里,不过帮助大家用来做模拟还是不错的~以下按收到offer顺序列出

    Java架构技术
  • 秋招结束,一波干货面经分享。

    秋招陆陆续续大概进行了一个月,目前基本结束了,拿到的offer有腾讯、阿里和网易,小弟在这分享一波感想,回馈牛客。

    牛客网
  • 最全Normalization!建议收藏,面试必问!

    进行归一化,从而保证数据分布的一致性,而判别模型的结果正是取决于数据整体分布。但是

    灿视学长
  • 2014.4 阿里实习生招聘面试经历

      原文  http://blog.csdn.net/don_lvsml/article/details/24586091

    bear_fish
  • 二本本科无实习上岸滴滴京东58科大讯飞复盘(上)

    秋招之路复盘篇 楼主的自我介绍: 我自己复习范围:(关注公众号回复 "面试脑图" 获取面试脑图,因为图片很大) 我的项目很 low 怎么办??...

    Java宝典
  • JAVA程序员怎么样才能进一线互联网公司

    2.做过哪些项目?项目中遇到哪些难点,你是怎样解决的?单点登录系统说一下?分布式缓存的使用场景?(说好的基础呢,上来就是项目,毫无准备,导致好多东西都记不起来了...

    美的让人心动
  • 京东技术研发产品经理面经~

    四月中旬接到电话、邮箱和短信通知去成都面试,经历过腾讯和阿里的面试打击之后,我其实已经佛系求职了。那天初试时间是14:00,我13:30才到成都东,不过也很庆幸...

    牛客网
  • 蘑菇街、华为、携程面经

    昨天面试了3场,分别是蘑菇街、华为、携程,今天趁着还有点印象,整理一下面经,回馈牛友们 一.蘑菇街 蘑菇街没有走内推,官网投递的,预约的是中午12点电话面试,面...

    牛客网
  • BAT面经

    因为也许我当时因为要实现梦想只有一条途径,可如果你选择了一条路,这并不意味着你要放弃其他的方式。——《跳出我天地》

    牛客网
  • 百度阿里头条算法面经

    最近秋招很多消息和内推都是通过牛客获得的,回馈一下发一波面经,希望能帮到大家~ 楼主华五本科海外硕士,一份美国大厂数据挖掘实习,没有相关领域的paper,投的都...

    牛客网
  • 热乎乎的计算机视觉岗实习面经请您查收~~

    面试官人比较友好,自己项目细节一定要熟悉,简历上的东西最好清楚掌握,数据结构和常用算法一定要掌握,这是我的第一个面试经历,不管接下来的面试能否通过,都还是值得纪...

    石晓文

扫码关注腾讯云开发者

领取腾讯云代金券