Halcon 边缘提取

通常将边缘检测方法氛围两类:基于查找的方法和基于零穿越的方法。除此以外还有Canny边缘检测方法,统计判别方法等。

1)基于查找的方法:通过寻找图像异界导数中的最大值和最小值来检测边界,通常将边界定位在梯度最大的方向,是基于一阶导数的边缘检测方法。

2)基于零穿越的方法:通过寻找图像二阶导数零穿越来寻找边界,通常是拉普拉斯过零点活非线性差分表示过的零点,是基于二阶导数的边缘检测方法。

基于异界单数的边缘检测算子包括Robert算子,Sobel算子,Prewitt算子等,他们都是梯度算子;介于二阶导数的边缘检测算子主要是高斯—拉普拉斯边缘检测算子。

本章针对roberts,sobel_amp,prewitt_amp,kirsch_amp,laplace_of_gauss,edges_image,edges_color_sub_pix进行效果展示。

read_image (Image, 'E:/Halcon数据/资源图片/14拉pin针/Down/2022_08_31_11_40_42_3090.bmp')
gen_rectangle1 (ROI_0, 133.207, 744.543, 990.889, 1669.51)
reduce_domain (Image, ROI_0, ImageReduced)
crop_domain (ImageReduced, ImagePart)


get_image_size (ImagePart, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*Roberts算子是利用局部差分算子寻找边缘,特点是边缘定位比较准,但是容易丢失一部分边缘,同时由于图像没有经过平滑处理,因此不具有抑制噪声的能力。该算子对具有陡峭边缘且噪声少的图像处理效果好。
dev_display (ImagePart)
roberts (ImagePart, ImageRoberts, 'gradient_sum')


dev_display (ImagePart)
roberts (ImagePart, ImageRoberts1, 'gradient_max')


dev_display (ImagePart)
roberts (ImagePart, ImageRoberts2, 'roberts_max')

*Sobel由于采用3*3的模板可以避免在像素之间的内差点上计算梯度,很容易在空域出现。Sobel算子边缘检测器不但可以产生较好的边缘检测效果,而且由于引入了局部平均,所以受噪声的影响也比较小,当使用较大的模板时,该算子的抗噪声特性会更好,但是同时会增大计算量,并且得到的边缘比较粗糙。Sobel算子对噪声具有平滑作用,可提供较为精确的边缘方向信息,但是由于局部平均的影响,也会检测出许多伪边缘,而且边缘定位精度不高,故此,常用于精度要求不高的场合。
dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude1, 'sum_abs', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude2, 'thin_sum_abs', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude3, 'thin_max_abs', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude4, 'sum_sqrt', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude5, 'x', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude6, 'y', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude7, 'sum_abs_binomial', 7)


dev_display (ImagePart)
sobel_amp (ImagePart, EdgeAmplitude8, 'thin_sum_abs_binomial', 7)

*Prewitt算子与Sobel算子的方程式完全相同,只是常量C不同。边缘检测器对边缘的走向有些敏感。
dev_display (ImagePart)
prewitt_amp (ImagePart, ImageEdgeAmp)


*Kirsch由k0-k7八个方向的模板决定,该算子通过k0-k7的模板元素分别与当前像素点的3*3模板区域像素点做乘求和,然后选择八个值中最大的值作为中央像素的边缘强度。
dev_display (ImagePart)
kirsch_amp (ImagePart, ImageEdgeAmp1)

*高斯_拉普拉斯是一个二阶导数,对噪声具有较强的敏感性,而且其幅值会产生双边缘,边缘方向的不可检测行也是拉普拉斯算子的缺点,因此一般不会以其原始形式用于边缘检测。
dev_display (ImagePart)
laplace_of_gauss (ImagePart, ImageLaplace, 2)


dev_display (ImagePart)
laplace_of_gauss (ImagePart, ImageLaplace, 6)


dev_display (ImagePart)
laplace_of_gauss (ImagePart, ImageLaplace, 10)

*Canny是一种具有较好边缘检测性能的算子,该算子利用高斯函数的一阶微分性质,吧边缘检测问题转为检测准则函数极大值的问题,可在噪声抑制和边缘检测之间取得较好的这种效果。
dev_display (ImagePart)
edges_image (ImagePart, ImaAmp, ImaDir, 'canny', 2.5, 'nms', 10, 80)
threshold (ImaAmp, Region, 30, 255)
skeleton (Region, Skeleton)
gen_contours_skeleton_xld (Skeleton, Contours, 1, 'filter')
dev_display (ImagePart)
dev_set_color ('red')
dev_display (Contours)

*亚像素级别的边缘提取
dev_display (ImagePart)
edges_color_sub_pix (ImagePart, Edges, 'canny', 1, 20, 40)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值