Halcon例程之圆弧测量工具分析

描述

*  Example for the application of the measure package

* including a lot of visualization operators

*读取图像

read_image (Zeiss1, 'zeiss1')

get_image_size (Zeiss1, Width, Height)

dev_close_window ()

dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)

set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

*显示图像

dev_display (Zeiss1)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

*在图像上相应位置绘制圆,这里用固定变量的方法产生圆的参数,把这个圆绘制代码注释掉了。这个圆用于后面的测量工具上

* draw_circle (WindowHandle, Row, Column, Radius)

*定义变量用于生成圆,如果手动绘制就不需要用下面的变量了

Row := 275

Column := 335

Radius := 107

AngleStart := -rad(55)

AngleExtent := rad(170)

dev_set_draw ('fill')

dev_set_color ('green')

dev_set_line_width (1)

*获取圆弧的起始坐标

get_points_ellipse (AngleStart + AngleExtent, Row, Column, 0, Radius, Radius, RowPoint, ColPoint)

*显示圆弧

disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)

dev_set_line_width (3)

*生成圆弧测量工具

*前五个参数是圆弧的位置相关输入参数

*第六个参数是需要生成的测量圆弧工具的宽度,即一个圆弧区域的宽度,在这里整个测量区域是半径-10到半径+10这个区域范围

*第七第八个参数是图像宽高

*第九个参数是插值方式,这里是用最近邻插值方式

*最后一个输出参数是测量工具的句柄,后面需要用到这个测量工具都通过句柄引用

gen_measure_arc (Row, Column, Radius, AngleStart, AngleExtent, 10, Width, Height, 'nearest_neighbor', MeasureHandle)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

*计算算法时间

count_seconds (Seconds1)

n := 10

for i := 1 to n by 1

    *第一个参数是输入图像

    *第二个参数是测量工具句柄值

    *第三个参数是高斯平滑的sigma值

    *第四个参数是阈值

    *第五个参数是测量的边缘方向选择参数,'all'是选择所有的边缘,'negative'只选择白到黑的边缘,'positive'只选择黑到白的边缘

    *这里两个边缘都选择总共选择出4个像素差值边缘

    *第六个参数是是否选择端点,这里选择所有端点

    *第七个参数是输出的边缘点行坐标值

    *第八个参数是输出的边缘点列坐标值

    *第九个参数是输出的边缘点最大幅值

    *第十个参数是输出的相邻边缘之间的距离

    measure_pos (Zeiss1, MeasureHandle, 1, 10, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)

endfor

count_seconds (Seconds2)

Time := (Seconds2 - Seconds1) / n

disp_continue_message (WindowHandle, 'black', 'true')

* stop ()

*计算两个点间的距离

distance_pp (RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2], IntermedDist)

* dev_display (Zeiss1)

dev_set_color ('red')

* disp_circle (WindowHandle, RowEdge, ColumnEdge, RowEdge - RowEdge + 1)

*显示测量出来的直线

disp_line (WindowHandle, RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2])

dev_set_color ('yellow')

disp_message (WindowHandle, 'Distance: ' + IntermedDist, 'image', 250, 80, 'yellow', 'false')

* dump_window (WindowHandle, 'tiff_rgb', 'C:\Temp\zeiss_result')

dev_set_line_width (1)

* disp_continue_message (WindowHandle, 'black', 'true')

stop ()

dev_clear_window ()

打开halcon,按下ctrl+e打开halcon自带例程。工业领域->机械行业->measure_arc.hdev

这个例程是用圆弧测量工具测量圆弧的长度,较短的一段圆弧可以大约等长与直线,但大圆弧是不能等长于直线的,比如历程中两个凹坑处的圆弧长度这里同样是可以测量出来的。

圆弧测量的原理与矩形测量的原理是一样的,把圆弧区域用插值的方式转换到矩形区域空间,在矩形主方向上做灰度值差分,得到差分图像,找出差分值大于设定阈值的点位置。






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分