3-Halcon-- gray_projections函数功能(用于计算图像行或列的灰度投影)


Halcon中的gray_projections算子用于计算图像行或列的灰度投影,常用于检测图像中具有方向性特征(如条纹、光带等)或快速定位灰度分布异常的场合。以下是该算子的完整使用指南,包括参数解析、代码示例及典型应用场景:


1. 算子功能

  • 输入: 1通道灰度图像(必须为 byteuint2 类型)。
  • 输出: 行或列方向的灰度累积值,存储为矩阵(Matrix对象)。
  • 用途
    • 检测LCD屏幕坏线(垂直/水平方向)
    • 条形码区域定位
    • 光条截面分析
    • 包装袋密封线检测

2. 算子原型

gray_projections(Image :  : Mode, Projection : MatrixID)
参数解释
参数名类型说明
ImageInput输入图像(单通道)
ModeInput投影方向:
'row'(行方向,统计每列的像素和)
'column'(列方向,统计每行的像素和)
ProjectionInput投影类型:
'sum'(累加和)
'min'(最小值)
'max'(最大值)
'mean'(平均值)
MatrixIDOutput存储投影结果的矩阵句柄

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_matrixmult_matrix等),能实现更复杂的投影数据分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

X-Vision

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值