- 二维测量有一种形态学的方法,参照我之前的博客。
形态学方法测量
- 本文主要介绍一种建立测量模型的方法,对直线和圆进行测量.
一.圆心度测量
1.设定测量模型
- 首先将我们将待测量圆的半径圆心,以及容错度声明出来。
- 创建测量句柄
*1.创建测量句柄
create_metrology_model (MetrologyHandle)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
- 初始化测量模型,这里用到我们第一步声明的圆的信息
1.CircleRadiusTolerance:也就是容错度,我们绘制测量矩形的高。
2.CircleRadiusTolerance2:测量矩形的宽。
2.sigma:高斯滤波掩膜大小
3.MeasureThreshold:检测边缘的阈值
add_metrology_object_circle_measure (MetrologyHandle, CircleInitRow, CircleInitColumn, CircleInitRadius, CircleRadiusTolerance, CircleRadiusTolerance2, sigma, MeasureThreshold, [], [], MetrologyCircleIndices)
*‘uniform’参数是放置区域出现正负边缘,只测量正边缘或负边缘
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'measure_transition', 'uniform')
*最小分数值,与匹配道理一样,背景环境越复杂,分数设定应该越高
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'min_score', .1)
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)
set_metrology_model_param (MetrologyHandle, 'reference_system', [Row,Column,0])
dev_set_color('green')
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)
二.使用测量模型进行测量
- 应该有注意到,测量模型被仿射到row=0,column=0的位置。
- 将模型添加到当前图像的位置
align_metrology_model (MetrologyHandle, Row, Column, 0)
apply_metrology_model (OrginImage, MetrologyHandle)
- 两种方法得到边缘
1.获得测量模型内检测到区域所有的点
- 如果区域有噪声,这种方法并不理想
2.获得边缘点
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'row', UsedRow)
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'column', UsedColumn)
gen_cross_contour_xld (UsedEdges, UsedRow, UsedColumn, 2, rad(45))
gen_contour_polygon_xld(Contour,UsedRow, UsedColumn)
* 拟合圆
fit_circle_contour_xld(Contour, 'algebraic', -1, 0, 0, 3, 2, FinalRow, FinalColumn, FinalRadius, StartPhi, EndPhi, PointOrder)
- 本图圆环有一定阴影,采用图像增强去噪
scale_image (Image, ImageScaled, 3.5, -100)
二.测量模型边缘检测
- 思路与圆检测一样
- 在初始化模型的位置,有所改变
- LineRow1, LineColumn1, LineRow2, LineColumn2,边缘线的起始点和终点
add_metrology_object_line_measure (MetrologyHandle, LineRow1, LineColumn1, LineRow2, LineColumn2, Tolerance, 5, 1, 20, [], [], Index1)
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'row', UsedRow)
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'column', UsedColumn)