halcon 九点标定

一、简介

相机的标定方式:九点标定是最常用的标定方法,比较简单,但是有四种方式,最长用的任然是正拍的,所以其他的暂时不介绍,等到用到之后在说。

二、原理推导

点的仿射变换

halcon 九点标定_第1张图片

* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'dca5010d1d35_MindVision_GE134GC', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)

    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
       grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
     *  由于设备的原因看到标定板的上左右都是反的所以要将这个图像处理一下
     * 镜像
           
     * 由于光照不均的原因所以要平衡光照  增强图像的对比度
      illuminate (Image, ImageIlluminate, 10, 101, 0.2)
      equ_histo_image (ImageIlluminate, ImageEquHisto)   //这个和上面的这个算子是一起使用的
    
      rgb1_to_gray (ImageEquHisto, GrayImage)
    
      threshold (GrayImage, Regions, 0, 79)
      
      connection (Regions, ConnectedRegions)
      
      select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 21606.9, 49647.9)
    * 排序
     shape_trans (SelectedRegions, RegionTrans, 'outer_circle')
    
     sort_region (RegionTrans, SortedRegions, 'character', 'true', 'row')
     area_center (SortedRegions, Area1, Row2, Column2)

    * sort_region (SelectedRegions, SortedRegions1, 'character', 'true', 'row')
*     area_center (RegionDilation, Area, Row, Column)
      X:=[92628,122371,151502,92129,122278,152954,92965,124027,153361]
      Y:=[105584,105584,105584,76518,76518,76518,47016,47016,47016]
      
      vector_to_hom_mat2d (Row2, Column2,Y, X, HomMat2D)
      write_tuple (HomMat2D, 'F:/20201019MasterWang/calib_nine_point.tup') 
     * 开始记录那九个点的坐标 可以是脉冲 也可以 实际的距离
     * 通过从机械手上和 图形中的测定得到的坐标或者脉冲就可以组成
     * 方程组,这样就可以从 三个三元一次方程中的到对应的 a  b c
     * 同理可以在另一个关于Y的方程组中得到 a` b` c`,从而得到了
     * 对应得 矩阵  这个矩阵就表示从像素平面坐标到 世界平面坐标的
     * 映射
     
close_framegrabber (AcqHandle)

halcon 九点标定_第2张图片

你可能感兴趣的:(halcon,计算机视觉,人工智能)