之前是依靠卡尺来获取直线,也可以通过xld轮廓来截取直线段
dev_get_window (WindowHandle)
read_image (Image, 'C:/Users/10314/Desktop/pic1.png')
*Edges :提取的亚像素边缘轮廓(XLD 格式),包含边缘点的坐标和方向信息
*'canny' 边缘检测滤波器的类型,决定边缘检测的灵敏度和方向
*'lanser2':基于二阶导数的 Lanser 滤波器,适用于高对比度边缘。
*'deriche1':基于一阶导数的 Deriche 滤波器,适用于低对比度边缘。
*'canny':基于 Canny 算法的滤波器,综合性能较好(常用)。
* 'shen':基于 Shen-Castan 算法的滤波器,适用于噪声较多的图像。
* 'sobel_fast':快速 Sobel 滤波器,计算效率高但精度较低。
* 1 : 滤波器的平滑系数,控制边缘检测的灵敏度和抗噪能力。范围:0.0 ≤ Alpha ≤ 99.0 Alpha=0.5:高灵敏度(适合清晰边缘,但对噪声敏感)。
* Alpha=2.0:中等灵敏度(平衡边缘检测和抗噪)。 Alpha=5.0:低灵敏度(适合噪声较多的图像,但可能漏检弱边缘)。
* 20 边缘检测的低阈值(用于滞后阈值处理)。
* 40 边缘检测的高阈值(用于滞后阈值处理)。 Low ≤ High ≤ 255.0
edges_sub_pix (Image, Edges, 'canny', 1, 20, 40)
*Edges Contours:待分割的输入轮廓(可以是直线、多边形、曲线等)
*ContoursSplit 分割后的轮廓集合,原轮廓被拆分为多个子轮廓
*'lines_circles' Mode List of values: 'lines', 'lines_circles', 'lines_ellipses'
* 5 Smoothness 平滑系数 值越大,分割的线段/弧段越平滑(忽略细微波动 0, 3, 5, 7, 9
* 4 轮廓与拟合直线之间的最大距离(第一次迭代) Suggested values: 1.0, 1.5, 2.0, 2.5, 3.0, 3.5
* 2 轮廓与拟合直线之间的最大距离(第二次迭代) Suggested values: 1.0, 1.5, 2.0, 2.5, 3.0, 3.5
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 2, 2)
* [1] 将相邻且满足特定条件的 XLD 轮廓合并为一个轮廓
*10: MaxDistAbs 绝对最大距离阈值,用于判断两个轮廓是否相邻
* 1:MaxDistRel 相对最大距离阈值,用于动态调整合并条件 通常与 MaxDistAbs 结合使用,例如:若 MaxDistRel=0.1,则允许的最大距离为 MaxDistAbs + 0.1 * 轮廓长度
*'attr_keep' 合并模式,决定如何判断轮廓是否相邻。
*'attr_keep':保留轮廓的属性(如颜色、宽度),仅合并几何位置相邻的轮廓。
*'no_attr_keep':忽略轮廓属性,仅基于几何位置合并。
*'attr_forget':合并后丢弃所有轮廓属性。
*union_adjacent_contours_xld (ContoursSplit, UnionContours, 1, 0.1, 'attr_keep')
* [2] 主要用于将共圆的 XLD(eXtended Line Description,扩展线描述)轮廓合并
* 0.5: 两个圆弧之间的最大角度距离。默认值:0.5建议值:0.25、0.5、0.75、1.0
* 0.1:两个圆弧之间的最大重叠度。默认值:0.1 建议值:0.0、0.1、0.2
* 0.2:连接线与圆弧切线之间的最大角度。默认值:0.2 建议值:0.1、0.2、0.3、0.4、0.5
* 30:两个圆弧之间间隙的最大长度(以像素为单位)。默认值:30建议值:10、30、50、70
* 10:拟合到两个圆弧的圆之间的最大半径差。默认值:10 建议值:10、20、30
* 10: 拟合到两个圆弧的圆之间的最大中心距离。默认值:10建议值:10、20、30
* 'true'确定是否也应合并未拟合出圆的细小轮廓。默认值:'true' 值列表:'false'(否)、'true'(是)
* 1:迭代次数。默认值:1 建议值:1、2
*union_cocircular_contours_xld (ContoursSplit, UnionContours, 0.5, 0.1, 0.2, 30, 10, 10, 'true', 1)
* [3]
* 10: 两个轮廓之间间隙的最大长度(沿参考轮廓的回归线测量)。 默认值:10. 取值范围:0.0 ≤ MaxDistAbs(最大绝对距离)
* 1: 两个轮廓之间间隙的最大长度(相对于参考轮廓的长度),两者均沿参考轮廓的回归线进行测量。
* 2:第二个轮廓与参考轮廓回归线之间的最大距离。
* 0.1: MaxAngle(输入控制参数)→ 实数类型(real)两个轮廓回归线之间的最大夹角默认值:0.1
* ‘attr_keep’ 定义轮廓属性处理方式的模式,即轮廓属性是被保留还是被丢弃。 默认值:'attr_keep'(保留属性) 取值列表:'attr_forget'(丢弃属性)、'attr_keep'(保留属性)
*union_collinear_contours_xld (UnionContours, UnionContours1, 10, 1, 2, 0.1, 'attr_keep')
假设我们想查找这个圆角矩形的上方直线 1.xld的宽度 2.xld的行坐标
select_shape_xld (ContoursSplit, SelectedXLD, ['width','row'], 'and', [700,0], [99999,350])
fit_line_contour_xld (SelectedXLD, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
dev_display(Image)
dev_set_line_width(5)
disp_line (WindowHandle, RowBegin, ColBegin, RowEnd, ColEnd)
最终效果: