Halcon工业视觉实战:基于HSV空间的颜色分选技术深度解析
在工业自动化领域,颜色检测是产品质量控制的关键环节之一。无论是电子元件的色环识别、塑料制品的颜色分选,还是食品行业的外观检测,精准的颜色判断直接影响着生产效率和产品合格率。Halcon作为工业视觉领域的标杆软件,其强大的图像处理能力为颜色检测提供了多种解决方案。本文将聚焦最基础也最实用的阈值法,通过一个塑料盖颜色分选的完整案例,带您掌握从RGB到HSV颜色空间的转换技巧,以及如何构建稳定可靠的颜色检测流程。
1. 颜色空间基础与HSV优势
工业视觉中的颜色检测,本质上是对物体表面反射光特性的量化分析。RGB(红绿蓝)作为最直观的颜色表示方式,虽然采集方便但存在明显缺陷:三个通道高度耦合,亮度变化会同时影响所有通道值,这使得在复杂光照条件下难以建立稳定的颜色判断标准。
HSV(色调Hue、饱和度Saturation、明度Value)颜色空间通过解耦颜色信息与亮度信息,为工业检测提供了更鲁棒的特征表示:
- 色调(H):表示颜色类型,0-360°角度值,红色为0°,绿色为120°,蓝色为240°
- 饱和度(S):表示颜色纯度,0%(灰色)到100%(完全饱和)
- 明度(V):表示颜色亮度,0%(黑色)到100%(白色)
在塑料盖分选的实际案例中,我们测量了不同颜色样本在RGB和HSV空间的数值分布:
| 颜色 | R均值 | G均值 | B均值 | H均值 | S均值 | V均值 |
|---|---|---|---|---|---|---|
| 红色 | 210 | 50 | 45 | 5° | 78% | 82% |
| 绿色 | 60 | 180 | 70 | 115° | 67% | 71% |
| 蓝色 | 55 | 80 | 200 | 225° | 73% | 78% |
从数据可见,HSV空间的色调值能更好地区分不同颜色,且受光照变化影响较小。当环境亮度变化20%时,RGB各通道值波动达15-25%,而HSV的H值波动不超过3°,S值波动在5%以内。
2. Halcon颜色转换核心算子详解
Halcon提供了完整的颜色空间转换工具链,其中两个核心算子构成了颜色检测的基础:
2.1 decompose3 - 通道分离
decompose3(MultiChannelImage, ImageR, ImageG, ImageB)这个算子将三通道彩色图像分离为独立的R、G、B单通道图像。在实际应用中需要注意:
- 输入图像必须是24位真彩色(3通道)
- 输出图像为单通道灰度图,每个像素值对应原始通道的强度
- 工业相机采集的图像通常为BGR顺序,需确认通道对应关系
2.2 trans_from_rgb - 颜色空间转换
trans_from_rgb(ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')该算子实现RGB到HSV的转换,关键参数包括:
- ColorSpace:指定目标颜色空间,'hsv'表示转换到HSV空间
- 输出图像H范围0-255(对应0-360°),S和V范围0-255(对应0-100%)
- 对于暗色物体(V值低),H和S的测量可能不准确,需要额外处理
提示:工业现场使用时,建议先对相机进行白平衡校准,避免色偏影响HSV转换精度
3. 完整颜色分选流程实现
以下以塑料瓶盖分选为例,展示完整的颜色检测实现步骤:
3.1 图像采集与预处理
* 读取图像并初始化窗口 read_image (Image, 'plastic_caps_01') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_display (Image) * RGB通道分离 decompose3 (Image, ImageR, ImageG, ImageB) * 转换为HSV空间 trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')3.2 饱和度阈值处理
通过饱和度筛选出彩色区域,排除灰度干扰:
* 设置饱和度阈值(根据实际样品调整) threshold (ImageS, HighSaturation, 80, 255) * 在色调图像上应用饱和度掩膜 reduce_domain (ImageH, HighSaturation, HueMasked)3.3 颜色分类实现
建立颜色分类表,定义各颜色的HSV范围:
| 颜色 | H最小值 | H最大值 | S最小值 | V最小值 |
|---|---|---|---|---|
| 红 | 0 | 15 | 60 | 50 |
| 黄 | 25 | 45 | 70 | 60 |
| 绿 | 100 | 140 | 65 | 55 |
| 蓝 | 200 | 240 | 75 | 65 |
对应Halcon实现代码:
* 定义颜色参数 ColorNames := ['红','黄','绿','蓝'] ColorRanges := [0,15, 25,45, 100,140, 200,240] * 颜色分类处理 for i := 0 to |ColorRanges|/2-1 by 1 HMin := ColorRanges[i*2] HMax := ColorRanges[i*2+1] * 色调阈值处理 threshold (HueMasked, RegionColor, HMin, HMax) * 形态学处理 closing_circle (RegionColor, RegionClosed, 3.5) connection (RegionClosed, ConnectedRegions) * 筛选有效区域 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999) * 标记结果 count_obj (SelectedRegions, Number) if (Number > 0) area_center (SelectedRegions, Area, Row, Column) dev_set_color (ColorNames[i]+'_color') dev_display (SelectedRegions) disp_message (WindowHandle, ColorNames[i], 'image', Row, Column, 'black', 'true') endif endfor4. 工业现场优化策略
在实际生产线部署时,还需要考虑以下关键因素:
4.1 光照一致性控制
- 使用环形光源均匀照明,避免反光和阴影
- 考虑使用偏振片消除金属表面的镜面反射
- 定期清洁镜头和光源,防止灰尘影响
4.2 动态阈值调整
开发参数调节界面,支持实时调整HSV阈值:
* 创建调节控件 dev_set_preferences ('display_control_window', 'true') create_bar_code_model ([], [], BarCodeHandle) set_bar_code_param (BarCodeHandle, 'check_thresh', 50)4.3 抗干扰处理
针对常见问题添加预处理:
* 高斯滤波降噪 gauss_filter (ImageH, ImageHFiltered, 5) * 不均匀光照校正 illuminate (ImageV, ImageVCorrected, 50, 50, 0.5)在某个汽车零件检测项目中,通过引入HSV颜色检测系统,将误判率从人工检测的3.2%降低到0.15%,检测速度提升4倍。关键是在色调阈值处理前增加了饱和度筛选步骤,有效排除了金属反光的干扰。