halcon例程学习笔记(9)---制药的检测check_blister.hdev

本文介绍了一种使用Halcon进行制药行业气泡检测的方法。通过创建参考模型,利用形状转换和BLOB分析对每个腔室的内容进行分割和分类。重点在于参考图像的定位和形状匹配,以及如何利用vector_angle_to_rigid算子进行图像变换。此外,还复习了min_max_gray和orientation_region等算子的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          这个例子演示了制药行业的应用。任务是检查自动填充的水泡内容。第一图像(参考)是用来定位的室内泡状作为参考模型,然后用它来调整的后续图像沿此参考形状。利用BLOB分析每个腔室的内容被分割的几个形状特征,最后分类。

          通过本例程很好的学会了对于规则形状一样的检测对象,当出现故障时,物体变为不规则,将其分类,重点是在位置的形状情况下进行定位,本例程很好的展示了参考图像的定位方法,使用一幅类似,且完整的药品图像,进行位姿调整,提取各个药品的位置,进行药定位。然后建立相似的参考形状,获得需要检测图像的位置。

          本例程学习,更好的理解了vector_angle_to_rigid算子的应用。提供参考形状,后续图像按照参考图像进行变换

          同时学习巩固了一下常用算子例如min_max_gray、orientation_region等的使用

          例程代码如下:

dev_close_window ()
dev_update_off ()
read_image (ImageOrig, 'blister/blister_reference')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
*
* In the first step, we create a pattern to cut out the chambers in the
* subsequent blister images easily.
threshold (ImageOrig, Region, 90, 255)
shape_trans (Region, Blister, 'convex')
orientation_region (Blister, Phi)
area_center (Blister, Area1, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
gen_empty_obj (Chambers)
for I := 0 to 4 by 1
 

### Halcon 中关于缺陷检测的问题及解决方案 #### 基于 Blob 分析的药片缺陷检测 对于一板药片的缺陷检测,可以通过 blob 分析来实现。具体来说,在 `check_blister.hdev` 例程中展示了如何利用 HALCON 的 blob 功能来进行此类检测[^1]。 ```hdevelop * 加载图像并预处理 read_image (Image, 'blister') reduce_domain (Image, Region, ImageReduced) * 进行形态学操作以增强特征 dilation_circle (Region, RegionDilation, 0.8) * 执行 blob 分析 connection (RegionDilation, ConnectedRegions) select_shape_std (ConnectedRegions, Selected Regions, 'max_area', 500) * 计算形状特征用于分类 shape_trans (SelectedRegions, Features, 'elliptic_axis') * 输出结果 disp_message (WindowHandle, 'Defect detected!', 'window', Row, Column, Color, ...) ``` 此方法能够有效识别药片是否存在缺失或其他形式的物理损伤等问题。 #### 条形码读取错误及其解决办法 当遇到条形码无法正常被 HALCON 读取的情况时,可以尝试通过设置特定参数来改善性能。例如: - 调整扫描方向数量; - 修改最小/最大宽度比例限制; - 更改亮度阈值等。 这些都可以借助 `set_bar_code_param()` 函数完成配置调整工作[^2]。 ```cpp // 设置条形码参数示例 Hlong result; char *param_name = "num_scans"; int num_scans_value = 3; result = set_bar_code_param(HobjectID,param_name,num_scans_value); if(result != H_MSG_TRUE){ printf("Failed to set bar code parameter.\n"); } ``` 以上措施有助于提高复杂环境下的一维条形码识读成功率。 #### 结合 C# 实现更高效的药品质量控制系统 为了进一步提升系统的灵活性与可扩展性,还可以考虑采用 C# 和 HALCON 组合的方式开发应用程序。这种方式不仅继承了两者各自的优势特性,还便于集成到现有的 .NET 平台之上,从而简化部署流程并降低维护成本[^4]。 ```csharp using System; using HalconDotNet; // 引入HALCON库 class Program { static void Main(string[] args) { try{ HTuple hv_WindowHandle; // 初始化窗口显示环境... // 开始执行具体的图像采集和处理逻辑... Console.WriteLine("Program finished successfully."); } catch(Exception e){ Console.Error.WriteLine($"An error occurred: {e.Message}"); } } } ``` 上述代码片段仅作为演示用途,并未包含完整的业务功能实现细节;实际项目中需根据需求定制相应算法模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值