- 这个程序展示了如何使用计量模型来获得平面内各种几何形式的校准测量值。几何形式的参数是从一个模型的图像。
*为了在一幅新图像中找到待测目标,我们展示了三种不同的对齐方法:
- a)使用基于形状的匹配
- b)使用区域处理
- c)使用从点对应的刚性转换
- 测量的结果返回作为轮廓和调整参数的给定几何对象
- 通过激活所需的线选择一种对齐方法
AlignmentMode := ‘shape-based matching’ - AlignmentMode := ‘region processing’
- AlignmentMode := ‘rigid transformation’
- 初始化可视化
dev_update_off ()
dev_close_window ()
dev_set_draw (‘margin’)
gen_empty_obj (EmptyObject)
read_image (Image, ‘metal-parts/circle_plate_01’)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’) - Part I:
- Initialize metrology model
- 初始化计量模型
- Define camera parameter
- 定义相机参数
CameraParam := [0.0128649,-661.434,5.30004e-006,5.3e-006,620.043,497.402,Width,Height]
*通过在被测物体的平面上放置一个标定板,确定被测物体的位姿,得到了测量平面的位姿
MeasurementPlane := [0.00940956,-0.00481017,0.29128,0.478648,359.65,0.785,0] - 根据部件的高度和校准板的高度调整测量平面的位姿
- 校准板的厚度
CalibPlateThickness := 0.006 - 待测物体的厚度
PartHeight := 0.005
AdjustThickness := CalibPlateThickness - PartHeight
set_origin_pose (MeasurementPlane, 0, 0, AdjustThickness, MeasurementPlaneAdjusted)
*创建计量模型并为校准测量做好准备
create_metrology_model (MetrologyHandle)
*提前设置图像大小,以加速第一次调用apply_metrology_model
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*设置相机参数
set_metrology_model_param (MetrologyHandle, ‘camera_param’, CameraParam)
*设置被测物体所在的平面
set_metrology_model_param (MetrologyHandle, ‘plane_pose’, MeasurementPlaneAdjusted)
*
*将要测量的对象添加到计量模型中
*
*添加几个完整的圆
CircleParam := [354,274,53]
CircleParam := [CircleParam,350,519,53]
CircleParam := [CircleParam,345,764,52]
CircleParam := [CircleParam,596,523,53]
add_metrology_object_generic (MetrologyHandle, ‘circle’, CircleParam, 20, 5, 1, 30, [], [], CircleIndices1)
*
*添加两个部分圆
CircleParam1 := [583,1010,79]
CircleParam2 := [336,1005,77]
add_metrology_object_generic (MetrologyHandle, ‘circle’, CircleParam1, 20, 5, 1, 30, [‘start_phi’,‘end_phi’], [0,rad(185)], CircleIndices2)
add_metrology_object_generic (MetrologyHandle, ‘circle’, CircleParam2, 20, 5, 1, 30, [‘start_phi’,‘end_phi’], [rad(45),rad(185)], Index3)
CircleIndices2 := [CircleIndices2,Index3]
*
*添加一个rectangle
RectangleParam := [599,279,rad(90),62,51]
add_metrology_object_generic (MetrologyHandle, ‘rectangle2’, RectangleParam, 20, 5, 1, 30, [], [], RectIndices)
- 添加两条lines
Line1 := [143,1122,709,1132]
Line2 := [151,153,136,1115]
add_metrology_object_generic (MetrologyHandle, ‘line’, [Line1,Line2], 20, 5, 1, 30, [], [], LineIndices) - 检查已添加到计量模型中的形状
get_metrology_object_model_contour (ModelContour, MetrologyHandle, ‘all’, 1.5)
get_metrology_object_measures (MeasureContour, MetrologyHandle, ‘all’, ‘all’, Row, Column)
Message := ‘This example shows how to measure geometric shapes using a’
Message[1] := 'metrology model. As preparation, their roughly known ’
Message[2] := ‘dimensions and tolerances are specified by the user.’
show_contours (Image, ModelContour, MeasureContour, EmptyObject, WindowHandle, Message)
stop () - Part 2:
*准备调整
*
- a)Shape-based匹配
if (AlignmentMode == ‘shape-based matching’)
dev_set_part (-Height / 2 - 100, -Width / 2, 1.5 * Height - 100, 1.5 * Width)
*
* 创建用于在图像中校准该计量模型的形状模型,其中对象发生的位置和方向与用于创建该模型的图像中的位置和方向不同
get_system (‘border_shape_models’, BorderShapeModel)
set_system (‘border_shape_models’, ‘true’)
threshold (Image, Region, 0, 50)
dilation_rectangle1 (Region, ModelRegion, 5, 5)
reduce_domain (Image, ModelRegion, ImageReduced)
create_shape_model (ImageReduced, 6, 0, rad(360), ‘auto’, ‘auto’, ‘use_polarity’, ‘auto’, 20, ShapeModelID)
* 形状模型的原点是create_shape_model中使用的输入区域的中心
area_center (ModelRegion, Area, RowModel, ColumnModel)
get_shape_model_contours (ShapeModelContours, ShapeModelID, 1)
Message := ‘A shape model will be used for the alignment of the metrology’
Message[1] := ‘model. The contours of the shape model (white) and of the’
Message[2] := ‘metrology model (blue) are shown.’
show_contours (Image, ModelContour, EmptyObject, ShapeModelContours, WindowHandle, Message)
*
* 改变定义计量模型的参考系,使其与形状模型所使用的参考系相对应。
* 为了能够直接使用find_shape_model的结果来校准计量模型,这是必要的
set_metrology_model_param (MetrologyHandle, ‘reference_system’, [RowModel,ColumnModel,0])
get_metrology_object_model_contour (ModelContour, MetrologyHandle, ‘all’, 1.5)
Message := ‘To prepare the alignment, the origin of the shape model’
Message[1] := ‘is set as the reference system of the metrology model.’
show_contours (Image, ModelContour, EmptyObject, ShapeModelContours, WindowHandle, Message)
stop ()
dev_set_part (0, 0, Height - 1, Width - 1)
endif - b)区域处理
if (AlignmentMode == ‘region processing’)
*确定参考位置和方向
threshold (Image, Region, 0, 50)
fill_up (Region, RegionFillUp)
difference (RegionFillUp, Region, OriginalRegion)
area_center (OriginalRegion, Area, RowOrig, ColumnOrig)
orientation_region (OriginalRegion, AngleOrig)
*改变计量模型的参考系
set_metrology_model_param (MetrologyHandle, ‘reference_system’, [RowOrig,ColumnOrig,AngleOrig])
endif - c)僵硬转换
if (AlignmentMode == ‘rigid transformation’)
* Reference points:
extract_reference_points (Image, RowReference, ColumnReference)
gen_cross_contour_xld (ReferencePoints, RowReference, ColumnReference, 15, 0.785398)
dev_display (Image)
dev_set_color (‘white’)
dev_display (ReferencePoints)
Message := ‘To prepare the alignment, reference points are extracted.’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
disp_message (WindowHandle, ‘1’, ‘image’, RowReference[0], ColumnReference[0], ‘black’, ‘true’)
disp_message (WindowHandle, ‘2’, ‘image’, RowReference[1], ColumnReference[1], ‘black’, ‘true’)
disp_message (WindowHandle, ‘3’, ‘image’, RowReference[2], ColumnReference[2], ‘black’, ‘true’)
disp_message (WindowHandle, ‘4’, ‘image’, RowReference[3], ColumnReference[3], ‘black’, ‘true’)
stop ()
endif - 在线阶段
for I := 2 to 5 by 1
read_image (CurrentImage, ‘metal-parts/circle_plate_’ + I ′ 02 d ′ ) d e v s e t l i n e w i d t h ( 1 ) d e v d i s p l a y ( C u r r e n t I m a g e ) ∗ ∗ a ) S h a p e − b a s e d 匹 配 i f ( A l i g n m e n t M o d e = = ′ s h a p e − b a s e d m a t c h i n g ′ ) ∗ ∗ 使 用 形 状 模 型 测 量 当 前 图 像 中 物 体 的 位 置 和 方 向 ∗ f i n d s h a p e m o d e l ( C u r r e n t I m a g e , S h a p e M o d e l I D , 0 , r a d ( 360 ) , 0.5 , 1 , 0 , ′ l e a s t s q u a r e s ′ , 5 , 0.9 , R o w A l i g n , C o l u m n A l i g n , A n g l e A l i g n , S c o r e ) d e v d i s p l a y s h a p e m a t c h i n g r e s u l t s ( S h a p e M o d e l I D , ′ w h i t e ′ , R o w A l i g n , C o l u m n A l i g n , A n g l e A l i g n , 1 , 1 , 0 ) e n d i f ∗ ∗ b ) 区 域 处 理 i f ( A l i g n m e n t M o d e = = ′ r e g i o n p r o c e s s i n g ′ ) ∗ 确 定 当 前 位 置 和 方 向 t h r e s h o l d ( C u r r e n t I m a g e , R e g i o n , 0 , 50 ) f i l l u p ( R e g i o n , R e g i o n F i l l U p ) d i f f e r e n c e ( R e g i o n F i l l U p , R e g i o n , C u r r e n t R e g i o n ) a r e a c e n t e r ( C u r r e n t R e g i o n , A r e a , R o w A l i g n , C o l u m n A l i g n ) o r i e n t a t i o n r e g i o n ( C u r r e n t R e g i o n , A n g l e A l i g n ) e n d i f ∗ ∗ c ) 僵 硬 转 换 i f ( A l i g n m e n t M o d e = = ′ r i g i d t r a n s f o r m a t i o n ′ ) ∗ 参 考 朋 克 特 : e x t r a c t r e f e r e n c e p o i n t s ( C u r r e n t I m a g e , R o w E x t r a c t e d , C o l u m n E x t r a c t e d ) g e n c r o s s c o n t o u r x l d ( E x t r a c t e d P o i n t s , R o w E x t r a c t e d , C o l u m n E x t r a c t e d , 15 , 0.785398 ) d e v d i s p l a y ( C u r r e n t I m a g e ) d e v s e t c o l o r ( ′ w h i t e ′ ) d e v d i s p l a y ( E x t r a c t e d P o i n t s ) d i s p m e s s a g e ( W i n d o w H a n d l e , ′ 1 ′ , ′ i m a g e ′ , R o w E x t r a c t e d [ 0 ] , C o l u m n E x t r a c t e d [ 0 ] , ′ b l a c k ′ , ′ t r u e ′ ) d i s p m e s s a g e ( W i n d o w H a n d l e , ′ 2 ′ , ′ i m a g e ′ , R o w E x t r a c t e d [ 1 ] , C o l u m n E x t r a c t e d [ 1 ] , ′ b l a c k ′ , ′ t r u e ′ ) d i s p m e s s a g e ( W i n d o w H a n d l e , ′ 3 ′ , ′ i m a g e ′ , R o w E x t r a c t e d [ 2 ] , C o l u m n E x t r a c t e d [ 2 ] , ′ b l a c k ′ , ′ t r u e ′ ) d i s p m e s s a g e ( W i n d o w H a n d l e , ′ 4 ′ , ′ i m a g e ′ , R o w E x t r a c t e d [ 3 ] , C o l u m n E x t r a c t e d [ 3 ] , ′ b l a c k ′ , ′ t r u e ′ ) v e c t o r t o r i g i d ( R o w R e f e r e n c e , C o l u m n R e f e r e n c e , R o w E x t r a c t e d , C o l u m n E x t r a c t e d , H o m M a t 2 D ) h o m m a t 2 d t o a f f i n e p a r ( H o m M a t 2 D , S x , S y , A n g l e A l i g n , T h e t a , R o w A l i g n , C o l u m n A l i g n ) e n d i f ∗ ∗ 使 用 计 算 出 的 位 置 和 方 向 将 计 量 模 型 与 当 前 发 生 的 情 况 对 齐 a l i g n m e t r o l o g y m o d e l ( M e t r o l o g y H a n d l e , R o w A l i g n , C o l u m n A l i g n , A n g l e A l i g n ) ∗ 显 示 校 准 的 计 量 模 型 i f ( I < = 2 ) g e t m e t r o l o g y o b j e c t m o d e l c o n t o u r ( M o d e l C o n t o u r , M e t r o l o g y H a n d l e , ′ a l l ′ , 1.5 ) d e v s e t c o l o r ( ′ b l u e ′ ) d e v s e t l i n e w i d t h ( 2 ) d e v d i s p l a y ( M o d e l C o n t o u r ) M e s s a g e : = ′ I n e a c h i m a g e , t h e o b j e c t i s m a t c h e d a n d a l i g n e d ′ M e s s a g e [ 1 ] : = ′ b e f o r e t h e m e t r o l o g y m e a s u r e m e n t . ′ d i s p m e s s a g e ( W i n d o w H a n d l e , M e s s a g e , ′ w i n d o w ′ , 12 , 12 , ′ b l a c k ′ , ′ t r u e ′ ) d i s p c o n t i n u e m e s s a g e ( W i n d o w H a n d l e , ′ b l a c k ′ , ′ t r u e ′ ) s t o p ( ) e n d i f ∗ ∗ 在 一 个 调 用 中 对 所 有 计 量 对 象 执 行 测 量 a p p l y m e t r o l o g y m o d e l ( C u r r e n t I m a g e , M e t r o l o g y H a n d l e ) ∗ 获 取 可 视 化 的 测 量 区 域 g e t m e t r o l o g y o b j e c t m e a s u r e s ( C o n t o u r , M e t r o l o g y H a n d l e , ′ a l l ′ , ′ a l l ′ , R o w , C o l u m n ) ∗ 得 到 实 际 用 于 符 合 几 何 形 式 的 边 缘 点 g e t m e t r o l o g y o b j e c t r e s u l t ( M e t r o l o g y H a n d l e , ′ a l l ′ , ′ a l l ′ , ′ u s e d e d g e s ′ , ′ r o w ′ , U s e d R o w ) g e t m e t r o l o g y o b j e c t r e s u l t ( M e t r o l o g y H a n d l e , ′ a l l ′ , ′ a l l ′ , ′ u s e d e d g e s ′ , ′ c o l u m n ′ , U s e d C o l u m n ) g e n c r o s s c o n t o u r x l d ( U s e d E d g e s , U s e d R o w , U s e d C o l u m n , 10 , r a d ( 45 ) ) ∗ ∗ 访 问 测 量 结 果 ∗ 由 于 相 机 参 数 已 经 设 置 , 所 以 所 有 的 结 果 都 是 以 相 对 于 测 量 平 面 所 定 义 的 坐 标 系 的 米 制 坐 标 给 出 的 ∗ ∗ 得 到 测 量 几 何 形 式 的 可 视 化 g e t m e t r o l o g y o b j e c t r e s u l t c o n t o u r ( R e s u l t C o n t o u r s , M e t r o l o g y H a n d l e , ′ a l l ′ , ′ a l l ′ , 1.5 ) ∗ 提 取 小 圆 的 半 径 g e t m e t r o l o g y o b j e c t r e s u l t ( M e t r o l o g y H a n d l e , C i r c l e I n d i c e s 1 , ′ a l l ′ , ′ r e s u l t t y p e ′ , ′ r a d i u s ′ , R a d i u s C 1 ) ∗ 提 取 较 大 的 不 完 全 圆 的 半 径 g e t m e t r o l o g y o b j e c t r e s u l t ( M e t r o l o g y H a n d l e , C i r c l e I n d i c e s 2 , ′ a l l ′ , ′ r e s u l t t y p e ′ , ′ r a d i u s ′ , R a d i u s C 2 ) ∗ 提 取 矩 形 边 的 长 度 g e t m e t