Halcon 金字塔与边缘检测技术解析

一,金字塔


1,金字塔工作原理

图像金字塔是通过连续下采样原始图像创建的多个分辨率版本 匹配过程从最粗糙的金字塔层(最小图像)开始,快速定位大致位置 然后在更精细的层上逐步细化位置和旋转角度

2,根据图像采集助手 显示一张图片

open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'D:/Halcon/HALCON-25.11-Progress/examples/images/rings/rings.seq', 'default', 1, -1, AcqHandle)
grab_image (Image, AcqHandle) // 显示一张图片

dev_set_draw ('margin')
dev_set_line_width (3)

3,制作模版 绘制模版区域

gen_circle (ROI_0, 247.225, 199.037, 103.427)
reduce_domain (Image, ROI_0, ImageReduced)

4,检测区域模版 获取不同分辨率下的图片

参数:

ImageReduced:用哪块图做模板

ModelImages:输出多层模糊图

ModelRegions:输出真正的模板轮廓(最重要)

NumLevels:金字塔层数(控制速度)

Contrast:对比度阈值(控制边缘干净度)

inspect_shape_model (ImageReduced, ModelImages, ModelRegions,6, 30)
dev_display (ModelImages)

5,创建模板

create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity','auto', 'auto', ModelID)
get_shape_model_contours (ModelContours, ModelID,5)


二,测量边缘对


1,根据ROI创建找边区域 并导入代码如下

gen_rectangle2 (ROI_0, 57.3401, 474.14, 0, 414.788, 8.73625)

2,创建一个仿射矩形的测量模型

前五个参数要和绘制矩形的区域保持一致

Width, Height 设置图像的宽度和高度
nearest_neighbor 找边的一个算法
MeasureHandle 测量对象的句柄

gen_measure_rectangle2 (57.3401, 474.14, 0, 414.788, 8.73625, Width, Height, 'nearest_neighbor', MeasureHandle)

3,测量边缘对的算子

1 输入图片

2 测量对象
3 平滑程度 值越大越模糊
4 30 阈值范围
5 Transition:过渡, all 忽略极性, positive:由暗到亮, negative: 由亮到暗
6 select 找到第几个边, all 找到所有的边, first 找第一个边, last找到最后一个边
7/8/9 第一条边的坐标和边缘幅度
1011/12 第二条边的坐标和边缘幅度
13 IntraDistance, 俩个边之间的距离 相当于引脚的宽度
14 InterDistance 边缘对之间距离

measure_pairs (Image, MeasureHandle, 1, 30, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)

4,绘制线的方法

disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)

dev_disp_text ('引脚的个数:'+|RowEdgeFirst|, 'image', 100, 100, 'black', [], [])

dev_set_color ('yellow')
tuple_remove (RowEdgeFirst, 0, Reduced1) // 移除RowEdgeFirst 第一个边行坐标
tuple_remove (ColumnEdgeFirst, 0, Reduced2)//移除ColumnEdgeFirst 第一个边列坐标

tuple_remove (RowEdgeSecond, |RowEdgeSecond|-1, Reduced3) //移除RowEdgeSecond 第后一个边
tuple_remove (ColumnEdgeSecond, |ColumnEdgeSecond|-1, Reduced4) //移除ColumnEdgeSecond 第后一个边

*disp_line (WindowHandle, Reduced1, Reduced2, Reduced3, Reduced4)
gen_region_line (Image, Reduced1, Reduced2, Reduced3, Reduced4)

sum1:= sum(IntraDistance) // 求所有引脚宽度和
count:= |RowEdgeFirst|
avg:= (sum1 /count)$'.2f'

dev_disp_text ('引脚的平均宽度:'+avg, 'image', 200, 200, 'black', [], [])


三, 测量边缘


1,代码拆析

【1】,创建测量模型

'nearest_neighbor 最近邻插值 不计算、不平均直接找离目标位置最近的那个像素直接用它的灰度值

gen_measure_rectangle2 (506.046, 401.258, rad(-90), 479.792, 55.9476, Width, Height, 'nearest_neighbor', MeasureHandle)

【2】,测量边

输出参数

RowEdge, 边行坐标
ColumnEdge, 列的坐标
Amplitude, 边缘幅度
Distance 距离

measure_pos (Image, MeasureHandle, 1, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)

gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 10, 0) //绘制十字形

【3】,画线

gen_region_line (RegionLines, RowEdge[0], ColumnEdge[0], RowEdge[1], ColumnEdge[1])

2,完整代码

read_image (Image, 'ic_pin')
dev_set_draw ('margin')
get_image_size (Image, Width, Height)
gen_rectangle2 (ROI_0, 506.046, 401.258, rad(-90), 479.792, 55.9476)

*创建测量模型
gen_measure_rectangle2 (506.046, 401.258, rad(-90), 479.792, 55.9476, Width, Height, 'nearest_neighbor', MeasureHandle)

*测量边的
*输出参数
*RowEdge, 边行坐标
*ColumnEdge, 列的坐标
*Amplitude, 边缘幅度
*Distance 距离
measure_pos (Image, MeasureHandle, 1, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 10, 0)

dev_disp_text ('上高度:'+ Distance[0], 'image', 100, 100, 'black', [], [])
dev_disp_text ('中间高度:'+ Distance[1], 'image', 100, 500, 'black', [], [])
dev_disp_text ('下高度:'+ Distance[2], 'image', 100, 900, 'black', [], [])
gen_region_line (RegionLines, RowEdge[0], ColumnEdge[0], RowEdge[1], ColumnEdge[1])

输出结果:

相关推荐
树獭非懒2 小时前
AI大模型小白手册 | RAG进阶:从胡说八道到引经据典
人工智能
攻城狮7号2 小时前
SaaS的末日重构:AI Agent浪潮下的危机与新生
人工智能·ai agent·saas末日·saas升级重构
2601_949925182 小时前
空运舱位突发爆舱?解析 AI Agent 如何在 2 小时内重构物流应急响应底层逻辑
人工智能·重构·物流rpa
FluxMelodySun2 小时前
机器学习(二十八) 特征选择与常见的特征选择方法
人工智能·机器学习
小陈工2 小时前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
香港科大商学院内地办事处2 小时前
港科资讯|郑光廷教授出席国际科技组织发展与全球科技治理论坛 分享协作实践
人工智能·科技
Westward-sun.2 小时前
基于 OpenCV DNN 模块实现图像风格迁移
人工智能·神经网络·opencv·计算机视觉·dnn
AI枫林晚3 小时前
源码解析Claude Code 项目 queryLoop 运行机制分析
人工智能·架构
AI攻城狮3 小时前
OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡
人工智能·云原生·aigc