视觉检测中,直线的宽度很好检测,即两条平行线的垂直距离,而曲线的宽度检测则需要另辟蹊径。

检测图像中曲线边缘的宽度,用以判断边缘是否崩缺,总结如下五种方法:

1.图像匹配判断

概述:建立标准图像参考,通过比对检测结果。

核心算子:

(1)参考:align_bead;

(2)检测:apply_bead_inspection_model;

参考Halcon例程:apply_bead_inspection_model.hdev。

该方法较适用于胶水检测,因为无法方便地获取崩缺的值,因而弃用,但具有参考价值,建议学习。

2.点到轮廓的距离

概述:通过二值化提取Border(边缘),提取其中一条边缘的点阵,计算该点阵的所有点到另一条边缘的距离。

核心算子:

(1)获取边缘上的点阵:get_contour_xld(Contour : : : Row, Col);

(2)计算点阵到边缘的距离:distance_pc(Contour : : Row, Column : DistanceMin, DistanceMax)

参考Halcon例程:distance_pc.hdev。

参考代码:

*二值化找Border
threshold_sub_pix(ImageReducedM1,Border, 130)
count_obj(Border,Number)
*创建数组,按长度拍排序Border
LengthTuple:=[]
for i:=1 to Number by 1
select_obj (Border, ObjectSelected, i)
length_xld(ObjectSelected,length)
LengthTuple:=[LengthTuple,length]
endfor
tuple_sort_index(LengthTuple,Indices)
*找出两条最长的轮廓
if(|Indices|>1)
select_obj(Border,MaxXLD,Indices[|Indices|-1]+1)
select_obj(Border,NextXLD,Indices[|Indices|-1-1]+1)
else
return()
endif
*获取最长轮廓的点阵
get_contour_xld(MaxXLD, Rows1, Columns1)
*计算点阵到另一个轮廓的距离
distance_pc(NextXLD,Rows1, Columns1, DistanceMin, DistanceMax)

注意:算子 distance_pc 输出两个数组,分别为最小距离数组,最大距离数组,取值时应取最小距离数组。

3.轮廓与轮廓的距离

概述:通过二值化提取一对Contours(轮廓),计算两条轮廓之间的距离。

核心算子:

(1)计算轮廓之间的距离:distance_contours_xld(ContourFrom, ContourTo : ContourOut : Mode : );

(2)获取宽度值集合:get_contour_attrib_xld(Contour : : Name : Attrib);

(3)提取OK/NG片段:segment_contour_attrib_xld(Contour : ContourPart : Attribute, Operation, Min, Max : )

参考Halcon例程:

(1)inspect_frame_width.hdev;

(2)Apply_distance_transform_xld.hdev。

参考代码:

*测量两条曲线之间的宽度
distance_contours_xld (MaxXLD, NextXLD, ContourOut, 'point_to_segment')
get_contour_attrib_xld (ContourOut, 'distance', Distance)
*提取测量宽度集中合规的部分
segment_contour_attrib_xld (ContourOut, ContourPart, 'distance', 'and', 10, 26)
display_result (MaxXLD, NextXLD, ContourPart)
*取最大值
tuple_max (Distance, WidthMax)
tuple_min (Distance, WidthMin)

4.提取骨架测量宽度

概述:提取曲线的中心骨架,再通过骨架测量曲线宽度。

核心算子:

(1)计算lines_gauss算子所需输入参数:calculate_lines_gauss_parameters( : : MaxLineWidth, Contrast : Sigma, Low, High);

(2)检测骨架及其宽度:lines_gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions : )。

参考Halcon例程:

(1)angio.hdev;

(2)lines_gauss.hdev。

5.极坐标展开曲线图像

概述:将曲线图像按极坐标展开,检测展开后的图像,再将结果图像恢复直角坐标图像。

核心算子:

(1)图像转极坐标:polar_trans_image;

(2)图像转直角坐标:polar_trans_region_inv。

参考Halcon例程:

(1)ocr_cd_print_polar_trans.hdev;

(2)vessel.hdev。

最新文章

  1. C# 属性控件2
  2. NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
  3. 在Linux下写一个简单的驱动程序
  4. 视差滚动(Parallax Scrolling)效果的原理与实现
  5. QT使用WOL实现远程一键开机(局域网)
  6. Centos6.5下一个Ceph存储集群结构
  7. ZigZag Conversion2015年6月23日
  8. WEB中间件--tomcat爆破,burp和python脚本
  9. 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
  10. js的短路
  11. Xilinx FPGA开发随笔
  12. day 7-5 守护线程
  13. JavaEE 之 RESTful
  14. JavaI/O(输入/输出)
  15. C# 中数据类型以及结构
  16. windows 8 update to windows 8.1
  17. python编码与存储读取数据(数组字典)
  18. MySQL复制搭建
  19. 老司机带你解读jQuery插件开发流程
  20. spring-boot单元测试

热门文章

  1. 使用 sh -x 进行 shell 脚本调试
  2. Java web与web gis学习笔记(二)——百度地图API调用
  3. SQL Server 2019安装 Developer 版
  4. centos下安装ansible自动化工具(超详细,包含基本使用)
  5. python常见漏洞总结
  6. 基于casbin的RBAC权限实践
  7. numpy学习笔记Ⅰ
  8. drools的简单入门案例
  9. Linux命令tar
  10. socket套接字补充、操作系统发展史、进程