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)

输出结果:

相关推荐
百度一下吧5 分钟前
Codex 使用操作指南
人工智能
正经教主6 分钟前
【FDE系列】阶段3:Day 55:综合实战 — 巡检报告生成器与本周收官
人工智能·fde
和裕16 分钟前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
Ai-_Man23 分钟前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
2601_9659690625 分钟前
教师考完AI证书后,应该完成哪些教学项目?
人工智能
代码方舟33 分钟前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化电子投保实名核验网关
大数据·人工智能·架构·自动化
JavaPub-rodert1 小时前
AI Agent 怎么接上长期记忆?从 Graphiti MCP Server 讲透 MCP、Episode、搜索与记忆工具化
人工智能
大模型任我行1 小时前
Meta:强化学习权重传输不再卡顿
人工智能·语言模型·自然语言处理·论文笔记
sugarzhangnotes1 小时前
【无标题】
开发语言·人工智能·python
盼小辉丶1 小时前
PyTorch强化学习实战(27)——进化策略在强化学习中的应用
人工智能·pytorch·深度学习·强化学习