前言
在
3-1这个章节,我们要来谈谈彩色图像,还有如何使用labview中所提供的Vision色彩工具来解析彩色图像,基本上我们可以说彩色图像中的每一个像素都是由RGB三原色所组成,这应该是大家比较熟知的,用比较专业的说发,我们会称其为RGB色彩空间,如果我们想要从彩色图像中找出一个完美的红色,那我们可以找找看哪一个像素里面的RGB三原色分别是255、0、0,但是如果我们要找的红色不是那么完美的红色,那我们该怎么办?如果我们想要从彩色图像中找出来的是黄色,那我们该怎么办?有没有其他的色彩空间定义,可以让我们更清楚地去定义我们要的颜色?我们要如何去定义我们要找的颜色?我们要如何从彩色图像中区分出不同的颜色?要使用LabVIEW得到上述问题的答案该怎么做?在第三章中,你将会得到这些答案。
3-1-2 色彩空间
在前一小节中我们提到彩色图像可以解析为RGB三原色,但其实彩色图像还可以解析为其他的组成方式,为什么色彩会有RGB以外的组成方式呢?因为不同的解析方式,可以让色彩在不同领域中被应用的更恰当,譬如印刷业所使用的CMY(K),以下我们介绍几种LabVIEW Vision的色彩解析工具所能处理的色彩组成方式:
· RGB:将色彩解析成红色(R)、绿色(G)和蓝色(B)。
· HSL:将色彩解析为色相(H)、饱和度(S)和亮度(L)
· HSV:将色彩解析为色相(H)、饱和度(S)和明度(V)
· HSI:将色彩解析为色相(H)、饱和度(S)和亮度(I)
除了上述提到的四种色彩组成方式外,其他还有CIE、CMY(K)和YIQ等等各种应用在不同领域的色彩组成方式,有兴趣的朋友可以上维基百科看看说明,因为LabVIEW Vision工具并没有对其它的色彩空间去做解析,故作者在此则不多加着墨,下面我们开始来谈谈上述提到的四种色彩组成方式。
RGB是最常见的色彩组成方式,同时也是人眼解析色彩的方式,顾名思义RGB是将色彩解析成红色(R)、绿色(G)和蓝色(B),即所有的颜色都是由这三种颜色依照不同的比例调配而来。其色彩空间示意如下图3-1所示。
图3-1 RGB色彩空间
HSL、HSV和HSI都是做影像处理常用的色彩空间,HSL将色彩解析为色相(H)、饱和度(S)和亮度(L)。色相(H)是指色彩的基本属性,就是平常所说的颜色名称,譬如红色、黄色等等;饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰;亮度(L)是指颜色的相对明暗度,通常以0%到100%的百分比来衡量,而在LabVIEW的Vision工具之中,H, S, L这三个数值定义的范围都是0~255。HSV和HSI所定义的H和S和HSL是一样的,而L(亮度)、V(明度)、I(亮度)在字面上的定义看似一样,实则不同,我们看了下面图3-2的HSL、HSV色彩空间比较图和图3-3的HSI色彩空间图就会比较清楚了。
图3-2 HSL和HSV色彩空间比较图
图3-3 HSI色彩空间图
另外就作者所知,我们也可以使用
alpha去对颜色做定义,每一个alpha值所代表的颜色是唯一的,但LabVIEW的Vision工具中并没有可以直接提供解析alpha值的function,故作者在此就不再加以赘述,有兴趣的朋友可以上网去找找看,如何得到alpha值,还有其相关的应用。
3-1-3 实作LabVIEW中之Vision的色彩解析工具
相信经过了前面小节的说明,大家已经了解什么是色彩空间,而彩色图像又是如何构成的了,接下来作者就来介绍这一章的重头戏,LabVIEW中的色彩解析工具,如下图3-4所示。
图3-4 Color Utilities
今天第一个要介绍的工具是IMAQ ExtractColorPlanes,如下图3-5所示。它的功能是把一张彩色图像依据我们想要解析的方式,将其拆解为三张灰阶图像,每一个灰阶图像分别代表RGB(HSL, HSV, HSI)中的R(H), G(S)和B(L, V, I),每一个像素的灰阶值为0~255。
图3-5 IMAQ ExtractColorPlanes function
先说明一下它的使用方式,它的使用方式很简单,首先要将我们的彩色图像接在Image Src上面,再来选择我们要解析彩色图像的方式,LabVIEW所提供的这个function有四种Color Mode,就是我在前一节所介绍到的RGB、HSL、HSV和HSI,接着再接上自行创建的三个灰阶(8bits)的影像空间,做为输出结果存放的地方,这样大致上就完成了,完成的程序码如下图3-6所示,程序执行的结果如下图3-7所示。在图3-7中我们可以看到右上角那张为色相的灰阶解析图,我们可以看到原图中黄色的部分,在这张图里表现出来的灰阶值都是差不多的,因为他们几乎是属于相同的色相,就是平常我们口中的黄色;左下角那张为饱和度的灰阶解析图,我们可以看到原图中越纯的颜色,表现出来的灰阶值越高;右下角那张为亮度的灰阶解析图,我们可以看到原图中亮度较高的部分,在这张灰阶解析图中所表现出来的灰阶值越高。
图3-6 IMAQ ExtractColorPlanes Example Block Diagram
图3-7 IMAQ ExtractColorPlanes Example Result
刚才前面介绍的是使用IMAQ ExtractColorPlanes function直接将彩色图像解析成三个灰阶图像,接下来作者要介绍的是直接把彩色图像的RGB、HSL、HSV或HSI值个别解析出来,下面介绍两个function,IMAQ ColorImageToArray和IMAQ IntegerToColorValue,如下图3-8和图3-9所示。IMAQ ColorImageToArray这个function可以将一张彩色的图像解析成一个2D(U32)的Array;IMAQ IntegerToColorValue这个function可以将前面IMAQ ColorImageToArray function解析出来的2D(U32)的Array再解析为我们所选择的色彩空间(RGB、HSL、HSV或HSI值),完成的范例程序码如下图3-10所示,程序执行的结果如下图3-11所示。再结果画面中,我们可以看到我们一开始输入的彩色图像,其中的每一个像素都已经被解析成HSL的数值了,有没有觉得这个功能很棒啊?作者我觉得这个功能还满方便的,我还满喜欢的。
图3-8 IMAQ ColorImageToArray function
图3-9 IMAQ ImageToColorValue function
图3-10 Color Image to Color Value Example Block Diagram
图3-11 Color Image to Color Value Example Result
另外再特别介绍两个function,IMAQ ColorToRGB(下图3-12)这个function可以将其他影像空间的值转换成RGB的值;IMAQ ImageToColorValue(下图3-13)这个function则可以将RGB的值转换为其他影像空间的值。
图3-12 IMAQ ColorToRGB function
图3-13 IMAQ ImageToColorValue function
结语
这一章讲述到这里,相信各位对彩色图像的组成已经有了一定的认识,同时也已经有能力对彩色图像去做解析了,这一章节的最后,在这边再补充一些作者平常在做图像色彩解析的经验谈。
根据经验,通常在做图像色彩解析的时候,RGB通常不会比前述提到的其他三种色彩空间要来得好用,因为我们比较常有的应用象是:这个颜色是不是我们要的颜色?譬如检测这个黄色是不是我们要的黄色时,通常作者我会使用HSL去做解析,先就色相(H)的部分去定义出黄色的范围,即什么是黄色,接着再来去定义饱和度(S)和亮度(L)的范围,即我们要的是怎样的黄色,最后就透过前面小节所提到的LabVIEW之中的色彩解析工具去做处理,这是比较常使用的方式。至于在做影像解析的时候到底HSL、HSV和HSI要选择哪一个比较好呢?我这边其实也没有标准答案,在这里只能给各位一个很笼统的回答:只要能够成功达成需求,那就是你要的答案。
其实LabVIEW之中还有许多关于彩色影像处理的工具,譬如彩色二值化(Color Threshold)和彩色图像配对(Color Pattern Matching),他们也都是在彩色影像处理中会常常用到的功能。
7