一、代码的主要思路为
-
初始化和环境设置:
- 关闭所有窗口,打开一个新的窗口适应图像大小,并设置字体和线宽,为后续显示做准备。
- 读取第一张示例图像(软奶酪包装),用于创建形状模型。
-
创建形状模型:
- 将图像转换为灰度图像。
- 手动定义三种口味奶酪片的区域(使用多边形填充生成区域),分别对应奶油、火腿和辣椒。
- 对每个区域进行轻微腐蚀处理,以去除边缘噪声。
- 分别针对每种口味的区域,使用
reduce_domain
减少处理范围,然后使用create_shape_model
创建形状模型。每个模型都考虑了全方位的角度变化,使用了点减少策略以优化性能,并启用了极性信息来提高匹配的准确性。
-
批量图像处理和匹配:
- 设置一个循环,处理18张图像(编号为
soft_cheese_01
至soft_cheese_18
)。 - 对每张图像执行以下步骤:
- 读取图像并转为灰度。
- 使用阈值分割图像,然后填充区域空洞,接着进行开运算以清理杂乱边缘。
- 准备图像以进行形状匹配。
- 使用
find_shape_models
在处理后的图像中查找与之前创建的三种模型的匹配项,得到匹配的中心位置、角度、得分和对应模型索引。 - 如果找到了匹配项,计算匹配到的模型数量,通过颜色显示匹配轮廓,并收集匹配类型、角度等信息。
- 使用自定义的
display_statistic
函数显示匹配统计信息,包括每种口味的数量、期望的数量(PaprikaCount, CreamCount, HamCount)以及角度信息。 - 如果不是最后一张图像,显示提示信息等待用户确认继续。
- 设置一个循环,处理18张图像(编号为
-
代码功能
整个脚本的目的是通过形状匹配技术自动检查每个奶酪包装是否含有正确的奶酪片组合(每包需含4片奶油、2片火腿和2片辣椒),并提供详细的检查统计信息,对于不符合规定的包装,可以进一步处理或标记。
展示了HALCON在工业视觉检测领域的应用,特别是形状匹配在产品分类和质量控制中的强大功能。
二、具体代码注释如下
* The following example shows a production line, which carries
* packages of soft cheese. The cheese packages consist of three
* types of flavor: cream, ham and paprika. During quality
* inspection each package is checked for its right content.
* Each has to contain 4 pieces of cream cheese ('Sahne'),
* 2 pieces of ham ('Schinken') and 2 pieces of paprika ('Paprika')
* - any deviation is reported otherwise. To obtain the number of
* each flavor, we use the shape-based matching feature. After we
* define the models, we count the occurrence of the models to
* get the actual number of the cheese flavors. Finally we give out
* the statistics for each inspection.
* 下面的例子展示了一个生产线,它运输软奶酪的包装。奶酪包装有三种口味:奶油、火腿和辣椒粉。在质量检查过程中,每个包装都要检查其正确的内容物。
* 每个包装必须包含4块奶油奶酪('Sahne')、2块火腿('Schinken')和2块辣椒粉奶酪('Paprika')- 任何偏差都会被报告,否则不会。
* 为了获得每种口味的数量,我们使用基于形状的匹配特性。在我们定义了模型之后,我们计算模型的出现次数以获得实际的奶酪口味数量。最后,我们为每次检查提供统计数据。
*
dev_close_window ()
dev_update_off ()
read_image (Image, 'food/soft_cheese_01')
dev_open_window_fit_image (Image, 0, 0, -1, -1