Halcon 2D测量

时间:2021-08-23 22:55:24
* This program shows how to detect the edges of a diamond
* with subpixel accuracy and calculate the angle between them.
*
* In contrast to the example measure_diamond.hdev,
* this example uses a metrology model to measure the edges.
*
* First, the top of the diamond is roughly segmented
* to align the metrology objects.
* Then, the metrology model is applied and returns the
* parameters of the fitted lines.
* Finally, the angle between the two lines is computed.
*
* Display initializations
dev_update_off ()
dev_close_window ()
read_image (Image, 'diamond/diamond_01')
dev_open_window_fit_image (Image, , , -, -, WindowHandle)
set_display_font (WindowHandle, , 'mono', 'true', 'false')
get_image_size (Image, Width, Height)
*
* Create the metrology model data structure
create_metrology_model (MetrologyHandle)
* The image size is set in advance to speed up the
* first call of apply_metrology_model.
set_metrology_model_image_size (MetrologyHandle, Width, Height)
* Define the parameters of the metrology line objects
LineRow1 := [,]
LineColumn1 := [,]
LineRow2 := [,]
LineColumn2 := [,]
Tolerance :=
*
* Create two metrology line objects and set parameters
add_metrology_object_line_measure (MetrologyHandle, LineRow1, LineColumn1, LineRow2, LineColumn2, Tolerance, , , , [], [], Index1)
* Create region of interest for the alignment
gen_rectangle1 (Rectangle, LineRow1[] - , LineColumn1[] - , LineRow1[] + , LineColumn1[] + )
* Change the reference coordinate system in which the
* metrology model is given to be situated at the top of the diamond
reduce_domain (Image, Rectangle, ImageReduced)
dev_display(Image)
dev_display(Rectangle)
stop()
threshold (ImageReduced, Region, , )
get_region_points (Region, Rows, Columns)
set_metrology_model_param (MetrologyHandle, 'reference_system', [Rows[],Columns[],])
*
* Main loop
*
for I := to by
read_image (Image, 'diamond/diamond_' + I$'')
* Roughly segment the diamond's position
reduce_domain (Image, Rectangle, ImageReduced)
threshold (ImageReduced, Region, , )
* Extract the top of the diamond
get_region_points (Region, Rows, Columns)
*
* Use the top of the diamond to align the metrology model in
* the current image
*
align_metrology_model (MetrologyHandle, Rows[], Columns[], )
*
*
* Perform the measurement for both lines in one call
*
apply_metrology_model (Image, MetrologyHandle)
*
* Access results
*
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', LineParameter)
angle_ll (LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], Angle)
Angle := deg(Angle)
*
* Display results
*
* Create line contours
get_metrology_object_result_contour (ResultContour, MetrologyHandle, 'all', 'all', 1.5)
intersection_lines (LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], LineParameter[], Row, Column, IsOverlapping1)
* Calculate the orientation of the two lines
line_orientation (LineParameter[], LineParameter[], LineParameter[], LineParameter[], Orientation1)
if (Orientation1 > )
Orientation1 := Orientation1 - rad()
endif
line_orientation (LineParameter[], LineParameter[], LineParameter[], LineParameter[], Orientation2)
*
* Visualize the angle between the lines
gen_circle_contour_xld (ContCircle, Row, Column, , Orientation1, Orientation2, 'positive', )
* Get the used measure regions and the measured points
* for visualization
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)
gen_cross_contour_xld (Cross, MRow, MColumn, , rad())
* Display everything
dev_display (Image)
dev_set_line_width ()
dev_set_color ('yellow')
dev_display (Contour)
dev_display (Cross)
dev_set_line_width ()
dev_set_color ('green')
dev_display (ResultContour)
dev_set_color ('blue')
dev_display (ContCircle)
disp_message (WindowHandle, 'Angle = ' + Angle$'.5' + '°', 'window', , , 'black', 'true')
if (I < )
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
* Clean up memory
clear_metrology_model (MetrologyHandle)

Halcon 2D测量的更多相关文章

  1. Halcon一维测量官方案例解析

    下面的例子简要介绍了如何使用HALCON的一维测量工具.最长的部分是预处理和后处理:测量本身只包括两个操作符调用. 测量保险丝-fuse 预处理主要是测量线的生成.在示例程序中,这个步骤是通过将测量对 ...

  2. Halcon一维测量1D Measuring解析

    一维测量(也叫一维计量或卡尺)的概念非常直观.沿着一个预定的区域(主要是垂直于RIO感兴趣区域的方向) 边缘的位置.这里的边缘为从暗到亮或从亮到暗的过渡. 基于提取的边缘,可以测量零件的尺寸.例如,可 ...

  3. Halcon 1D测量

    1.产生测量句柄,准备提取与矩形(圆弧)主轴垂直的值边缘. gen_measure_rectangle2或gen_measure_arc 2.测量边缘对   ,测量的直线与矩形或者圆弧垂直 measu ...

  4. halcon 特征测量

    Features 1. line_orientation   功能:计算线的方位. 2. line_position   功能:计算一条线的重心.长度和方位. 3. partition_lines   ...

  5. halcon——缺陷检测常用方法总结(测量拟合)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分:halcon--缺陷检测常用方法总结(模板匹配(定位)+差分) - 唯有自己强大 - 博客园 (cnblogs.co ...

  6. 分析一则halcon抓边拟合直线的小案例

    例图: 完整算法: read_image (Image, 'C:/Users/Administrator/Desktop/1.png') threshold (Image, Regions, , ) ...

  7. 提取线条的lines&lowbar;color、lines&lowbar;facet、 lines&lowbar;gauss算子

    Halcon中线条提取的算子主要有: lines_color(Image : Lines : Sigma, Low, High, ExtractWidth, CompleteJunctions : ) ...

  8. 1D mesauring

              The Basics of Measure Objects   2.1 the process of 1D Edge extraction       Then, the mean ...

  9. 《zw版&&num;183&semi;Halcon-delphi系列原创教程》 Halcon分类函数009&comma;Measure,测量函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数009,Measure,测量函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

随机推荐

  1. (四)Spark集群搭建-Java&amp&semi;Python版Spark

    Spark集群搭建 视频教程 1.优酷 2.YouTube 安装scala环境 下载地址http://www.scala-lang.org/download/ 上传scala-2.10.5.tgz到m ...

  2. 后记:Cookie安全大辩论总结

    前天,我发布在博客园上的某知名电商网站的Cookie漏洞引发园友们的热议,学到了很多知识,现在整理一下其中比较激烈的技术讨论.谁对谁错每个人自己心中都有一把称,很多时候都是我无法说服你,你也无法说服我 ...

  3. 按键的使用方法(三)-------verilog

    按键的使用方法三:一键三用: 点击.长击和双击. 代码: /********************************Copyright***************************** ...

  4. 数学 赛码 1010 GCD

    题目传送门 /* 数学:官方题解 首先,数组中每个元素至少是1 然后对于任意一个询问Li, Ri, Ansi, 说明Li ~ Ri中的元素必定是Ansi的倍数,那么只需将其与Ansi取最小公倍数即可 ...

  5. MEAN-全栈javascript开发框架

    引言 使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDB.ExpressJS,AngularJS和Node.js越来越受到欢迎,其开发的灵活性和易用性加快开发效率, ...

  6. Python快速排序

    快排,取一个key值,一般取第一个即可,将小于key的放到左边,大于key的放到右边,递归实现 import random def quicksort(data, low = 0, high = No ...

  7. &lbrack;转&rsqb; jquery 使用方法

    jquery 使用方法 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司 甚至把jQuery作为他们的官 ...

  8. OpenStack Neutron DVR L2 Agent的初步解析 (一)

    声明: 本博客欢迎转载,但请保留原作者信息! 作者:林凯 团队:华为杭州OpenStack团队 OpenStack Juno版本号已正式公布,这是这个开源云平台的10个版本号,在Juno版的Neutr ...

  9. ps&amp&semi;&amp&semi;&sol;proc&sol;pid&sol;xxx

    ps 如果想看一个进程的启动时间,可以用lstart来看 [root@jiangyi02.sqa.zmf /home/ahao.mah] #ps -eo pid,lstart,etime,cmd |g ...

  10. 集群安装Java环境

    需要安装一个集群环境,发现全部要手动安装java.记录下安装Java环境的过程.虽然,依旧是挨个安装,但总算是有体系了. java 找到下载地址: https://www.oracle.com/tec ...