热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

模板匹配–卡尺工具找圆

金属表面圆孔的识别与定位步骤:1.模板匹配的方式找到圆孔  图片质量不好,对比度较差,需要对图像进行预处理,使图像变得更清楚,对比度变强;   illuminate,equ_his

金属表面圆孔的识别与定位

步骤:

1. 模板匹配的方式找到圆孔

    图片质量不好,对比度较差,需要对图像进行预处理,使图像变得更清楚,对比度变强;

    illuminate,equ_histo_image

    

 

   模板匹配获取圆孔的的轮廓

2. 由第一步获取轮廓,拟合一个圆形,再通过卡尺工具得到圆孔的圆,得到圆心坐标,即可实现精定位。

1 list_files('E:/学习/Halcon/模板匹配/金属圆环', 'files', Files)
2 tuple_regexp_select(Files, '.*', Selection)
3
4 read_image(Image, Files[0])
5
6 *图像预处理
7 illuminate(Image, ImageIlluminate, 101, 101, 0.7)
8 equ_histo_image(ImageIlluminate, ImageEquHisto)
9 dev_set_draw('margin')
10 gen_circle (ROI_0, 657.5, 516.629, 38.984)
11
12 reduce_domain(ImageEquHisto, ROI_0, ImageReduced)
13 inspect_shape_model(ImageReduced, ModelImages, ModelRegions, 4, 40)
14
15 create_shape_model(ImageReduced, 4, -0.39, 0.79, 'auto', 'auto', 'use_polarity', 40, 5, ModelID)
16 get_shape_model_contours(ModelContours, ModelID, 1)
17 find_shape_model(Image, ModelID, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
18
19 vector_angle_to_rigid(0, 0, 0, Row, Column, 0, HomMat2D)
20 affine_trans_contour_xld(ModelContours, ContoursAffinTrans, HomMat2D)
21 dev_clear_window()
22 dev_display(Image)
23 dev_display(ContoursAffinTrans)
24 for I := 0 to |Files|-1 by 1
25 read_image(Image, Files[I])
26 illuminate(Image, ImageIlluminate, 101, 101, 0.7)
27 equ_histo_image(ImageIlluminate, ImageEquHisto)
28 find_shape_model(ImageEquHisto, ModelID, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
29
30 vector_angle_to_rigid(0, 0, 0, Row, Column, 0, HomMat2D)
31 affine_trans_contour_xld(ModelContours, ContoursAffinTrans, HomMat2D)
32
33 dev_clear_window()
34 dev_display(ImageEquHisto)
35 dev_display(ContoursAffinTrans)
36
37 union_adjacent_contours_xld(ContoursAffinTrans, UnionContours, 100, 50, 'attr_keep')
38 dev_set_color('green')
39 dev_display(UnionContours)
40 length_xld(UnionContours, Length)
41 tuple_max(Length, Max)
42 tuple_find(Length, Max, Indices)
43
44 select_obj(UnionContours, ObjectSelected, Indices+1) //获取外圆的轮廓
45 dev_clear_window()
46 dev_display(ImageEquHisto)
47 fit_circle_contour_xld(ObjectSelected, 'algebraic', -1, 0, 0, 3, 2, CircleRow, CircleColumn, CircleRadius, StartPhi, EndPhi, PointOrder)
48 gen_circle(Circle, CircleRow, CircleColumn, CircleRadius)
49 dev_display(Circle)
50
51 create_metrology_model(MetrologyHandle)
52 CircleParam :=[CircleRow, CircleColumn, CircleRadius]
53 add_metrology_object_generic(MetrologyHandle, 'circle', CircleParam, 10, 5, 1, 30, [], [], Index)
54
55 set_metrology_object_param(MetrologyHandle, 'all', 'measure_transition', 'positive')
56
57 apply_metrology_model(ImageEquHisto, MetrologyHandle)
58 get_metrology_object_measures(Contours, MetrologyHandle, 'all', 'all', Row1, Column1)
59 get_metrology_object_result(MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
60 get_metrology_object_result_contour(Contour, MetrologyHandle, 'all', 'all', 1.5)
61 gen_cross_contour_xld(Cross, Row1, Column1, 20, Angle)
62
63 dev_clear_window()
64 dev_display(ImageEquHisto)
65 dev_set_color('green')
66 dev_display(Contours)
67 dev_set_color('blue')
68 dev_display(Contour)
69 dev_set_color('red')
70 dev_display(Cross)
71 clear_metrology_model(MetrologyHandle)
72 stop()
73 endfor

运行结果:

 

 



推荐阅读
author-avatar
linjiabin43
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有