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, RowEdge0, ColumnEdge0, RowEdge1, ColumnEdge1)

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 ('上高度:'+ Distance0, 'image', 100, 100, 'black', \[\], \[\])
dev_disp_text ('中间高度:'+ Distance1, 'image', 100, 500, 'black', \[\], \[\])
dev_disp_text ('下高度:'+ Distance2, 'image', 100, 900, 'black', \[\], \[\])
gen_region_line (RegionLines, RowEdge0, ColumnEdge0, RowEdge1, ColumnEdge1)

输出结果:

相关推荐
2301_7681034916 小时前
AI视频创作Agent实战03:DeepSeek文案裂变与草稿版本控制
人工智能
火山引擎开发者社区16 小时前
Anker 首届黑客松挑战赛|9 月 7 日报名启动
人工智能
Dawson Zhu18 小时前
工作流与 Agent 的工程选型:从“控制权归属“看 LLM 应用架构
人工智能·语言模型·架构·aigc·agi
计算机源码社18 小时前
【大数据项目实战】基于大数据的影视内容生态综合质量分析与可视化-基于数据挖掘的影视内容类型共现与口碑聚类分析系统
大数据·人工智能·python·数据挖掘·数据分析·毕业设计·课程设计
C^h18 小时前
pytorch 适合初学者 0基础学习
人工智能·pytorch·python
Rocky Ding*18 小时前
【三年面试五年模拟】2026-09-06 拼多多 AI Agent研发岗秋招笔试4道算法题完整题解
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·拼多多
小柯南敲键盘18 小时前
跨马翻译:AI批量图片翻译工具,跨境电商视频字幕翻译与智能抠图一体搞定
人工智能·python·音视频
luckystar513~19 小时前
Geo + AI:【时空智能体】技术剖析
人工智能·ai·gis·geoai·空间智能体·时空智能体
吨吨ai19 小时前
2026年9月8日|GPT‑6 Astra + Codex:Pro 开发者的 AI Agent 工具链
人工智能·gpt
leoZ23119 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端