本文主要是介绍halcon 九点标定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、简介
相机的标定方式:九点标定是最常用的标定方法,比较简单,但是有四种方式,最长用的任然是正拍的,所以其他的暂时不介绍,等到用到之后在说。
二、原理推导
点的仿射变换
* 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 somethinggrab_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 九点标定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!