与灰度图像相比,彩色图像包含更多的额外信息,利用图像的颜色信息可以简化很多机器视觉中的任务,这些可能是灰度图像无法做到的。还可以利用图像的颜色通道进行目标区域分析,通过图像的颜色空间的转换得到图像的属性信息。更高级一些的,还可以利用颜色信息进行线条或边缘的提取。

一、图像颜色

    图像的颜色能真实的目标真实情况,图像的颜色信息,特别是通道信息,有助于特征的识别。

1.1图像色彩空间

    1.RGB颜色

    RGB是我们最熟悉的一种表示颜色的方式,也就是彩色。彩色图像的每个像素拥有3个通道,各8位,分别表示R(Red,红色)、G (Green,绿色)、B(Blue,蓝色)3个分量,各自的取值范围都为0~255。将这3种分量组合,可以得到更多的颜色表示方式。例如,红色和绿色结合可以产生黄色,红色和蓝色结合产生玫红色,绿色和蓝色结合产生青色。这3种颜色分量也可以用来表示不同等级的灰色。例如,当3个分量都为0时,表示的颜色是黑色;当3个分量都为最大值255时,将得到白色。3个分量的组合,将产生范围为0~255的由深到浅的灰色。

    2.灰度图像

    灰度图像即单通道图像,每个像素的灰度值为0~255,其中0表示全黑,255表示全白。对于显示或者形态学处理等操作来说,灰度图像已经足够满足需求。因此,为了节约计算量并加快处理速度,也会将彩色图像转化为灰度图像进行处理。在Halcon中,可以使用rgbl_to_gray算子或rgb3_to_gray算子将彩色图像转化为灰度图像。

    3. HSV/ HSI

    HSV分别代表色调(Hue)、饱和度(Saturation)、纯度( Value)。HSI则表示色调(Hue)、饱和度(Saturation)、亮度(Intensity)。

    色调H:表示角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

    饱和度S:表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

    明度V:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

    当RGB颜色空间不足以区分检测目标与背景时,可以使用HSV/HSI进行尝试。例如,检测深蓝背景上的浅蓝色目标,可以使用饱和度或者明度进行区分﹔又如,当对RGB通道的图像进行平滑滤波等降噪操作时,图像的颜色分量将发生变化,而如果是在HSI分量上操作则不会有这个问题。

图像处理(4) : 图像颜色_图像处理

 

1.2Bayer图像

    其实大部分工业相机都是利用单个CCD芯片和一个Bayer滤波片来过滤光线的颜色,来得到单通道的图像,用这种方法输出的图像就是Bayer 图像,即每

个像素只有一个颜色分量的图像。如下图所示的处理方式。

图像处理(4) : 图像颜色_halcon_02

    

    如果要将Bayer图像转换为RGB图像,可以使用Halcon中的efa_to_rgb算子进行色彩的转换。cfa_to_rgb算子根据输入图像的Bayer图像类型,通过插值的方式获取RGB 图像。


1.3颜色空间的转换

    在图像处理的过程中,有时仅参考RGB颜色空间无法得到理想的结果,就需要对颜色空间做一些转换。例如,使用HSV或者HSI颜色空间,可以通过色调、饱和度、亮度信息来对图像进行处理。例如,若要识别具体的颜色,可以使用HSV空间中的H分量或者S分量进行判断,又如,若要调整图像的亮度,可以使用HSV空间中的V分量进行调整。

    Halcon颜色空间的快速转换算子如下:

    1. trans_from_rgb算子

    该算子用于将一个RGB 图像转换成任意的颜色空间,该算子有7个主要的参数。参数1~3分别为输入的RGB 3个通道的图像。参数4~6分别为输出的3个通道的图像。参数7为输出图像的颜色空间,可选的有HSV、HIS、YIQ、YUV、CIELab等。

    2. trans_to_rgb算子

    该算子与trans_from_rgb算子的作用正好相反,它用于将任意颜色空间的3个通道图像转换成RGB图像,该算子有7个主要的参数。参数1~3分别为输入的3个通道的图像。参数4~6分别为输出的RGB 3个通道的图像。参数7为输入图像的颜色空间,可选的有HSV、HIS、YIO.YUv、CIELab等。

    3.create_color_trans_lut算子

    该算子的功能是创建一个颜色查找表(Look up Table,LUT),用于将RGB图像转换成另一个颜色空间。颜色查找表是一种预定义的颜色“索引”,可以将256色的RGB值分别进行指定。简言之,就是将原始颜色通过查表的方法赋值为另一种颜色。

    该算子的第1个参数为ColorSpace,表示转换操作的另一种颜色空间。第2个参数为TransDirection,表示转换的方向,如 from rgb或者to rgb。第3个参数为NumBits,表示输入图像的位数,也是输出图像的位数。第4个参数为输出的LUT的句柄。

二、颜色通道处理

    由于彩色图像通常包含不止一个通道,因此检测目标在不同的通道图像中的表现形式也不同。通过访问通道、分解或合并通道,可得到合适的、有助于区分目标的图像。

2.1图像的通道

    图像的通道是图像的组成像素的描述方式。举例来说,如果图像全部由灰色的点组成,只需要用一个灰度值就可以表示这个点的颜色,那么这个图像就是单通道的。如果这个点有彩色信息,那么描述这个点需要用到R、G、B3个通道,即用红色分量的颜色数量、绿色分量的颜色数量、蓝色分量的颜色数量共同描述这个点的颜色。因此,这样的彩色点组成的图像就具有3个通道。

    如果除了R、G、B颜色信息外,还想要用一张灰度图表示像素的透明度,像素点在灰度图上对应的值是0,表示像素完全不发光;对应的值是255,表示像素完全显示,那么这个点就加入了透明度信息,因而有4个通道。这样的点组成的图像就是一幅四通道图像。

2.2访问通道

    与访问通道相关的Halcon算子有很多,本小节举例说明两种。

    1.访问通道

    如要获得某一个指定通道的图像,可以使用access channel算子。

read_image (Test1Image, 'test1.jpg')
access_channel (Test1Image,Red,1)

    2.获取通道的数量

    使用count_channels算子,将返回输入图像中的通道数量。

read_image (Test1Image,'test1.jpg')
count_channels (Test1Image,NumofChannels)

2.3通道分离与合并

    有时完整的RGB信息对于图像分析并没有明显的帮助,特定的颜色反而能帮助区分目标对象。例如,白色布料上的淡紫色花纹在蓝色通道中可能会看不出来,但在红色和绿色通道中却显而易见。

    因此,可以使用色彩分离的方法,利用某一个通道中的颜色差别,区分出目标物体和背景。

    1.decompose3

    decompose3是比较简单的通道分离方法,它将RGB分离出3中颜色分量。

read_image (Image, 'cable2.png')
decompose3 (Image, Image1, Image2, Image3)

图像处理(4) : 图像颜色_qt_03

图像处理(4) : 图像颜色_qt_04

图像处理(4) : 图像颜色_图像识别_05

图像处理(4) : 图像颜色_halcon_06

    2.image_to_channels

    image_to_channels算子将一幅包含多通道的图像分解为包含多个单通道图像的数组。

    3.compose3

    该算子的功能与decompose3算子正好相反,是将3个通道的图像合并起来。

    4.channels_to_image

    该算子的功能与image_to_channels算子正好相反,是将数组内的单通道图像合并成一幅多通道图像。