现在各行各业的人们都使用条码/二维码从生产阶段到销售点全程追踪他们
的产品。那么怎么验证生产出来的具有可读性,码的质量等级如何呢?
其实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”图案相对侧的水平和垂直时钟图案(或轨迹)。时钟图案指定矩阵中模块的数量,并用于读码放置模块的网格。有关符号大小、编码和纠错的所有信息均由矩阵的大小决定。
读码过程如下:
采集图像。
软件使图像模糊化,以消除背景中的噪音或纹理。
计算模糊图像上的全局阈值。全局阈值是指用于确定单元格是更接近于白色还是黑色的设置值。
软件将其转换为黑白(亦称为“二进制”)图像。为了对图像进行二值化处理,软件会使用具有灰度值的模糊图像,然后将每个像素转换为黑色或白色。
软件将追踪线条,以找到“L”图案并寻找时钟图案。本质上,它是在查找定位图案。
基于时钟齿的间距,生成参照读码网格。
在网格相交处,绘制一个圆圈(光圈),并将所包含的光值与阈值进行比较,创建一个基于单元格颜色(称为“位流”)的二进制数据序列。
使用Reed-Solomon纠错功能对位流(数据序列)进行纠正。
将校正后的位流将转换为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可以得到质量参数值,如下: