5028| 3
|
[官方教程] Maixduino系列实验(15)---零基础学MaixPy之识别颜色 |
Maixduino系列实验(15)---零基础学MaixPy之识别颜色早上用百度搜了一下“颜色识别”,多少有了一点大致的概念,还是老办法,动手做,多实验,往前走,还请各位老师多多指点。 OpenCV(百度百科) OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 为Intel® Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的 IPP 库,OpenCV 将在运行时自动加载这些库。 (注:OpenCV 2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口) OpenCV概述其全称是Open source Computer Vision Library,开放源代码计算机视觉库。也就是说,它是一套关于计算机视觉的开放源代码的API函数库。这也就意味着: 一个典型的计算机视觉算法,应该包含以下一些步骤: 基于OpenCV的颜色识别彩色模型 数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型。而HSV模型更符合人描述和解释颜色的方式,HSV的彩色描述对人来说是自然且非常直观的。 HSV模型 HSV模型中颜色的参数分别是:色调(H:hue),饱和度(S:saturation),亮度(V:value)。由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 色调(H:hue): RGB转成HSV 设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSV 空间中的 (h, s, v) 值 这里的 h ∈ [0, 360)是角度的色相角,而 s, v ∈ [0,1] 是饱和度和亮度。 OpenCV下有个函数可以直接将RGB模型转换为HSV模型,OpenCV中H∈ [0, 180), S ∈ [0, 255], V ∈ [0, 255]。我们知道H分量基本能表示一个物体的颜色,但是S和V的取值也要在一定范围内,因为S代表的是H所表示的那个颜色和白色的混合程度,也就说S越小,颜色越发白,也就是越浅 V代表的是H所表示的那个颜色和黑色的混合程度,也就说V越小,颜色越发黑。大致识别蓝色的取值是 H在100到140,S和V都在90到255之间。 OpenCV颜色识别思路
手头正好有个魔方,有五种颜色,就拿它当识别颜色的实验道具了。 打开MaixPy IDE,选择工具——机器视觉——阕值编辑器 打开源图像位置,选择帧缓冲区 调整LAB阕值,主要是在二进制图像栏,白色像素是被跟踪的像素
是根据Commission International Eclairage(CIE)在1931年所制定的一种测定颜色的国际标准建立的。于1976年被改进,并且命名的一种色彩模式。Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。 Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。 Lab模式既不依赖光线,也不依赖于颜料,它是CIE组织确定的一个理论上包括了人眼可以看见的所有色彩的色彩模式。Lab模式弥补了RGB和CMYK两种色彩模式的不足。同RGB颜色空间相比,Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。 Lab颜色空间比计算机显示器甚至比人类视觉的色域都要大 ,表示为Lab的位图比RGB或CMYK位图获得同样的精度需要要求更多的像素数据。Lab模式所定义的色彩最多,且与光线及设备无关并且处理速度与RGB模式同样快,比CMYK模式快很多。因此,可以放心大胆的在图象编辑中使用Lab模 式。而且,Lab模式在转换成CMYK模式时色彩没有丢失或被替换。因此,最佳避免色彩损失的方法是:应用Lab模式编辑图象,再转换为CMYK模式打印 输出。 彻底搞懂Lab 颜色空间名称在开始之前,先明确一下Lab颜色空间(Lab color space)的名字:
通道Lab是由一个亮度通道(channel)和两个颜色通道组成的。在Lab颜色空间中,每个颜色用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*都是实数,不过实际一般限定在一个整数范围内:
可视化可以看到,Lab*一共有三个分量,因此可以在三维空间中呈现。 在二维空间中,常用chromaticity diagram来可视化它,也就是固定亮度L,看a和b的变化。注意,这些可视化不是精确的,只是能帮助人理解。 **## MicroPython动手做(08)——零基础学MaixPy之识别颜色 实验程序之一:find red blob 动态识别红色块**尝试选择最佳的颜色跟踪阙值,通过滑动条来调节阈值,在二进制图像上红色块高亮(显示白色)。 实测得出的LAB值为:55, 70, 42, 65, 52, 8 **#MicroPython动手做(08)——零基础学MaixPy之识别颜色 实验程序之一:find red blob 动态识别红色块**
做实验的魔方,有5种颜色 运行后可看到框圈和+号,已能准确识别 阴天里窗户前的实验场景 **#MicroPython动手做(08)——零基础学MaixPy之识别颜色 实验程序之二:find green blob 动态识别绿色块**获取绿色的LAB阙值为 0, 88, -42, -6, -9, 13
**## MicroPython动手做(08)——零基础学MaixPy之识别颜色 实验程序之三:find orange blob 动态识别橙色块**获取橙色的LAB阙值为 0, 80, 66, -20, 80, 50(与红色有交集)
蓝色的LAB阙值为 0, 80, -128, 35, -128, -18 黄色的LAB阙值为 88, 95, 0, -44, 93, 48 说明: 蓝色 (0, 80, -128, 35, -128, -18) **## MicroPython动手做(08)——零基础学MaixPy之识别颜色 实验程序之四:识别图片上的红心和花心部分**打开MaixPy IDE,选择工具——机器视觉——阕值编辑器——源图像位置——图像文件(识别电脑上的图片) 细心调整六个滑动条的数值,参考结果见下图二进制图像
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed