Halcon条码和二维码质量评级

   现在各行各业的人们都使用条码/二维码从生产阶段到销售点全程追踪他们

的产品。那么怎么验证生产出来的具有可读性,码的质量等级如何呢?

    其实ISO行业标准已经给出了如何评估码的质量等级的标准,以下三种主要验证标准用于确定一维条码、二维码和DPM码的质量。

  • 一维条码使用ISO 15416标准。

  • 印刷在标签上的二维码使用ISO 15415标准。

  • 二维DPM码使用ISO/IEC TR 29158标准(也称为AIM DPM标准)。

1 条码质量

    一维条码由一系列条与空组成,这些条与空基于宽度模式创建一组数据。每个单独的条或空被称为一个元素。一组形成特定模式的条与空称为字符。每种符号体系都拥有一组可转换为字符的不同模式。

    读取一维条码时,扫描线将横向穿过代码来测量反射率,以确定条与空的大小和模式。当扫描线在整个代码上移动时,光线在穿过空模块时会被反射,并被条模块吸收。从暗到亮的光路创建了扫描反射率剖面图(“SRP”)。当扫描线穿过较暗的条时,它将导致SRP下降至全局阈值以下;然后,当扫描线穿过较亮的空时,它将再次上升至全局阈值以上。

    图片中的虚线代表全局阈值,该阈值定义了划分明与暗的灰度值。

    每个参数均基于SRP被评级。理想情况下,相比条或空,SRP在大小上是一致的,准确地模仿了所读取的代码。此图片中的代码显示了具有缺陷和调制问题的代码示例。当扫描线穿过缺陷点时,光路开始下降,以一个凹陷使平滑的曲线被中断。此外,还有一个空不像其他空那样明亮,因此反射率剖面图不会达到与其他空元素相同的高度,这揭示了存在调制问题。

    使用ISO 15416标准评级过程,通过求取10条扫描线的平均值对一维条码进行评级。根据9个不同的参数对每条扫描线进行评级,以评估可读性。评级最低的参数将成为扫描线的扫描评级。然后求取所有扫描评级的平均值,以计算总体评级。

    ISO15416标准参数解释和常见解决方案如下:

    下面是代码测试:

create_bar_code_model ([], [], BarCodeHandle)
*如果需要输出质量,则要开启持久模式,
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*最大解码个数
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 0)
*最小条形码宽度
set_bar_code_param (BarCodeHandle, 'barcode_width_min', -1)
*最小条形码高度
set_bar_code_param (BarCodeHandle, 'barcode_height_min', -1)
*最少字符数
set_bar_code_param (BarCodeHandle, 'min_code_length', 0)
*最少对比度
set_bar_code_param (BarCodeHandle, 'contrast_min', 10)

dev_close_window ()
dev_open_window (0, 0, 600, 600, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_update_off ()
dev_set_draw ('margin')
dev_set_color ('green')
dev_set_line_width (3)

read_image (Image, 'C:/Users/Administrator/Desktop/bb.png')
dev_resize_window_fit_image (Image, 0, 0, -1, -1)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
area_center(SymbolRegions, Area, Row, Column)
get_bar_code_result (BarCodeHandle, 0, 'quality_isoiec15416_labels', Labels)
get_bar_code_result (BarCodeHandle, 0, 'quality_isoiec15416', Quality)

  quality_isoiec15416_labels可以得到质量参数,quality_isoiec15416可以得到质量参数值,如下:

2 二维码质量

    质量良好的二维码的特点在于黑模块与白模块之间具有高对比度,边线清晰,并且比例理想。即使是微小的瑕疵,也可能导致代码出现问题。

    Data Matrix符号体系可能是最常见的二维码。它可以在每个模块中实现最高的数据密度,尤其是对于较小的符号而言,因此评级质量至关重要。定位图案由实心的左侧和底侧组成,其形成“L”图案及“L”图案相对侧的水平和垂直时钟图案(或轨迹)。时钟图案指定矩阵中模块的数量,并用于读码放置模块的网格。有关符号大小、编码和纠错的所有信息均由矩阵的大小决定。

    读码过程如下:

  1. 采集图像。

  2. 软件使图像模糊化,以消除背景中的噪音或纹理。

  3. 计算模糊图像上的全局阈值。全局阈值是指用于确定单元格是更接近于白色还是黑色的设置值。

  4. 软件将其转换为黑白(亦称为“二进制”)图像。为了对图像进行二值化处理,软件会使用具有灰度值的模糊图像,然后将每个像素转换为黑色或白色。

  5. 软件将追踪线条,以找到“L”图案并寻找时钟图案。本质上,它是在查找定位图案。

  6. 基于时钟齿的间距,生成参照读码网格。

  7. 在网格相交处,绘制一个圆圈(光圈),并将所包含的光值与阈值进行比较,创建一个基于单元格颜色(称为“位流”)的二进制数据序列。

  8. 使用Reed-Solomon纠错功能对位流(数据序列)进行纠正。

  9. 将校正后的位流将转换为ASCII值,以显示代码中的数据。

    ISO15415标准评级过程如下:

    ISO15415标准参数解释和常见解决方案如下:

    下面是代码测试:

read_image (Image1, 'C:/Users/Administrator/Desktop/board/ecc200_disturbed_002.png')
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
find_data_code_2d (Image1, SymbolXLDs, DataCodeHandle, ['stop_after_result_num'], [2], ResultHandles, DecodedDataStrings)
get_data_code_2d_results (DataCodeHandle, 0, 'quality_isoiec15415_labels', ResultValues)
get_data_code_2d_results (DataCodeHandle, 0, 'quality_isoiec15415', ResultValues2)

  quality_isoiec15415_labels可以得到质量参数,quality_isoiec15415可以得到质量参数值,如下:

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/128350138
今日推荐