Ejemplo n.º 1
0
 /// <summary>
 /// 删除
 /// </summary>
 public void Delete(int index)
 {
     if ((index >= 0) && (index < CalibPointList.Count))
     {
         CalibPointList.RemoveAt(index);
         OnCalibrationPointListChanged(CalibPointList);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 标定
        /// </summary>
        public void GetCalibMatrix()
        {
            //拼接数据
            double[] pxArray = new double[CalibPointList.Count];
            double[] pyArray = new double[CalibPointList.Count];
            double[] qxArray = new double[CalibPointList.Count];
            double[] qyArray = new double[CalibPointList.Count];
            double[] posMatrix;
            double[] invMatrix;
            bool     result1 = false;
            bool     result2 = false;

            CalibParam.CalibPointList.Clear();

            for (int i = 0; i < CalibPointList.Count; i++)
            {
                pxArray[i] = CalibPointList[i].Px;
                pyArray[i] = CalibPointList[i].Py;
                qxArray[i] = CalibPointList[i].Qx;
                qyArray[i] = CalibPointList[i].Qy;
            }
            CalibParam.CalibPointList = CalibPointList.ToList();

            //计算标定矩阵
            if (GetCalibMatrixCallback != null)
            {
                result1 = GetCalibMatrixCallback.Invoke(pxArray, pyArray, qxArray, qyArray, out posMatrix);
                result2 = GetCalibMatrixCallback.Invoke(qxArray, qyArray, pxArray, pyArray, out invMatrix);
            }
            else
            {
                result1 = SimpleVision.Calibration.CreateCalibMatrix(pxArray, pyArray, qxArray, qyArray, out posMatrix);
                result2 = SimpleVision.Calibration.CreateCalibMatrix(qxArray, qyArray, pxArray, pyArray, out invMatrix);
            }

            //结果保存
            CalibParam.IsValid   = result1 && result2;
            CalibParam.Matrix    = posMatrix;
            CalibParam.InvMatrix = invMatrix;

            NotifyOfPropertyChange(() => Matrix);

            if (CalibParam.IsValid)
            {
                MessageRaised?.Invoke(this, new MessageRaisedEventArgs(MessageLevel.Message, "标定成功!"));
            }
            else
            {
                MessageRaised?.Invoke(this, new MessageRaisedEventArgs(MessageLevel.Warning, "标定失败!请检查相关的数据"));
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 增加
 /// </summary>
 public void Add(double px, double py, double qx, double qy)
 {
     CalibPointList.Add(new CalibPointData(px, py, qx, qy));
     OnCalibrationPointListChanged(CalibPointList);
 }
 /// <summary>
 /// 增加点位
 /// </summary>
 /// <param name="location">点位位置</param>
 /// <param name="px">原始X点位</param>
 /// <param name="py">原始Y点位</param>
 /// <param name="qx">转换X点位</param>
 /// <param name="qy">转换Y点位</param>
 public void Add(ECalibrationPointLocation location, double px, double py, double qx, double qy)
 {
     CalibPointList.Add(new CalibrationPoint(location, px, py, qx, qy));
     OnCalibrationPointListChanged(CalibPointList);
 }