当前位置: 首页 > news >正文

【机械视觉】Halcon—【十二、边缘提取】

【机械视觉】Halcon—【十二、边缘提取】

目录

【机械视觉】Halcon—【十二、边缘提取】

Halcon边缘提取算子详解与应用场景

1. 一阶导数边缘检测算子

(1) Sobel算子

(2) Prewitt算子

(3) Roberts算子

2. 二阶导数边缘检测算子

(1) Laplacian算子

3. Canny边缘检测(最优边缘检测)

4. 亚像素级边缘检测

(1) edges_sub_pix

(2) lines_gauss(高斯线检测)

5. 其他边缘检测算子

(1) Frei-Chen算子

(2) Kirsch算子

总结:如何选择合适的边缘检测算子?

例子

区域增长原理


Halcon边缘提取算子详解与应用场景

Halcon提供了多种边缘提取方法,包括一阶导数算子(如Sobel、Prewitt、Roberts)二阶导数算子(如Laplacian)Canny边缘检测亚像素级边缘检测等。不同算子适用于不同场景,如工业检测(高精度测量)医学图像分析(弱边缘提取)自动驾驶(实时边缘检测)等。


1. 一阶导数边缘检测算子

基于梯度计算,适用于快速边缘检测,但对噪声较敏感。

(1) Sobel算子

函数:

sobel_amp(Image, EdgeAmplitude, FilterType, Size)  % 计算梯度幅值
sobel_dir(Image, EdgeAmplitude, EdgeDirection, FilterType, Size)  % 计算梯度幅值和方向

参数说明:

  • FilterType:滤波方式('sum_abs'绝对值求和、'sum_sqrt'平方和开方、'thin_max'最大梯度)

  • Size:卷积核大小(3、5、7、9等,越大抗噪性越强但边缘越模糊)

特点:

  • 计算水平和垂直方向的梯度,适合检测垂直和水平边缘

  • 对噪声有一定的平滑作用,但不如高斯类算子(如Canny)。

应用场景:

  • 工业检测(如PCB板边缘、零件轮廓)

  • 快速边缘提取(实时性要求较高的场景)


(2) Prewitt算子

函数:

prewitt_amp(Image, EdgeAmplitude)  % 计算梯度幅值
prewitt_dir(Image, EdgeAmplitude, EdgeDirection)  % 计算梯度幅值和方向

特点:

  • 类似Sobel,但卷积核不同(Sobel更注重中心像素,Prewitt更平均)。

  • 计算速度较快,但边缘定位精度略低于Sobel。

应用场景:

  • 医学图像边缘检测(如X光片中的骨骼轮廓)

  • 简单场景下的快速边缘提取(如文档扫描)


(3) Roberts算子

函数:

roberts(Image, EdgeAmplitude, FilterType)

参数说明:

  • FilterType'roberts_max'(取最大值)、'roberts_sum'(求和)

特点:

  • 使用2×2卷积核,计算简单,但对噪声敏感。

  • 适合高对比度图像的边缘检测。

应用场景:

  • 高对比度图像(如黑白条形码、二维码)

  • 计算资源受限的嵌入式设备(如小型工业相机)


2. 二阶导数边缘检测算子

基于二阶微分(Laplacian),检测灰度突变点(过零点),对噪声敏感,通常需要先做高斯平滑。

(1) Laplacian算子

函数:

laplace(Image, ImageLaplace, ResultType, MaskSize, FilterMask)

参数说明:

  • ResultType:输出类型('byte''int2'等)

  • MaskSize:卷积核大小(3、5、7等)

  • FilterMask'positive'(正Laplacian)、'negative'(负Laplacian)

特点:

  • 对噪声敏感,通常需要先做高斯滤波gauss_filter)。

  • 能检测边缘的过零点,但边缘较粗。

应用场景:

  • 边缘增强(如指纹识别)

  • 结合高斯滤波用于LOG(Laplacian of Gaussian)边缘检测


3. Canny边缘检测(最优边缘检测)

Canny是最经典的边缘检测方法,包括高斯平滑→梯度计算→非极大值抑制→双阈值检测

函数:

edges_image(Image, ImaAmp, ImaDir, Filter, Alpha, NMS, Low, High)

参数说明:

  • Filter:滤波器类型('canny''deriche1''deriche2''lanser1''lanser2'

  • Alpha:平滑系数(越小越平滑,推荐0.5~2.0)

  • NMS:非极大值抑制('nms'启用,'none'禁用)

  • LowHigh:滞后阈值(低阈值用于弱边缘,高阈值用于强边缘)

特点:

  • 抗噪能力强(高斯平滑)。

  • 边缘连续性好(双阈值连接)。

  • 计算量较大(相比Sobel)。

应用场景:

  • 高精度工业检测(如半导体晶圆缺陷检测)

  • 自动驾驶(车道线检测)

  • 医学图像(血管分割)


4. 亚像素级边缘检测

适用于高精度测量,返回XLD(亚像素轮廓),可用于Halcon的几何测量(如measure_pos)。

(1) edges_sub_pix

函数:

edges_sub_pix(Image, Edges, Filter, Alpha, Low, High)

参数说明:

  • Filter'canny''lanser2''deriche2'

  • Alpha:平滑系数(推荐1.0~2.0)

  • LowHigh:双阈值

特点:

  • 亚像素精度(精度可达0.1像素)。

  • 输出XLD轮廓,可用于拟合直线、圆等几何形状

应用场景:

  • 精密尺寸测量(如齿轮齿距、PCB线宽)

  • 3D视觉(结构光边缘提取)


(2) lines_gauss(高斯线检测)

函数:

lines_gauss(Image, Lines, Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions)

参数说明:

  • Sigma:高斯平滑系数(越大越平滑)

  • LightDark'light'(亮线)、'dark'(暗线)

  • ExtractWidth:是否提取线宽('true'/'false'

特点:

  • 适用于细线检测(如电路板走线、纤维检测)。

  • 可返回线的宽度信息

应用场景:

  • FPC柔性电路板检测

  • 纺织行业(纤维直径测量)


5. 其他边缘检测算子

(1) Frei-Chen算子

函数:

frei_amp(Image, EdgeAmplitude)  % 幅值
frei_dir(Image, EdgeAmplitude, EdgeDirection)  % 幅值+方向

特点:

  • 斜边缘响应更好,计算速度较快。

(2) Kirsch算子

函数:

kirsch_amp(Image, EdgeAmplitude)  % 幅值
kirsch_dir(Image, EdgeAmplitude, EdgeDirection)  % 幅值+方向

特点:

  • 使用8方向模板,适合复杂边缘检测


总结:如何选择合适的边缘检测算子?

算子特点适用场景
Sobel计算快,适合水平和垂直边缘PCB检测、简单轮廓提取
Prewitt类似Sobel,但更平均医学图像、文档扫描
Roberts2×2卷积核,计算快但噪声敏感高对比度图像(条形码)
Laplacian二阶微分,需高斯平滑边缘增强(指纹识别)
Canny最优边缘检测,抗噪强高精度工业检测、自动驾驶
edges_sub_pix亚像素精度,XLD输出精密尺寸测量(齿轮、PCB)
lines_gauss高斯线检测,可测线宽电路板走线、纤维检测

推荐选择:

  • 实时检测 → Sobel / Prewitt

  • 高精度测量 → Canny / edges_sub_pix

  • 细线检测 → lines_gauss

  • 抗噪需求高 → Canny / Deriche滤波器


例子

read_image (Image, 'fabrik')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)*边缘提取
*参数3 提取边缘的算法
*'sum_abs':水平梯度和竖直梯度绝对值和 + 5 一般检测
* sum_sqrt:水平梯度和竖直梯度平方根和  + 3  精细检测
* sum_abs':水平梯度和竖直梯度绝对值和 + 7  抗噪检测
*参数4 滤波核的大小
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 5)*laplace 计算图像的时候采用的拉普拉斯算子,可以增强边缘细节,主要边缘检测和图像锐化 
*'absolute' 输出图像都是正直 'signed' 保留正负值
*MaskSize:滤波核 尺寸 写成奇数
*'n_4' 4邻域的矩阵 +size5/7 抗噪检测
*'n_8' 8邻域矩阵 + size3 精细检测
laplace (Image, ImageLaplace, 'signed', 5, 'n_8')*该算子特点对噪声比较敏感。建议先平滑操作
prewitt_amp (Image, ImageEdgeAmp)threshold (ImageEdgeAmp, Region, 20, 255)
dev_set_color ('green')
*骨骼化操作:可以将一个区域缩减为单像素宽的骨架进行表示,同时保留原始区域拓扑结构和特征结构
skeleton (Region, Skeleton)
dev_display (Skeleton)


区域增长原理

以坐标为种子坐标,向四周进行搜索,寻找合适的区域,这个区域满足灰度值与当前的均值图

read_image (Image, 'fabrik')
*对图像进行中值处理,以2为半径的圆所有像素中间值
median_image (Image, ImageMedian, 'circle', 2, 'mirrored')
regiongrowing (ImageMedian, Regions, 1, 1, 2, 5000)
*提取区域的中心点的区域
shape_trans (Regions, RegionTrans, 'inner_center')
connection (RegionTrans, ConnectedRegions)
*获取提取区域的中心点坐标
area_center (ConnectedRegions, Area, Row, Column)*regiongrowing_mean:以坐标为种子坐标,向四周进行搜索,寻找合适的区域,这个区域满足灰度值与当前的均值图
*对应的区域的灰度值差小于5的,并且区域像素数大于100*参数1 按照中值滤波进行平滑
*参数2 Regions1 输出的区域
*参数3 参数4Row, Column种子生在点坐标
*参数5  灰度值差异值
*参数6  过滤的面积
regiongrowing_mean (ImageMedian, Regions1, Row, Column, 25, 100)*种子点选择在图像的左上角,逐行扫描像素点 ,比较的是相邻的1*1像素,如果像素灰度值差异小于2,归为一个区域
*regiongrowing (ImageMedian, Regions, 1, 1, 2, 5000)

相关文章:

  • 达梦数据库CASE WHEN条件
  • PP-OCRv5 ubuntu20.04 OCR识别服务
  • 博科FC交换机管理IP地址用户名密码
  • MCP和Function Calling
  • SpringCloud优势
  • 力扣面试150题--蛇梯棋
  • Linux初步介绍
  • C#中LINQ技术:自然语言集成与统一数据操作的艺术
  • 【题解-洛谷】B4292 [蓝桥杯青少年组省赛 2022] 路线
  • 3D Web轻量化引擎HOOPS Communicator赋能一线场景,支持本地化与动态展示?
  • C语言中的段错误(Segmentation Fault):底层原理及解决方法
  • 蓝桥杯 回文日期
  • BIO、NIO、AIO的区别
  • GAMES202-高质量实时渲染(Assignment 4)
  • 你应该使用的 php 加解密函数
  • 【开发技术】Abp.vnext下的JWT处理,添加多种认证处理方式
  • ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!
  • 完整的加密解密aes
  • C#中清空DataGridView的方法
  • rk3568 , mipi 屏幕调试(3588s 可以显示,但是3568 不能显示)
  • 公司网站表达的内容/独立站建站平台有哪些
  • 西安做网站企业/快速提升关键词排名软件
  • 昆明网站建设公司/长春百度网站快速排名
  • 传媒公司营业执照怎么办理/免费广州seo
  • 吉林企业网络推广方法/安卓优化大师官方下载
  • 网站推荐广告模板/怎样上百度做广告