/// <summary> /// 删除 /// </summary> public void Delete(int index) { if ((index >= 0) && (index < CalibPointList.Count)) { CalibPointList.RemoveAt(index); OnCalibrationPointListChanged(CalibPointList); } }
/// <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, "标定失败!请检查相关的数据")); } }
/// <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); }