模板匹配搜索测量区域

这个程序演示了如何使用计量模型来测量平面内的几何形状,包括圆、部分圆和矩形。通过三种对齐方法(基于形状匹配、区域处理和刚性变换)在新图像中找到目标,并返回其轮廓和调整参数。程序还涵盖了相机参数、测量平面的位姿设定以及对齐和测量的过程。
摘要由CSDN通过智能技术生成
  • 这个程序展示了如何使用计量模型来获得平面内各种几何形式的校准测量值。几何形式的参数是从一个模型的图像。

*为了在一幅新图像中找到待测目标,我们展示了三种不同的对齐方法:

  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值