雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色( 三 )


本文插图
打开源图像位置 , 选择帧缓冲区
雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色
本文插图
调整LAB阕值 , 主要是在二进制图像栏 , 白色像素是被跟踪的像素
雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色
本文插图
彻底搞懂Lab 颜色空间
名称
在开始之前 , 先明确一下Lab颜色空间(Lab color space)的名字:

  • Lab的全称是CIELAB , 有时候也写成CIE Lab*
  • 这里的CIE代表International Commission on Illumination(国际照明委员会) , 它是一个关于光照、颜色等的国际权威组织 。
通道
Lab是由一个亮度通道(channel)和两个颜色通道组成的 。 在Lab颜色空间中 , 每个颜色用L、a、b三个数字表示 , 各个分量的含义是这样的:
  • L*代表亮度
  • a*代表从绿色到红色的分量
  • b*代表从蓝色到黄色的分量
Perceptual uniform
Lab是基于人对颜色的感觉来设计的 , 更具体地说 , 它是感知均匀(perceptual uniform)的 。 Perceptual uniform的意思是 , 如果数字(即前面提到的L、a、b这三个数)变化的幅度一样 , 那么它给人带来视觉上的变化幅度也差不多 。 Lab相较于RGB与CMYK等颜色空间更符合人类视觉 , 也更容易调整:想要调节亮度(不考虑Helmholtz–Kohlrausch effect , 见下注)就调节L通道 , 想要调节只色彩平衡就分别调a和b 。
注:Helmholtz–Kohlrausch effect是人眼的一种错觉——当色彩饱和度高时 , 颜色会看起来更亮 。
设备无关
Lab有个很好的特性——设备无关(device-independent) 。 也就是说 , 在给定了颜色空间白点(white point)(下图中表示了一种颜色空间的白点)之后 , 这个颜色空间就能明确地确定各个颜色是如何被创建和显示的 , 与使用的显示介质没有关系 。需要注意的是 , Lab定义的是相对于白点的颜色 , 只有定义完白点是什么颜色(比如定义为CIE standard illuminant D50) , 我们才能知道其他的颜色 。
数值范围
理论上说 , L、a、b*都是实数 , 不过实际一般限定在一个整数范围内:
  • L越大 , 亮度越高 。 L为0时代表黑色 , 为100时代表白色 。
  • a和b为0时都代表灰色 。
  • a*从负数变到正数 , 对应颜色从绿色变到红色 。
  • b*从负数变到正数 , 对应颜色从蓝色变到黄色 。
  • 我们在实际应用中常常将颜色通道的范围-100~+100或-128127之间 。
可视化
可以看到 , Lab*一共有三个分量 , 因此可以在三维空间中呈现 。在二维空间中 , 常用chromaticity diagram来可视化它 , 也就是固定亮度L , 看a和b的变化 。 注意 , 这些可视化不是精确的 , 只是能帮助人理解 。
雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色
本文插图

雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色
本文插图
LAB颜色模型
是根据Commission International Eclairage(CIE)在1931年所制定的一种测定颜色的国际标准建立的 。 于1976年被改进 , 并且命名的一种色彩模式 。 Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足 。 它是一种设备无关的颜色模型 , 也是一种基于生理特征的颜色模型 。Lab颜色模型由三个要素组成 , 一个要素是亮度(L) , a 和b是两个颜色通道 。 a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值) 。 因此 , 这种颜色混合后将产生具有明亮效果的色彩 。


推荐阅读