目录
1. 一维码原理
1.1 定义:
人们用一些黑白相间的条纹构成的图案叫一维码,也叫条码。
1.2 作用:
它可以很方便的将一些信息,通过算法存储到图案中(编码)。
1.3 解码:
识别一维码,把信息通过算法解析出来。
1.4 原理:
二进制编码。
1.5 构成:
静区:起始码:资料码:校验区:终止码:
2. Halcon识别一维码
2.1 流程:
- 创建条码模型:create_bar_code_model
- 设置条码模型参数:set_bar_code_param
- 条码查找解析:find_bar_code
- 清除条码模型:clear_bar_code_model
2.2 获得中间结果的算子
- 获得中间对象结果:get_bar_code_object
- 获得条码模型参数:get_bar_code_param
- 获得中间数据结果:get_bar_code_result
3. 难读取的一维码
3.1 产生原因:
- 光照不理想
- 条码本身存在残缺或干扰
3.2 方法1:预处理
- 暗视野 scale_image
- 亮视野 scale_image
- 图像模糊: 增强 emphasize
3.3 方法2:设置参数
- persistence:保留中间重要结果,当想要获得模型解码后的扫描线之前,此参数设为1。
- majority_voting:多数表决,多条扫描线共同决定。
- barcode_width_min:整个条码最小宽度,当条码像素大小比较固定时,设置此参数。
- barcode_height_min:整个条码最小高度,当条码像素大小比较固定时,设置此参数。
- element_size_min:条码模块的最小尺寸,模块是条码的基本单元。
- element_size_max:条码模块的最大尺寸,当条码模块间隙比较小(在1-1.5像素)或比较大(大于8像素)时,考虑设置此参数。
- contrast_min:当光照比较暗时,可以通过这个参数适当增加对比度。
- element_size_variable:当条码模块变形扭曲时,此参数设置为true.此参数只针对三种码制:其他码需要自己做几何变换:获取码制函数 ==get_bar_code_result ==
• GS1 DataBar Limited
• GS1 DataBar Expanded
• GS1 DataBar Expanded Stacked - stop_after_result_num:想找指定个数的条码时,设置此参数。
- check_char:条当一维码存在校验符时,设置此参数。
- min_code_length:最小字符长度。
- num_scanlines:扫描线数量,设置为零是默认扫描线数,不同码制,默认扫描线数不同。当想指定扫描线数量时考虑此参数。
- merge_scanlines:扫描线融合(只在高版本中才有)例子:defect_ean13,当条码有一部分被遮挡,考虑使用此参数。 扫描线相关参见例子:inspect_scanlines
- meas_thresh_abs: meas_thresh:相对阈值和绝对阈值/当条码边缘比较明显,但是里面存在干扰噪声,可能存在假边,考虑使用此参数。
- composite_cod:当你想解码复合码的时候,设置此参数
- abort: 中断其他线程使用 find_bar_code
- quiet_zone: 净空区验证,净空区有干扰时,考虑设置此参数。
- start_stop_tolerance: 起始终止损坏容差,默认值是 high,设为low时性能下降,只适用于128码
4. 凹凸不平的条码(构建黑白相间的一维码)
- 打光(同轴光)
- 算法
- 三维设备 ==> 扫描出深度图(3D结构光,线激光)
5. 环形一维码
- 将环形拉直(极坐标转换)在OCR中讲解
6. 圆柱面(难点)
6.1 360°镜头(德鸿)
- 外壁镜头 => 极坐标转换
- 内壁镜头 => 极坐标转换
6.2 线扫相机+转盘结构,
- 让圆柱体转一圈
6.3 投影变换
- 例子:grid_rectifiction
- 打印一张棋盘格(生成棋盘格文件算子:create_rectifiction_grid)
- 将棋盘格贴到圆柱物体表面
- 使用函数:
- 找到棋盘格的区域和图像:手动或者使用 find_rectifiction_grid
- 棋盘格角点检测:
- 角点是指局部灰度变化剧烈的地方。
- 角点检测算子:saddle_points_sub_pix
- 画出十字轮廓算子:gen_cross_contour_xld
- 将角点连接成网格
conne_grid_points - 产生投影map映射
映射:gen_grid_rectifiction_map
拉直:map_image
使用映射识别二维码
7. 参数训练/模型读写/参数查询
- 例子:barcode_training
7.1. 参数训练:
- bar_code_training 自动确定最佳参数,但是也不能全信。
- ‘train’
- 'all’全部参数训练
- 'element_min’之训练一个参数
- '~all’取消训练
- 注意:在训练模式下,码制不能写 ‘auto’,必须是具体码制。
- 查询参数算子:query_bar_code_params
8. 其他码制
9. 补充参数
- 角度 ‘orientation’
- 角度公差 ‘orientation_tol’
10. Halcon一维码识别源代码下载地址:
链接:https://pan.baidu.com/s/1taJWdIw_og3-Gub6ngE3pg
提取码:uz9w