Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-优快云博客

一、概述

最近在搞多相机标定等的相关问题,对于很大的场景,单个相机的视野是不够的,就必须要统一到一个坐标系下,因此我也用了4个相机,如图;

 二、流程

我的实物

准备:

标定板

这个标定板是比较特殊的,由于我设定的是4个相机,那么我需要在搞标定板的时候需要在每个相机的视野范围内进行,所以如下:

就像上面,红色的是我的标定板,在每个标定板的四角区域有各自有一个mark 点。我让我同事在solidworks上画了一个A4纸一样大小的标定板,打印出来是1:1的

思路:

1、放置标定板

将标定板放到统一高度,而且保证每个相机都能在自己的视野里面看到标定板中各自的mark点,最好是处在视野的中央

2、确定一个主相机

就是要统一坐标系,首先 要定好要把其他的坐标系统一到那个坐标系找那个。默认是第一个相机

3、检查图像中的位置

使用图像预处理找出对应的mark点,是按照顺序的,在计算的时候一定要和cad 的那个数据一一对应

4、辅助相机到主相机的变换矩阵

  这一步是最重要的一步,具体步骤如下:

  a、计算主相机中像素-》物理坐标的矩阵 HomMat2DMainMachine2Image

  b、计算辅助相机中像素-》物理坐标的矩阵 HomMat2DOtherMachine2Image

  c、计算其他相机到主相机的坐标矩阵

5、重复第4步

原理图解

三、代码

First_X:=[73,88,73,88]
First_Y:=[160,160,145,145]
Second_X:=[203,218,203,218]
Second_Y:=[160,160,145,145]

read_image (Left, 'D:/workplace/doubleCamera/left.bmp')
get_image_size (Left, Width, Height)
read_image (Right, 'D:/workplace/doubleCamera/right.bmp')
params:=[0,50,67892.6,100000,0.67893,1]
dev_display (Left)

*左边的图像
Get_Point_Mapping (Left, params, LeftRow, LeftColumn)
First_ImageX:=LeftColumn
First_ImageY:=LeftRow
vector_to_hom_mat2d(First_ImageX, First_ImageY, First_X, First_Y, HomMat2D_Main_Machine_2_Image)
Get_Point_Mapping (Right, params, RightRow, RightColumn)
Second_Image_X:=RightColumn
Second_Image_Y:=RightRow
vector_to_hom_mat2d(Second_Image_X, Second_Image_Y, Second_X, Second_Y, HomMat2D_Other_Machine_2_Image)
*计算主相机 像素-》Machine
hom_mat2d_invert(HomMat2D_Main_Machine_2_Image,HomMat2D_Main_Image_2_Machine)

*计算其他坐标系中点在主相机坐标系下的位置
hom_mat2d_compose(HomMat2D_Main_Image_2_Machine,HomMat2D_Other_Machine_2_Image,HomMat2D_Other_Image_2_Image)

* 
affine_trans_point_2d (HomMat2D_Other_Image_2_Image, 0, 1000, Qx, Qy)
*
gen_cross_contour_xld (Cross,Qy,Qx,60, 0.785398)
tuple_acos (-0.0236214, ACos)
tuple_asin (0.98818, ASin)
angle:=(ACos+ASin)/2

 

 结果显示:

拼图

原图:

 

 拼图结果:

 可以看出我的这个精度不是很高,主要是标定的精度不够,还有就是相机有畸变,我没有做相机标定等问题引起的

 四、标定板矩阵

有个问题就是Halcon 双相机标定与拼图(二)-优快云博客 中最后

 



* 物理距离
First_Source_X:=[73,88,73,88]
First_Source_Y:=[160,160,145,145]
Second_Source_X:=[203,218,203,218]
Second_Source_Y:=[160,160,145,145]
*计算的是物理坐标的
vector_to_hom_mat2d (Second_Source_X, Second_Source_Y,First_Source_X, First_Source_Y, HomMat2DCam1ToCam1)
* 测试
affine_trans_point_2d (HomMat2DCam1ToCam1, 203,160, Qx1, Qy1)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值