C#Halcon从零开发_Day8_测量边缘对

部署运行你感兴趣的模型镜像

一、引言

与矩形相垂直的直线边缘对

  • 几何关系:这里的“垂直”指的是直线边缘对与矩形的长轴方向垂直。例如,若矩形长轴为水平方向,那么与之垂直的直线边缘对就是竖直方向的。这些直线边缘对通常出现在矩形的边缘位置,比如矩形的左右两侧边缘附近。

  • 边缘对特征:边缘对由两条直线边缘组成,这两条边缘在灰度过渡类型上相反,比如一条是从亮到暗的边缘,另一条则是从暗到亮的边缘,且它们在空间位置上相互对应,共同构成一个边缘对。在Halcon中,通过measure_pairs算子可以提取这样的边缘对,该算子会在测量区域内生成等距的轮廓线,垂直于矩形长轴方向,对轮廓线灰度值进行高斯滤波后,计算一阶导数以定位边缘候选点,再根据灰度过渡类型和幅值阈值进行配对,从而得到符合要求的直线边缘对。

二、检测矩形框的边缘对

*提取与矩形或圆环弧(环形弧)相垂直的直线边缘对
read_image (Image, 'D:/Desktop/pic4.jpg')
get_image_size (Image, Width, Height)
dev_get_window (WindowHandle)

draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)

* 1:高斯平滑(Gaussian smoothing)中的西格玛(Sigma) Sigma越大-高斯函数曲线更宽-计算每个像素点的新值时会考虑更大邻域内的像素

*    产生更强的平滑效果,去除图像中较大的噪声,也可能导致图像边缘模糊;  需要保留图像中一些重要边缘信息的同时去除少量噪声时,就会选择较小的Sigma值。
*    Default: 1.0  Value range: 0.4 ≤ Sigma ≤ 100 (lin) Suggested values: 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0

* 50:阈值(最重要的参数) 最小边缘幅度,灰度值 相差超过该值就会被检索!

* ‘all’:极性  亮区-暗区上升沿/暗区-亮区上升沿  List of values: 'all', 'negative', 'positive'  negative(只检测亮-暗)  'all_strongest', 'negative_strongest', 'positive_strongest'

* 'all':端点的选择 List of values: 'all', 'first', 'last'

* RowEdgeFirst:是一个点的集合,有多少个边缘对,就会有几个点

* AmplitudeFirst:第一个边缘的边缘振幅(带符号)

IntraDistance:一个边缘对中两个边缘之间的距离,本例子中会输出两段距离。

InterDistance:相邻边缘对之间的距离。
measure_pairs (Image, MeasureHandle, 1, 50, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
*dev_clear_window ()
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
for Index := 0 to 1 by 1
    dev_disp_text (Index+'起始点', 'image', RowEdgeFirst[Index]-35, ColumnEdgeFirst[Index], 'green', ['box'], ['false'])
    gen_cross_contour_xld (Cross2, RowEdgeFirst[Index], ColumnEdgeFirst[Index], 15, rad(45))
    dev_disp_text (Index+'终止点', 'image', RowEdgeSecond[Index], ColumnEdgeSecond[Index], 'yellow', ['box'], ['false'])
    gen_cross_contour_xld (Cross1, RowEdgeSecond[Index],  ColumnEdgeSecond[Index], 15, rad(45))
endfor

*两种方法测量边缘对之间的记录,measure_pos会生成三组距离:边缘对1宽度、中间距离、边缘对2宽度;distance_pp方法测量的是直接两点的距离
measure_pos(Image, MeasureHandle, 1, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
distance_pp (RowEdgeFirst[0], ColumnEdgeFirst[0], RowEdgeSecond[0], ColumnEdgeSecond[0], Distance1)

最终效果为:

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值