halcon标定代码注解

halcon的标定助手生成的代码注释,部分变量做了全局处理

  • 相机参数初始化
 /// <summary>
        /// 相机参数初始化
        /// </summary>
        /// <param name="focalLength">焦距,单位:mm</param>
        /// <param name="cellWidth">像素宽度,单位:um</param>
        /// <param name="cellHeigth">像素高度,单位:um</param>
        /// <param name="width">分辨率宽度,单位:像素</param>
        /// <param name="heigth">分辨率高度,单位:像素</param>
        public void ParamInit(double focalLength, double cellWidth, double cellHeigth, int width, int heigth)
        {
            //相机参数初始化
            startParameters = new HTuple();
            startParameters[0] = focalLength/1000.0;//焦距此处单位为m,需要转换
            startParameters[1] = 0;                 //畸变参数,初始为0
            startParameters[2] = cellWidth/1000000.0;    //像素宽度       
            startParameters[3] = cellHeigth / 1000000.0; //像素高度          
            startParameters[4] = width/2;
            startParameters[5] = heigth/2;
            startParameters[6] = width;
            startParameters[7] = heigth;
        }
  • 列表内容
// 本地图形变量 
            HObject ho_Image = null, ho_TmpObj_PlateRegion = null;
            //本地控制变量 

            HTuple hv_TmpCtrl_AllMarkRows = null;
            HTuple hv_TmpCtrl_AllMarkColumns = null, hv_TmpCtrl_StartPoses = null;

            HTuple hv_TmpCtrl_ReferenceIndex = 0;//位姿图片序号选择
            HTuple hv_TmpCtrl_MarkRows = new HTuple();
            HTuple hv_TmpCtrl_MarkColumns = new HTuple(), hv_TmpCtrl_EstimatedPose = new HTuple();
            HTuple hv_TmpCtrl_X = null, hv_TmpCtrl_Y = null, hv_TmpCtrl_Z = null;
            HTuple hv_TmpCtrl_FinalPoses = null;

            //图形变量初始化
            ho_Image.GenEmptyObj();
            ho_TmpObj_PlateRegion.GenEmptyObj();
            if(imageFiles.Count==0)
            {
                throw new Exception("标定图片信息异常");
            }
            for (int hv_Index = 0; hv_Index < imageFiles.Count;hv_Index++)
            {
                //读取图片
                HOperatorSet.ReadImage(out ho_Image, imageFiles[hv_Index]);
                //提取图像Images中标定板上的圆形标志来确定标定板的有效区域
                HOperatorSet.FindCaltab(
                    ho_Image, 
                    out ho_TmpObj_PlateRegion, //有效区域
                    plateDescription,//标定板描述文件
                    3, //高斯滤波器大小,可选参数:0, 3, 5, 7, 9, 11, 'gap_tolerance' 
                    112, //标记提取的阈值,可选参数:48, 64, 80, 96, 112, 128, 144, 160, 0.5, 0.9, 1.0, 1.1, 1.5 
                    5);//标定板上孔的最小直径,可选参数: 3, 5, 9, 15, 30, 50, 70
                //确定标定板上圆形标志点的二维坐标,并得到摄像机外部参数的初始值
                HOperatorSet.FindMarksAndPose(
                    ho_Image, 
                    ho_TmpObj_PlateRegion, //有效区域
                    plateDescription,//描述文件
                    startParameters, //相机参数
                    128, //轮廓检测的初始阈值,可选参数:80, 96, 112, 128, 144, 160
                    10, //循环值,用于与轮廓检测的初始阀值,可选参数:6, 8, 10, 12, 14, 16, 18, 20, 22
                    18, //轮廓检测的最小阈值,可选参数: 8, 10, 12, 14, 16, 18, 20, 22
                    0.9, //轮廓检测的过滤参数,建议值:0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
                    15, //标记轮廓的最小长度,建议值:10.0, 15.0, 20.0, 30.0, 40.0, 100.0
                    100, //标记的最大预期直径,建议值:50.0, 100.0, 150.0, 200.0, 300.0
                    out hv_TmpCtrl_MarkRows,//Mark行坐标序列
                    out hv_TmpCtrl_MarkColumns,//Mark列坐标序列
                    out hv_TmpCtrl_EstimatedPose);//相机姿态数据
                //保存坐标值
                hv_TmpCtrl_AllMarkRows = hv_TmpCtrl_AllMarkRows.TupleConcat(hv_TmpCtrl_MarkRows);
                hv_TmpCtrl_AllMarkColumns = hv_TmpCtrl_AllMarkColumns.TupleConcat(hv_TmpCtrl_MarkColumns);
                hv_TmpCtrl_StartPoses = hv_TmpCtrl_StartPoses.TupleConcat(hv_TmpCtrl_EstimatedPose);
            }
            //标定板描述文件读出坐标序列
            HOperatorSet.CaltabPoints(plateDescription, out hv_TmpCtrl_X, out hv_TmpCtrl_Y,
                out hv_TmpCtrl_Z);
            //确定摄像机的内参,误差分析
            HOperatorSet.CameraCalibration(hv_TmpCtrl_X, hv_TmpCtrl_Y, hv_TmpCtrl_Z, hv_TmpCtrl_AllMarkRows,
                hv_TmpCtrl_AllMarkColumns, startParameters, hv_TmpCtrl_StartPoses, "all",
                out cameraParameters, out hv_TmpCtrl_FinalPoses, out errors);
            //标定板位姿数组选择
            HOperatorSet.TupleSelectRange(hv_TmpCtrl_FinalPoses, 7 * hv_TmpCtrl_ReferenceIndex,
                (7 * hv_TmpCtrl_ReferenceIndex) + 6, out cameraPose);
            //依据标定板位姿及厚度调整原点
            HOperatorSet.SetOriginPose(cameraPose, 0.0, 0.0, thickness/1000.0, out cameraPose);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值