开启左侧

关于使用add_metrology_object_circle_measure算子找圆问题

[复制链接]
LBD 发表于 2019-4-24 09:12:18 | 显示全部楼层 |阅读模式
使用该算子的圆弧测量模型找圆时,有以下3个特殊参数可以设置,起始角度'start_phi', 结束角度'end_phi', 圆弧方向'point_order',问题来了,当'point_order'值为'positive'时,即使'start_phi'和'end_phi'形成的角度范围再小,也可以找到圆,当然,范围太小,圆不太准确,但至少有结果,
而当'point_order'值为'negative'时,即使'start_phi'和'end_phi'形成的角度范围比较大,也找不到圆,

不知道问题出现在哪里,还请各位路过的大神帮忙解答一下
 楼主| LBD 发表于 2019-4-24 09:14:45 | 显示全部楼层
微信截图_20190424091347.png
 楼主| LBD 发表于 2019-4-24 09:16:29 | 显示全部楼层
如上图所示,'point_order'值为'negative',即方向为顺时针,角度范围较大,但未成功拟合成圆
 楼主| LBD 发表于 2019-4-24 09:18:28 | 显示全部楼层
如下图所示,'point_order'值为'positive',即逆时针,角度范围较小,依然可以拟合成圆
微信截图_20190424091417.png

 楼主| LBD 发表于 2019-4-24 09:19:27 | 显示全部楼层
以下是原图
2-1.png
 楼主| LBD 发表于 2019-4-24 09:21:53 | 显示全部楼层
dev_close_window ()
read_image (Image, 'C:/Users/Administrator/Desktop/2-1.png')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
*Define the circle
Row:=250
Column:=300
Radius:=80
ShapeParam:=[Row,Column,Radius]
* Prepare the metrology model data structure
create_metrology_model (MetrologyHandle)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
* Add the metrology circle objects to the model
* as defined above
* add_metrology_object_generic (MetrologyHandle, 'circle', ShapeParam, 50, 1, 8, 120,\
                              ['start_phi','end_phi','point_order'],\
                              [0, 1.57, 'positive'], MetrologyCircleIndices)
add_metrology_object_circle_measure (MetrologyHandle, Row, Column, Radius,\
                                     50, 1, 8, 120, \
                                     ['start_phi','end_phi','point_order'],\
                                     [0, 1.57, 'positive'], MetrologyCircleIndices)
* 测量并拟合计量模型的所有计量对象的几何形状
apply_metrology_model (Image, MetrologyHandle)
* Access the results of the circle measurement
get_metrology_object_result (MetrologyHandle, MetrologyCircleIndices, 'all', 'result_type', 'all_param', CircleParameter)
* Get measured contours
get_metrology_object_result_contour (Contours, MetrologyHandle, 'all', 'all', 1.5)
area_center_xld (Contours, Area, Row2, Column2, PointOrder)
gen_cross_contour_xld (Cross1, Row2, Column2, 10, 0.785398)
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', Row1, Column1)
gen_cross_contour_xld (Cross, Row1, Column1, 6, 0.785398)
* Display everything
Color := ['gray','red','green']
dev_display (Image)
dev_set_line_width (1)
dev_set_color (Color[0])
dev_display (Contour)
dev_set_color (Color[1])
dev_display (Cross)
dev_set_line_width (2)
dev_set_color (Color[2])
dev_display (Contours)
dev_display(Cross1)
* Clean up memory
clear_metrology_model (MetrologyHandle)

 楼主| LBD 发表于 2019-4-24 09:22:15 | 显示全部楼层
以上为源代码
 楼主| LBD 发表于 2019-4-25 14:24:10 | 显示全部楼层
哪位大神帮忙解答一下
绝地武士 发表于 2019-4-26 10:01:35 | 显示全部楼层
LBD 发表于 2019-4-24 09:21
dev_close_window ()
read_image (Image, 'C:/Users/Administrator/Desktop/2-1.png')
get_image_size (Ima ...

楼主为嘛不用鸟叔的spoke卡圆工具呢?原理都差不多,而且效果好,可以参考https://www.51halcon.com/thread-117-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表