* 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_color、lines_facet、 lines_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版·Halcon-delphi系列原创教程》 Halcon分类函数009,Measure,测量函数

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

随机推荐

  1. luogu P4688 [Ynoi2016]掉进兔子洞 bitset 莫队

    题目链接 luogu P4688 [Ynoi2016]掉进兔子洞 题解 莫队维护bitset区间交个数 代码 // luogu-judger-enable-o2 #include<cmath&g ...

  2. Codeforces.264E.Roadside Trees(线段树 DP LIS)

    题目链接 \(Description\) \(Solution\) 还是看代码好理解吧. 为了方便,我们将x坐标左右反转,再将所有高度取反,这样依然是维护从左到右的LIS,但是每次是在右边删除元素. ...

  3. Codeforces.528D.Fuzzy Search(FFT)

    题目链接 \(Descripiton\) 给出文本串S和模式串T和k,S,T为DNA序列(只含\(A,T,G,C\)).对于S中的每个位置\(i\),只要\(s[i-k]\sim s[i+k]\)中有 ...

  4. BZOJ1330 : Editing a Book

    注意到答案不超过$5$,因此可以考虑BFS求出距离起始态或者终止态不超过$2$的所有状态. 设它们到起始态.终止态的距离分别为$f[S],g[S]$,则$ans=\min(5,f[S]+g[S])$. ...

  5. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  6. Mysql启动失败

    错误提示: 服务名无效 错误原因: mysql服务没有安装. 解决方法: 管理员的权限运行cmd 用dos命令进入到mysql安装目录下再进入到bin目录下 运行mysqld -install命令

  7. git存储用户名与密码

    git config credential.helper store git config --global credential.helper cache ... which tells git t ...

  8. 转载-vim配置收藏

    转载自:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 1.按F5可以直接编译并执行C.C++.java代码以及执行shel ...

  9. python3用BeautifulSoup用字典的方法抓取a标签内的数据

    # -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...

  10. CoffeeScript简介 <一>

    介绍 coffeeScript是一种轻量级的编程语言,可以用编译器生成原生javascript代码.它简化了许多javascript繁琐的方式,可以让你用简单的方式直接使用一行程序代表javascri ...