彩色图像色彩空间原理(理论篇—6)

自然界的各种色彩、人类所感知的色彩以及各种图像设备和计算机软件所使用的颜色可通过色彩空间(Color Space)来描述。

色彩是人脑对不同视觉刺激的反应。人眼视网膜上的色敏细胞会分别对红、绿、蓝3个波段的色彩进行采样。采样后的信号传送至大脑后组合在一起就会产生对色彩的感知。由于颜色是大脑对特定视觉刺激的反应,因此颜色最好也由人类大脑对不同颜色的感觉来描述。据此人们创建了由多个颜色分量来表示颜色的模型,这些模型被称为色彩空间。

色彩空间是指通过多个(通常为3个或4个)颜色分量构成坐标系来表示各种颜色的模型系统。色彩空间中的每个点均代表一种颜色,也就是说各点的颜色可看作是多个分量的合成。例如,在RGB色彩空间中,颜色可认为是红(Red)、绿(Green)、蓝(Blue)3种颜色分量的加性合成;在HSL色彩空间中,颜色可认为是色调(Hue)、饱和度(Saturation)和亮度
(Luminance/Lightness)的合成。

基于这种思想,机器视觉系统开发过程中待处理的彩色图像就可根据需要被映射至某个色彩空间上进行描述。因此彩色图像的处理计算工作就可以被分解至各颜色分量所对应的一组图像上进行,包括图像增强和分割、色彩匹配、色彩定位、色彩模式识别分类以及彩色图像分割等。当各颜色分量的运算处理完成后,即可再次将对各分量的处理结果进行组合,生成对彩色图像的处理结果。

不同的工业环境或机器视觉应用使用的色彩空间可能各不相同。与图像处理相关的常见色彩空间有以下几种:

  • RGB,包括红(Red)、绿(Green)、蓝(Blue);
  • HSV/HSB,包括色调(Hue)、饱和度(Saturation)和明度(Value/Brightness);
  • HSl,包括色调(Hue)、饱和度(Saturation)和灰度(Intensity);
  • HSL,包括色调(Hue)、饱和度(Saturation)和亮度(Luminance/Lightness)。

以上色彩空间中,RGB被计算机显示器采用,HSV/HSB被艺术家用于艺术创作,HSl和HSL则适合机器视觉和图像处理系统开发。

下表对这几种色彩空间进行了汇总:

多数色彩空间都是基于人类大脑对不同颜色的感觉(sensations)而建立,因此详细了解各种色彩空间之前,需要先明确感觉的相关定义。CIE(国际照明委员会)对以下人类的感觉进行了定义:

  • 明度(Brightness) :对某一区域内光线多少的感觉,即明亮程度;
  • 亮度(Luminance/Lightness) :对场景中某一区域内明度相对于白色的感觉;
  • 色调(Hue)∶对某一区域内类似于RGB组合显示的感觉,即颜色种类。色量(Colorfulness) :对某一区域内色调多少的感觉;
  • 色度(Chroma):对场景中某一区域内色量相对于白色的感觉;
  • 饱和度(Saturation):某一区域内色量与明度之比,表示色彩的鲜艳程度。

由定义可知,明度和色量是人类视觉对一个光照表面的亮暗与颜色的感知,是绝对概念。而亮度和色度则是相对白色的感觉,是相对概念。饱和度用来描述色彩的鲜艳程度,取决于含色成分(色量)和消色成分(明度)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。

RGB色彩空间,使用不同比例的红绿蓝三基色进行加性组合来表示颜色,如计算机彩色阴极射线管、彩色光栅图形的显示器都使用RGB数值驱动电子枪发射电子,以激发荧光屏上的颜色的荧光粉发出不同亮度的光线,并通过混合相加产生各种颜色。根据RGB三基色原理,各种颜色的光都可以由红、绿和蓝3种基色加权混合而成。常见于计算机系统如下所示:

RGB色彩模型

国际公认的RGB三基色光的波长分别为700.0nm、546.1nm和435.8nm。在RGB色彩空间中,标准白光由光通量为1lm的红光、4.5907Im的绿光和0.0601lm的蓝光混合而成,因此将这3种光通量大小的光定义为三基色的单位基色量,用(R)、(G)、(B)表示。据此,任何一种具有一定亮度的彩色光的光通量均可由不同比例的三基色叠加来表示。

HSV和HSB是同一种色彩空间的不同叫法,它按照人眼对色彩的感知原理构建,由色调、饱和度和明度3个分量构成,为倒立锥形结构,如下图所示:

色调对应于颜色的波长,它代表人眼所能感知的各种颜色,如红、黄、紫等。色调值可用分布在一个平面的色环表示,如下图所示:

HSV的饱和度是指色调与位于色环中心的中度灰色(Neutral Gray)的差异,它通常用0~1的值(或百分比)来表示。当取值为0时(位于色环中心),表示无颜色(中度灰色),取最大值时(位于色环圆周上),表示颜色最鲜艳,为色调定义的最纯色。

明度指光线强度的大小,值越大,色彩越浅。在HSV模型中,从倒立锥的顶点到底面色环中心,明度由小变大。由于HSV模型按照人眼对色彩的感知原理构建,因此常被艺术家用来进行各种彩色艺术创作。

HSI和HSL色彩空间的第三个分量与HSV也有区别。HSV使用代表光线强度的明度作为第三个分量,而HSI使用代表由黑到白变化的灰度(Intensity),HSL使用了表示白色多少的亮度(Luminance)作为第三个分量。明度、灰度或亮度都用于控制色彩的明暗变化。数值越小,色彩越接近于黑色;数值越大,色彩越接近于白色。下图显示了HSL色彩空间的锥形结构:

在机器视觉开发过程中,也会涉及以下几种色彩空间:

  • CMYK包括青色(Cyan)、品红(Magenta)、黄色(Yellow)、黑色(BlacK),用于印刷;
  • CIE-XYZ包括国际照明委员会(CIE)创建的色彩空间,X、Y、Z为3个假想原色;
  • CIE-L*a*b*包括CIE创建,由亮度(Lightness) +a红色、-a绿色、+b黄色、-b蓝色分量构成;
  • YUV包括Y为亮度,U为蓝色与Y的色差,V为红色与Y的色差;
  • YIQ包括Y为亮度,I代表从橙色到青色的变化,Q代表紫色到黄绿色的变化;
  • YCbCr包括对YUV缩放和修正后用于数字视频,Y为亮度,Cb、Cr为蓝色和红色与Y的色差。
  • CMYK用于印刷行业,CIE-XYZ和CIE-L*a*b*是由国际照明委员会在进行了大量正常人类视觉测量和统计后建立的空间较大的与设备无关的色彩空间,YUV和YIQ被不同制式的模拟视频信号采用,YCbCr,则是对YUV缩放和修正后用于数字视频的色彩空间。

1. 色彩转换: dst = cv.cvtColor(src,code) 常用的是转换成 灰度图像 cv.COLOR_BGR2GRAY HSV图像cv.COLOR_BGR2HSV YUV图像 cv.COLOR_BGR2YUV YCrCb图像 cv.COLOR_BGR2YCrCb 其中hsv里:h通道数值范围是0-180,s通道范围是0-255,v通道范围是0-255 2. import cv2 as cv import numpy as np def extrace_object_demo(): capture = cv.VideoCapture("E:/opencv/picture/donghua.avi") while(True): ret,frame = capture.read() #cv.inRange(src,阈值下限,阈值上限) #作用:提取图像在阈值中间的部分 hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV) hsv_low = np.array([100,43,46])#blue的hsv阈值 hsv_high = np.array([124, 255, 255]) mask = cv.inRange(hsv,hsv_low,hsv_high) if ret ==False: break cv.imshow("mask",mask) cv.imshow("video_window",frame) c =cv.waitKey(20) if c==27: break def color_space_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) cv.imshow("2",gray) hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) cv.imshow("3",hsv) yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV) cv.imshow("4",yuv) Ycrcb =cv.cvtColor(image,cv.COLOR_BGR2YCrCb) cv.imshow("5",Ycrcb) src = cv.imread("E:/opencv/picture/test1.jpg") b,g,r = cv.split(src) #cv.split 多通道图像的分离 cv.imshow("b",b) cv.imshow("g",g) cv.imshow("r",r) cv.namedWindow("1") src[:,:,2] = 0 cv.imshow("1",src) src = cv.merge([b,g,r])#cv.merge 各个通道的合并 cv.imshow("merge",src) src[:,:,2] = 0 #color_space_demo(src) extrace_object_demo() cv.waitKey(0) cv.destroyAllWindows() 总结: 1. 提取图像在阈值中间的部分,用二值化表示出来。用cv.inRange命令 cv.inRange(src,阈值下限,阈值上限) #作用:提取图像在阈值中间的部分 例如: hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV) hsv_low = np.array([100,43,46])#blue的hsv阈值 hsv_high = np.array([124, 255, 255]) mask = cv.inRange(hsv,hsv_low,hsv_high) 2. 多通道的分离与合并: cv.split(src) #cv.split 多通道图像的分离 例如 b,g,r = cv.split(src) #cv.split 多通道图像的分离 cv.imshow("b",b) cv.imshow("g",g) cv.imshow("r",r) cv.merge([b,g,r])#cv.merge 各个通道的合并 例如: src = cv.merge([b,g,r])#cv.merge 各个通道的合并 cv.imshow("merge",src)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不脱发的程序猿

亲,赏包辣条吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值