halcon例程print_quality_smallest_module_size

获取二维码等级

1
得到像素毫米比
2

校准反射率205
3
二维码等级
12个参数
在 HALCON 中,get_data_code_2d_results 函数用于获取二维数据码(如 QR 码、Data Matrix 等)的解码结果和质量评估信息。当使用 ‘quality_isoiec15415’ 参数时,QualityGrades 返回的是根据 ISO/IEC 15415 标准评估的二维数据码的打印质量等级。
对于不同的二维数据码类型,QualityGrades 的具体含义如下:

Data Matrix ECC 200、Aztec Code、QR Code 和 Micro QR Code
QualityGrades 返回一个包含 12 个元素的元组,分别表示:
Overall Quality:整体质量,是所有单独等级中的最小值。
Contrast:对比度,数据码域内最小和最大像素强度的范围,对比度越高,等级越好。
Modulation:调制,表示数据码模块的幅度强度。幅度越大,模块被正确分类为黑色或白色的确定性越高,等级也越高。
Fixed Pattern Damage:固定图案损坏,评估固定图案或静区的退化或损坏程度。
Decode:解码能力,评估数据码是否可以被正确解码。
Axial Non-Uniformity:轴向非均匀性,评估数据码在轴向上的均匀性。
Grid Non-Uniformity:网格非均匀性,评估数据码在网格上的均匀性。
Unused Error Correction:未使用的纠错能力,评估纠错码的使用情况。
Reflectance Margin:反射率裕度,评估模块的反射率是否在可接受范围内。
Print Growth:打印增长,评估数据码模块是否超出其边界,负值表示打印收缩,正值表示打印增长。
Contrast Uniformity:对比度均匀性,表示模块中最小的调制值,不直接影响整体质量。
Aperture:孔径,用于在分级过程中获取参考灰度图像的孔径大小。

1

以下是整个程序

* Example program that demonstrates how to set the minimum module
* size for ISO/IEC 15415 print quality inspection of 2D symbols.
* The parameters for the filter implementing the synthetic
* aperture depend on this value.
* 示例程序,展示如何为二维符号的 ISO/IEC 15415 打印质量检测设置最小模块尺寸。
* 实现合成孔径的滤波器参数依赖于该值。
* ****************************************************************

* ****************************************************************
dev_update_off ()
dev_close_window ()
read_image (ImageCalibration, 'datacode/ecc200/pqi_smallest_module_size_calplate')
dev_disp_introduction (ImageCalibration, WindowHandle, Message)
stop ()
* 

* 应用程序的最小模块尺寸通常以毫米为单位指定。为了将此尺寸转换为像素,
* 需要进行单次图像相机校准。其他转换方法也是有效的。
*生成区域扫描相机参数
gen_cam_par_area_scan_division (0.016, 0, 3.4e-7, 3.4e-7, 2592 / 2, 1944 / 2, 2592, 1944, CameraParam)
CalPlateDescr := 'calplate_80mm.cpd'
* 创建校准数据
create_calib_data ('calibration_object', 1, 1, CalibDataID)
*设置校准对象
set_calib_data_calib_object (CalibDataID, 0, CalPlateDescr)
*设置校准数据相机参数
set_calib_data_cam_param (CalibDataID, 0, [], CameraParam)
*查找校准对象
find_calib_object (ImageCalibration, CalibDataID, 0, 0, 0, ['max_diam_marks', 'sigma'], [300, 2])
*校准相机
calibrate_cameras (CalibDataID, Error)
*获取校准数据
get_calib_data (CalibDataID, 'camera', 0, 'params', CalibratedParam)
*获取校准对象姿态
get_calib_data (CalibDataID, 'calib_obj_pose', [0, 0], 'pose', CalibratedPose)
* 

* 后续要评估的代码的最小模块尺寸(X)已知为 0.5 毫米。

X := 0.0005
* 通过将两个点投影到校准对象平面上,这两个点之间的距离为 X,并随后提取该距离的像素值,
* 来确定模块尺寸(X)的像素值。
* 投影 3D 点
project_3d_point (CalibratedPose[0], CalibratedPose[1], CalibratedPose[2], CalibratedParam, Row1, Column1)
project_3d_point (CalibratedPose[0] + X, CalibratedPose[1], CalibratedPose[2], CalibratedParam, Row2, Column2)

* 计算两点间距离
distance_pp (Row1, Column1, Row2, Column2, ModuleSizeInPx)
* 
dev_display (ImageCalibration)
* 显示校准板
disp_caltab (WindowHandle, CalPlateDescr, CalibratedParam, CalibratedPose, 1)
dev_disp_description_text (X, ModuleSizeInPx, WindowHandle, Message)
stop ()
* 
* 校准反射率参考值。
read_image (ImageReflectanceReference, 'datacode/ecc200/pqi_smallest_module_size_reflectance')
* 应用小均值滤波器以降低噪声。
* 生成圆形区域
gen_circle (Circle, 2, 2, 1)
* 对图像应用形状均值滤波
mean_image_shape (ImageReflectanceReference, Circle, ImageMean)
* 计算图像灰度范围
min_max_gray (ImageMean, ImageMean, 0, Min, ReflectanceReference, Range)
*  '使用合适的校准目标校准反射率。'
Message := 'Calibrate the reflectance with an appropriate calibration target.'
Message[|Message|] := ''
* '反射率参考值为 ' + ReflectanceReference + '。'
Message[|Message|] := 'Reflectance reference is ' + ReflectanceReference + '.'
dev_display (ImageReflectanceReference)
* 在窗口中显示文本
dev_disp_text (Message, 'window', 'top', 'left', 'black', [], [])
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 读取图像
read_image (ImageDataCode, 'datacode/ecc200/pqi_smallest_module_size_code.png')
* 创建二维数据码模型
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
* 查找二维数据码
find_data_code_2d (ImageDataCode, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)

* 设置最小模块尺寸和孔径尺寸,孔径尺寸是该最小模块尺寸的百分比。通常使用 80%(这也是默认值)。
* 注意,默认情况下,合成孔径的大小会根据检测到的代码模块尺寸进行调整。这种行为也可以通过将
* 'quality_isoiec15415_smallest_module_size' 设置为 'adaptive' 来实现。

set_data_code_2d_param (DataCodeHandle, 'quality_isoiec15415_smallest_module_size', ModuleSizeInPx)
set_data_code_2d_param (DataCodeHandle, 'quality_isoiec15415_aperture_size', 0.8)
* 设置上述获得的反射率参考值,并对代码进行分级。
* 设置二维数据码参数
set_data_code_2d_param (DataCodeHandle, 'quality_isoiec15415_reflectance_reference', ReflectanceReference)
set_data_code_2d_param (DataCodeHandle, 'quality_isoiec15415_decode_algorithm', 'reference')
* 对二维数据码进行分级
grade_data_code_2d (DataCodeHandle, ResultHandles[0], 'isoiec15415', 'numeric', 'grades', GradingResults)
*Message:= '最终对代码进行分级'
Message := 'Finally grade a code.'
Message[|Message|] := ''
*获取字典参数(GradingResults, 'keys', [], Keys)
get_dict_param (GradingResults, 'keys', [], Keys)
for Index := 0 to |Keys| - 1 by 1
    Message := [Message,Keys[Index]$'23s' + ' = ' + GradingResults.[Keys[Index]]]
endfor

* 获取窗口区域
*设置窗口区域(329, 379, 1300, 1674*设置颜色为绿色
*设置线宽为 2
*显示图像(ImageDataCode)
*显示符号轮廓(SymbolXLDs)
*在窗口中显示文本(Message, 'window', 'top', 'left', 'black', [], []*设置显示字体(WindowHandle, 12, 'mono', 'true', 'false')
*在窗口中显示文本('注意:图像区域已调整,仅用于可视化目的。', 'window', 'top', 'right', 'black', ['box_color', 'shadow'], ['#f28d26', 'false'])
*显示程序结束消息(WindowHandle, 'black', 'true'get_part (WindowHandle, Row11, Column11, Row21, Column21)
dev_set_part (329, 379, 1300, 1674)
dev_set_color ('green')
dev_set_line_width (2)
dev_display (ImageDataCode)
dev_display (SymbolXLDs)
dev_disp_text (Message, 'window', 'top', 'left', 'black', [], [])
set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
dev_disp_text ('Note: Image Part adapted for visualization purposes.', 'window', 'top', 'right', 'black', ['box_color', 'shadow'], ['#f28d26', 'false'])
disp_end_of_program_message (WindowHandle, 'black', 'true')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值