6、彩色图像的分割
RGB颜色空间的的理解
三基色原理:
大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生,同样绝大多数单色光也可以分解成红绿蓝三种色
光,红绿蓝三基色按照不同的比例相加合成混色称为相加混色。其中一些混色的规律有:
红色+绿色=黄色;
绿色+蓝色=青色;
红色+蓝色=品红;
红色+绿色+蓝色=白色;
- RGB颜色空间:
(1)、并不是说R值越大,颜色越红。(白色时R=G=B=255)
(2)、在(0,0,0)---(1,1,1)这两个坐标之间的线段是黑白颜色,且是由黑逐渐变白。它的像素点的RGB关系为
:R=G=B,这条线上只有亮度,没有彩色,所以也并不是说看不到彩色的黑白图片就一定是单通道的图片,这个图片的每个像素的取值都在这条线上。
2、亮度的定义:
单色光的亮度强度各不相同,根据人的感受是:绿光最亮,红光次之,蓝光最弱,假设得到白光的强度为100%。如果用Y表示景物的亮度,则通常有:
Y=0.299R+0.587G+0.114B
因为红、绿、蓝三基色能够合成自然界所有的色彩,因此在电子设备和软件中,经常使用红绿蓝三基色合成五颜六色的图像。用以上的相加混色所表示的颜色模式成为RGB模式。
注:在一些彩色图转换为灰色图(用亮度来表示的图像)就是利用这个公式进行转换的。
HSV颜色空间定义:
色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。
它们的补色是:黄色为60°,青色为180°,品红为300°;
注:(1)、直径代表的两种颜色为互补色。
(2)、在圆周上的颜色代表饱和度为100%,圆周向着圆心饱和度逐渐降低。(掺入白色越来越大)
(3)、亮度有底下圆锥定点向上越来越亮。
饱和度S:取值范围0.0~1.0,值越大,越饱和。表示掺入白色的多少,若饱和读越高,掺入白色成分就越低。
当饱和度最低时,为白色。
亮度V:取值范围为0(黑色)~255(白色),表示关照到这种颜色上的强度,光越强亮度越高。亮度最低时为黑色。
例一
- 把一张三通道的图片分解为3张单通道的图片:
read_image (Image, 'F:/Halcon学习/7、测试图片/纯红色.png')
*分离三通道
decompose3 (Image, Image_r, Image_g, Image_b)
分析:由于纯红色的图片Image的每个像素点的RGB=(255,0,0) ,所以分解出来的3张单通道图片的灰度值分别是255(Image_r—白色),0(Image_g---黑色),0(Image_b----黑色)
例子二
- 目的:如下图,水泵箱中有7个按钮,现在需要把红色按钮区域分解出来。
注:该图片的像素特征:这幅图像背景和红色按钮的R值都在200左右。
- 方法一:
把这个彩色图片分解为三通道,然后对R通道进行阈值分割。
read_image (Image, 'F:/Halcon学习/7、测试图片/123.jpg')
*创建ROI
gen_rectangle1 (ROI_0, 45.0341, 66.8179, 222.901, 277.983)
*从大图像中把ROI区域剪裁出来
reduce_domain (Image, ROI_0, ImageReduced)
*分离三通道
decompose3 (ImageReduced, r_Image1, g_Image2, b_Image3)
这是发现无论怎么调动阈值都无法单独的将红色按钮分离出来,这是因为这是对R通道图像进行操作,而这个图像的特征背景和红色按钮的R值差不多,所以就很难从背景中分离出红色按钮。解决办法如下:
- 解决办法:
read_image (Image, 'F:/Halcon学习/7、测试图片/123.jpg')
*创建ROI
gen_rectangle1 (ROI_0, 45.0341, 66.8179, 222.901, 277.983)
*从大图像中把ROI区域剪裁出来
reduce_domain (Image, ROI_0, ImageReduced)
*分离三通道
decompose3 (ImageReduced, r_Image1, g_Image2, b_Image3)
*转化为HSV空间,并分离出H、S、V通道
trans_from_rgb (r_Image1, g_Image2, b_Image3, h_Image3, s_Image3, v_Image3, 'hsv')
*这时发现s通道的按钮区域很亮,其他区域很暗
*,所以现在只对这个通道进行阈值分割,把全部按钮区域分离出来
threshold (s_Image3, Regions, 90, 255)
*从输入图片(彩色图)中分离出按钮区域
reduce_domain (Image, Regions, ImageReduced1)
*在对这个按钮区域进行RGB三通道分离
decompose3 (ImageReduced1, lr_Image1, lg_Image2, lb_Image3)
*对R通道进行阈值分割
threshold (lr_Image1, Regions1, 102, 255)