halcon中标定版细节https://www.cnblogs.com/xiaomaLV2/p/5011011.html 作者: 小马_xiao
图像像素坐标系、图像物理坐标系、相机坐标系、世界坐标系
图像像素坐标系:
图像物理坐标系:相机光轴与图像相交的点位原点,即图像的中心点,坐标轴的单位通常为mm,坐标轴与图像像素坐标轴平行
函数:
该函数主要是演示了倾斜镜头的优点,并使用远心倾斜镜头校准相机
主要流程包括:
1.创建校准数据模版,设置初始相机参数,以及标定板,添加校准图像,进行校准
2.校准成功后获取相机内外参
3.处理图像,生成垂直于矩形的边,根据生成的测量模型句柄根据最小边缘幅度进行分割,获取两个边的中心点,将所有的中心点根据得到的相对位姿转换到世界坐标系中,计算每个相邻中心点的实际距离,并计算平均值与标准差
算子:
1.crop_rectangle1(Image : ImagePart : Row1, Column1, Row2, Column2 : ):裁剪一个或多个矩形区域,矩形有左上角和右下角的坐标定义
生成场景图像:
1.gen_contour_polygon_xld( : Contour : Row, Col : ):生成一条线
2.gen_region_polygon_filled( : Region : Rows, Columns : ):将多边形存储为“filled”区域
3.vector_to_proj_hom_mat2d( : : Px, Py, Qx, Qy, Method, CovXX1, CovYY1, CovXY1, CovXX2, CovYY2, CovXY2 : HomMat2D, Covariance):利用给定点的对应关系计算仿射变换矩阵
参数:
Px:图1中输入点Row坐标
Py:图1中输入点Column坐标
Qx:图2中输入点Row坐标
Qy:图2中输入点Column坐标
Method:计算方法(算法'dlt':快速而简单,但是相当不准确的错误估计算法。'normaliized_dlt':在速度和精度上提供了一个很好的折中。'gold_standard':执行数学上最优蛋较慢的优化)
CovXX1:图1中各点的行坐标方差
CovYY1:图1中各点的列坐标方差
CovXX2:图2中个点的行坐标方差
CovXY2:图2中各点的列坐标方差
HomMat2D:齐次仿射变换矩阵句柄
Covariance:反射变换矩阵的9*9协方差矩阵
4.create_calib_data( : : CalibSetup, NumCameras, NumCalibObjects : CalibDataID):创建校准数据模型
参数:
CalibSetup:校准装类型('calibration_object':根据从校准对象的观察中提取的度量信息,校准一个或多个摄像机的内参数和摄像机姿态)
CalibSetup:校准装置中摄像机的数量
NumCalibObjects :校准对象的数量
CalibDataID:校准数据模型的句柄
5.find_calib_object(Image : : CalibDataID, CameraIdx, CalibObjIdx, CalibObjPoseIdx, GenParamName, GenParamValue : ):找到Halcon校准版,并在校准数据模型中设置提取的点和轮廓
参数:
Image:输入图像
CalibDataID:校准数据模型句柄
CameraIdx:观测相机的索引
CalibObjIdx:校准对象的索引
CalibObjPoseIdx:被观侧校准对象的索引
GenParamName:通用类型参数('sigma':提取标记轮廓的平滑因子)
GenParamValue :通用参数值
6.get_calib_data_observ_contours( : Contours : CalibDataID, ContourName, CameraIdx, CalibObjIdx, CalibObjPoseIdx : ):从校准数据模型中获取基于轮廓的观测数据
参数ContourName:选择轮廓的类型('caltab':校准版轮廓,'marks':校准板的轮廓标记)
7.calibrate_cameras( : : CalibDataID : Error):标记相机
8.get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName : DataValue):查询在校准数据模型中存储或计算的数据
参数:
CalibDataID:校准数据模型句柄
ItemType:校准数据项的类型(ItemType='camera':优化相机系统内部参数)
ItemIdx:受影响项目的索引(取决于所选的项目类型)
DataName:被检查数据的名称('params':返回相机参数值, 'params_labels':返回'params'参数对应的参数名)
DataValue:输出的数据
9.get_calib_data_observ_points( : : CalibDataID, CameraIdx, CalibObjIdx, CalibObjPoseIdx : Row, Column, Index, Pose):从校准数据模型中获取基于点的观测数据
参数:
CalibDataID:校准数据模型句柄
CameraIdx:观测相机的索引
CalibObjIdx:校准对象的索引
CalibObjPoseIdx :被观侧校准对象的索引
输出:
Row:检测点的行坐标
Column:检测点的列坐标
Index:被测点与被测校准对象点的对应关系
Pose:粗略估计被检测校准物体相对于被测相机的姿态
10.gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle):准备提取垂直于矩形的直边,系统参数 'int_zooming'影响用于构造度量对象的计算的准确性和速度,如果 'int_zooming'设置为true则内部激素那将使用不动点算法执行,从而大大缩短执行时间,但是,这种模式下的几何精度略低
参数:
Row:矩形的中心点行坐标
Column:矩形的中线点列坐标
Phi:矩形纵轴与水平的夹角(弧度)
Length1:矩形的一半宽
Length2:矩形的一半高
Width:后续处理图像的宽度
Height:后续处理图像的高度
Interpolation :要使用的差值类型( 'bilinear':双线性差值,'bicubic':双三次插值, 'nearest_neighbor':测量中的灰度值由最近的灰度值,即通过常数插值获得)
MeasureHandle:测量对象句柄
11.measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance):提取垂直于矩形或唤醒弧的直边对,根据Threshold进行提取
参数:
Image:输入图像
MeasureHandle:测量对象句柄
Sigma:高斯平滑系数
Threshold:最低边缘幅度(最小边缘灰度差值)
Transition:确定如何将边缘分组为边缘对的灰度值转换类型
Select :选择边缘对
输出:
RowEdgeFirst:第一个边的中心的行坐标
ColumnEdgeFirst:第一个边的中心的列坐标
AmplitudeFirst:第一个边的边缘振幅
RowEdgeSecond:第二边中心点行坐标
ColumnEdgeSecond:第二边中心点列坐标
AmplitudeSecond:第二个边的边缘振幅
IntraDistance:一对边之间的距离
InterDistance:相邻边缘对之间的距离
12.image_points_to_world_plane( : : CameraParam, WorldPose, Rows, Cols, Scale : X, Y):将像素坐标转换到世界坐标系平面z=0
参数:
CameraParam:相机内参
WorldPose:世界坐标系在摄像机坐标系中的三维姿态
Rows:要转换点的行坐标
Cols:要转换点的列坐标
Scale :单位
X:在世界坐标系中的点的X坐标
Y:在世界坐标系中的点的Y坐标
13.distance_pp( : : Row1, Column1, Row2, Column2 : Distance):计算两点之间的距离