Halcon中的gray_projections
算子用于计算图像行或列的灰度投影,常用于检测图像中具有方向性特征(如条纹、光带等)或快速定位灰度分布异常的场合。以下是该算子的完整使用指南,包括参数解析、代码示例及典型应用场景:
1. 算子功能
- 输入: 1通道灰度图像(必须为
byte
或uint2
类型)。 - 输出: 行或列方向的灰度累积值,存储为矩阵(
Matrix
对象)。 - 用途:
- 检测LCD屏幕坏线(垂直/水平方向)
- 条形码区域定位
- 光条截面分析
- 包装袋密封线检测
2. 算子原型
gray_projections(Image : : Mode, Projection : MatrixID)
参数解释
参数名 | 类型 | 说明 |
---|---|---|
Image | Input | 输入图像(单通道) |
Mode | Input | 投影方向:'row' (行方向,统计每列的像素和)'column' (列方向,统计每行的像素和) |
Projection | Input | 投影类型:'sum' (累加和)'min' (最小值)'max' (最大值)'mean' (平均值) |
MatrixID | Output | 存储投影结果的矩阵句柄 |
3. 完整使用流程
3.1 基础代码模板
* 读取图像并转换灰度
read_image (Image, 'lcd_screen.png')
rgb1_to_gray (Image, GrayImage)
* 创建空矩阵(自动匹配行或列长度)
create_matrix (GrayImage.Height, 1, 0, MatrixID) * 行投影时矩阵尺寸为 Height x 1
* 计算行方向的灰度投影(总和)
gray_projections (GrayImage, 'row', 'sum', MatrixID)
* 获取矩阵数据(转换为Tuple数组)
get_full_matrix (MatrixID, GrayProjectionSum)
* 释放矩阵内存
clear_matrix (MatrixID)
3.2 可调节参数技巧
-
优化图像预处理:
若投影区域需精确限制,可使用reduce_domain
限定ROI,避免干扰区域:gen_rectangle1 (ROI, 100, 200, 300, 400) reduce_domain (GrayImage, ROI, ImageReduced) gray_projections (ImageReduced, 'column', 'mean', MatrixID)
-
归一化处理:
对于不同尺寸图像的投影值比较,建议归一化到[0,1]:* 计算行最大投影值 max_val := max(GrayProjectionSum) normalized_proj := GrayProjectionSum / max_val
4. 高级应用案例:LCD屏幕坏线检测
4.1 场景分析
- 目标:检测LCD屏幕是否存在 垂直亮线/暗线(缺陷)。
- 投影选择:使用 列投影(
'column'
)的均值或总和,异常列会有明显峰值/谷值。
4.2 实现代码
dev_close_window ()
read_image (Image, 'lcd_defect.jpg')
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
* Step 1: 计算列方向投影均值
create_matrix (1, Width, 0, MatrixColMean)
gray_projections (GrayImage, 'column', 'mean', MatrixColMean)
get_full_matrix (MatrixColMean, ColMeans)
clear_matrix (MatrixColMean)
* Step 2: 搜索异常列(标准差阈值法)
mean_val := mean(ColMeans) * 全局均值
std_dev := deviation(ColMeans) * 标准差
threshold := mean_val - 3*std_dev * 暗线阈值(调整系数适应实际)
* 查找低于阈值的列(暗线)
find_threshold (ColMeans, Columns, threshold, 'less')
disp_message (3600, '检测到暗线数:' + |Columns| + '处', 'window', 12, 12, 'black', 'true')
* Step 3: 可视化标注缺陷列
gen_region_line (DefectLines, [0,0], [Height-1,Columns$'], [Height-1,Columns$'])
dev_display (Image)
dev_display (DefectLines)
4.3 关键参数说明
- 投影模式选择: 列缺陷(
'column'
)、行缺陷('row'
)。 - 统计类型选择:
'sum'
:累加和敏感,适合宽线检测。'mean'
:均值更适合均匀背景下的细线检测。
5. 数据解读与优化
5.1 投影曲线可视化
* 将投影数据绘制为曲线
gen_region_histo (CurveRegion, ColMeans, 255, 255, 1)
dev_display (Image)
dev_set_color ('red')
dev_display (CurveRegion)
5.2 投影数据滤波
去除高频噪声干扰:
* 均值滤波(窗口大小11)
smooth := smooth(ColMeans, 11, 'mean')
* 或中值滤波(抑制脉冲噪声)
smooth := median(ColMeans, 11)
5.3 性能优化
-
并行计算加速:对于4K以上大图,启用GPU加速:
set_system ('use_gpu', 'true') set_system ('gpu_device', 0)
-
多尺度投影:检测不同粗细缺陷时,建立图像金字塔:
gen_gauss_pyramid (GrayImage, PyramidImages, 'constant', 3) gray_projections (PyramidImages[2], 'column', 'sum', MatrixID)
6. 效果对比与参数调试
检测目标 | 推荐投影模式 | 投影统计类型 | 典型异常特征 |
---|---|---|---|
垂直亮线(1像素宽) | 'column' | 'mean' | 局部峰值(>3σ) |
水平缺失密封线 | 'row' | 'min' | 连续多个行均值接近0 |
大面积暗块 | 'row' /'col' | 'sum' | 区域投影值突降 |
通过灵活调整gray_projections
的参数组合,可快速定位图像中的方向性特征,极大简化特征提取逻辑。结合Halcon的矩阵运算工具(如create_matrix
、mult_matrix
等),能实现更复杂的投影数据分析。