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)

输出结果:

相关推荐
清酒难寻9 小时前
深度学习进阶(二十四)Swin 的二维 RPE
人工智能·深度学习
步步为营DotNet10 小时前
借助 Microsoft.Extensions.AI 与 ASP.NET Core 10 实现智能 Web 应用故障预测
人工智能·microsoft·asp.net
AI创界者10 小时前
零基础上手!ComfyUI + LTX-2.3 图生视频完整工作流搭建与调优指南(附避坑细节)
大数据·人工智能
怕浪猫10 小时前
AI图片工具到底有哪些?一份按能力维度整理的清单
人工智能
hongmai66688810 小时前
FH8856V310芯片详解:6M高清+0.5TOPS算力,赋能智能安防新方案
人工智能·单片机·嵌入式硬件·物联网·智能家居
一颗小树x10 小时前
NVIDIA Jetson Thor 运行 LLM / VLM:模型全整理与 vLLM 实践
人工智能·llm·jetson·vllm
每日综合10 小时前
蓝白风暴席卷BW2026!雷克沙展台首日燃情纪实
人工智能
To_OC10 小时前
手搓 LangChain 工具调用:原来 Agent 的核心逻辑,就是个 while 循环
人工智能·langchain·llm
Drgfd10 小时前
机器人从工厂走进生活:通用机器人开启大众商用时代
人工智能
硕迪科技SOLIDWORKS11 小时前
SOLIDWORKS与ERP对接不再是研发孤岛:硕迪科技数据同步方案让BOM流转提速百分之三百
人工智能·科技·solidworks与erp