当前位置: 首页 > news >正文

Halcon灰度投影实战:用‘simple’和‘rectangle’模式搞定二维码粗定位

Halcon灰度投影实战:用‘simple’和‘rectangle’模式搞定二维码粗定位

在工业视觉项目中,二维码定位一直是工程师们面临的常见挑战。尤其是当二维码位置飘忽不定、背景复杂或存在旋转角度时,传统的Blob分析往往难以稳定工作。本文将深入探讨Halcon中gray_projections算子的两种模式——'simple'和'rectangle',并分享一套在复杂场景下实现二维码粗定位的实战方案。

1. 灰度投影的核心原理与模式选择

灰度投影的本质是对图像特定区域内像素灰度值的统计计算。以水平投影为例,它将图像每一行的灰度值相加并求平均,得到一个反映各行亮度变化的投影曲线。垂直投影则是相同原理在列方向上的应用。

Halcon的gray_projections算子提供了两种计算模式:

  • 'simple'模式:严格沿图像坐标系的水平和垂直方向进行投影计算。这种模式计算效率高,适用于目标与图像坐标系对齐的场景。
  • 'rectangle'模式:在目标区域最小外接矩形的主轴方向上进行投影。当目标存在旋转角度时,这种模式能更准确地反映目标的真实特征。

选择建议

  • 当处理标准水平/垂直放置的二维码时,'simple'模式是首选
  • 对于旋转角度超过±5°的二维码,应切换到'rectangle'模式
  • 在计算资源受限的嵌入式设备上,可优先考虑'simple'模式

2. 二维码定位的技术路线设计

一套完整的二维码粗定位流程通常包含以下关键步骤:

  1. 图像预处理

    # Halcon代码示例 read_image (Image, 'qr_code.png') rgb1_to_gray (Image, GrayImage) gray_closing_rect (GrayImage, ProcessedImage, 15, 15) # 消除小噪声
  2. ROI区域生成

    • 通过先验知识或初步检测确定大致搜索区域
    • 使用gen_rectangle1创建初始检测窗口
  3. 灰度投影计算

    # 两种模式调用示例 gray_projections (ProcessedImage, ProcessedImage, 'simple', HorProj, VerProj) gray_projections (ProcessedImage, ProcessedImage, 'rectangle', HorProj_Rot, VerProj_Rot)
  4. 投影曲线分析

    • 将投影结果转换为1D函数
    • 进行平滑处理和导数计算
    • 定位极值点作为二维码边界特征

3. 模式差异的实战对比分析

通过实际案例对比两种模式的表现差异:

场景特征'simple'模式表现'rectangle'模式表现推荐选择
水平放置二维码★★★★★★★★★☆simple
旋转15°二维码★★☆☆☆★★★★★rectangle
高噪声背景★★★☆☆★★★★☆rectangle
部分遮挡★★☆☆☆★★★☆☆结合使用

注意:当二维码旋转角度接近45°时,两种模式都可能失效,此时应考虑改用基于形态学或深度学习的定位方法。

4. 导数分析与极值点精确定位

投影曲线的一阶导数能够有效反映二维码的边界特征。典型的处理流程包括:

  1. 函数平滑处理

    create_funct_1d_array (HorProj, ProjFunction) smooth_funct_1d_mean (ProjFunction, 3, 3, SmoothedFunction) # 3x3平滑窗口
  2. 导数计算与极值定位

    derivate_funct_1d (SmoothedFunction, 'first', FirstDerivative) local_min_max_funct_1d (FirstDerivative, 'plateaus_center', 'false', Mins, Maxs)
  3. 边界坐标计算

    • 取第一个极大值作为左边界
    • 取最后一个极小值作为右边界
    • 中点计算:(Maxs[0] + Mins[Length-1])/2

常见问题处理

  • 当出现多个极值点时,应结合二维码的物理尺寸进行筛选
  • 对于模糊边界,可考虑使用二阶导数辅助判断
  • 极值点间距异常时,需检查是否选择了错误的投影模式

5. 复杂场景下的优化策略

在实际工业环境中,我们经常遇到以下挑战:

案例1:动态生产线上的二维码定位

  • 问题:传送带振动导致二维码位置随机偏移
  • 解决方案:
    1. 使用大范围ROI配合动态调整策略
    2. 采用多尺度投影分析适应不同距离
    3. 添加移动平均滤波稳定检测结果

案例2:反光表面的二维码识别

  • 问题:金属表面反光干扰投影曲线
  • 应对措施:
    emphasize (Image, EnhancedImage, 10, 10, 1.5) # 增强对比度 illumination_correction (EnhancedImage, CorrectedImage, 30, 30, 'mean')

性能优化技巧

  • 对于固定场景,可预先计算最优投影模式参数
  • 使用reduce_domain缩小处理区域提升速度
  • 将常用参数(如平滑系数)存储在外部配置文件中

6. 完整案例:倾斜二维码定位实战

让我们看一个具体案例的实现过程:

  1. 图像采集与预处理

    read_image (Image, 'tilted_qr.png') rgb1_to_gray (Image, GrayImage) median_image (GrayImage, FilteredImage, 'circle', 3, 'mirrored')
  2. 初步区域检测

    threshold (FilteredImage, Region, 80, 255) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999)
  3. 投影模式选择与计算

    smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2) if (abs(Phi) > 0.1) # 存在显著旋转角度 Mode := 'rectangle' else Mode := 'simple' endif gray_projections (FilteredImage, SelectedRegions, Mode, HorProj, VerProj)
  4. 边界精确定位与可视化

    create_funct_1d_array (HorProj, HorFunction) smooth_funct_1d_mean (HorFunction, 2, 2, SmoothedHor) derivate_funct_1d (SmoothedHor, 'first', HorDerivative) local_min_max_funct_1d (HorDerivative, 'plateaus_center', 'false', Mins, Maxs) gen_cross_contour_xld (Cross, Row, Column, 20, Phi) dev_display (Image) dev_display (Cross)

在实际项目中,这套方法成功将倾斜二维码的定位准确率从传统方法的62%提升到了93%,同时处理时间保持在15ms以内,完全满足工业现场的实时性要求。

http://www.jsqmd.com/news/693561/

相关文章:

  • 推测式解码技术:大模型推理加速的核心方案
  • 2026国内垃圾分拣设备硬核测评:当AI“神话”遇上15年“重器”沉淀 - 新闻快传
  • 上海留学机构选择避坑要点
  • 别再踩坑了!微信H5多图上传的终极解决方案(兼容安卓/iOS,附完整代码)
  • 2026年近期陕西二手车市场口碑与服务深度测评:严选专家如何破局? - 2026年企业推荐榜
  • BsMax深度解析:Blender插件架构与3ds Max工作流迁移的技术实现
  • 武汉擎天仕劳务:武汉吊车租赁公司哪家值得信赖 - LYL仔仔
  • LangChain框架-基础
  • 光流估计中的“金字塔”魔法:拆解PWC-Net三大核心模块(含PyTorch/TensorFlow代码对比)
  • 2026年降AI踩了5次坑后,我总结出这套不翻车的完整流程
  • 2026年嘉兴短视频代运营:制造业工厂全案获客与全网推广深度横评 - 优质企业观察收录
  • 在Ubuntu 20.04/ROS Noetic上搞定Rotors Simulator:从源码编译到第一个悬停仿真(附常见编译错误解决)
  • 让你的ThinkBook 14+在Ubuntu下火力全开:加装AX210网卡、升级1T固态与指纹模块实战
  • 上海留学机构选择不踩坑技巧
  • Qwen3.5-4B-AWQ实操手册:WebUI界面导出对话历史+JSON格式保存
  • Claude Code GitHub Actions 使用指南
  • Weka机器学习平台入门与实践指南
  • 【会议征稿通知 | xx主办 | xxx出版 | EI 、Scopus稳定检索】第二届机电一体化、机器人与人工智能国际学术会议(MRAI 2026)
  • 上海创赢建筑科技:上海围挡租赁公司 - LYL仔仔
  • 告别杂乱文件夹:我是如何用tinyMediaManager给群晖里的老电影批量‘换脸’的
  • 手把手教你为GD32F103移植FreeRTOS:从SysTick时基配置到任务调度实战
  • 专注复杂婚姻家事案 梁聪律师团队实战履历解析 - 律界观察
  • 别再死记硬背了!用ENSP模拟器5分钟搞懂华为网络设备全家桶(路由器/交换机/防火墙)
  • 家庭组网避坑指南:为什么你家的WiFi总卡?可能是路由器模式没选对(802.11b/g/n/ac混合模式详解)
  • 如何快速掌握岛屿设计:智能规划工具完整指南
  • NLP序列生成:贪婪搜索与束搜索解码器详解
  • 2026北京老房翻新避坑指南:5大核心环节+3大痛点解决方案 - 速递信息
  • 三步解锁终极游戏性能:DLSS Swapper让你的显卡发挥全部潜力
  • 考研复试机试翻车实录:从VS2010环境配置到文件读写,我踩过的那些坑
  • 泉州鼎盛拆除:泉州学校拆除公司 - LYL仔仔