private void ResultsMatrices(StringBuilder result, CalibrationData.CameraIndex camIdx) { if(camIdx == CalibrationData.CameraIndex.Left) { result.AppendLine("Camera Matrix Left: "); } else { result.AppendLine("Camera Matrix Right: "); } Matrix<double> camera = CalibrationData.Data.GetCameraMatrix(camIdx); Matrix<double> calib = CalibrationData.Data.GetCalibrationMatrix(camIdx); Matrix<double> rotation = CalibrationData.Data.GetRotationMatrix(camIdx); Vector<double> center = CalibrationData.Data.GetTranslationVector(camIdx); Vector<double> epiPole = CalibrationData.Data.GetEpipole(camIdx); result.Append("|" + camera[0, 0].ToString("F3")); result.Append("; " + camera[0, 1].ToString("F3")); result.Append("; " + camera[0, 2].ToString("F3")); result.Append("; " + camera[0, 3].ToString("F3")); result.AppendLine("|"); result.Append("|" + camera[1, 0].ToString("F3")); result.Append("; " + camera[1, 1].ToString("F3")); result.Append("; " + camera[1, 2].ToString("F3")); result.Append("; " + camera[1, 3].ToString("F3")); result.AppendLine("|"); result.Append("|" + camera[2, 0].ToString("F3")); result.Append("; " + camera[2, 1].ToString("F3")); result.Append("; " + camera[2, 2].ToString("F3")); result.Append("; " + camera[2, 3].ToString("F3")); result.AppendLine("|"); result.AppendLine(""); result.AppendLine("Internal Parameters:"); result.Append("|" + calib[0, 0].ToString("F3")); result.Append("; " + calib[0, 1].ToString("F3")); result.Append("; " + calib[0, 2].ToString("F3")); result.AppendLine("|"); result.Append("|" + calib[1, 0].ToString("F3")); result.Append("; " + calib[1, 1].ToString("F3")); result.Append("; " + calib[1, 2].ToString("F3")); result.AppendLine("|"); result.Append("|" + calib[2, 0].ToString("F3")); result.Append("; " + calib[2, 1].ToString("F3")); result.Append("; " + calib[2, 2].ToString("F3")); result.AppendLine("|"); result.AppendLine(""); result.AppendLine("Rotation:"); result.Append("|" + rotation[0, 0].ToString("F3")); result.Append("; " + rotation[0, 1].ToString("F3")); result.Append("; " + rotation[0, 2].ToString("F3")); result.AppendLine("|"); result.Append("|" + rotation[1, 0].ToString("F3")); result.Append("; " + rotation[1, 1].ToString("F3")); result.Append("; " + rotation[1, 2].ToString("F3")); result.AppendLine("|"); result.Append("|" + rotation[2, 0].ToString("F3")); result.Append("; " + rotation[2, 1].ToString("F3")); result.Append("; " + rotation[2, 2].ToString("F3")); result.AppendLine("|"); result.AppendLine(""); result.AppendLine("Camera Center:"); result.Append("|" + center[0].ToString("F3")); result.Append("; " + center[1].ToString("F3")); result.Append("; " + center[2].ToString("F3")); result.AppendLine("|"); result.AppendLine(); result.AppendLine("Epipole: "); result.Append("[" + epiPole[0] / epiPole[2] + ", "); result.Append(epiPole[1] / epiPole[2] + "]"); }
private void ResultReprojectionError(StringBuilder result, CalibrationData.CameraIndex camIdx) { Matrix<double> camera = CalibrationData.Data.GetCameraMatrix(camIdx); var imgs = camIdx == CalibrationData.CameraIndex.Left ? _imgsLeft : _imgsRight; var reals = _reals; //camIdx == CalibrationData.CameraIndex.Left ? _realsLeft : _realsRight; var cpoints = camIdx == CalibrationData.CameraIndex.Left ? CalibPointsLeft : CalibPointsRight; var grids = CalibGrids; //camIdx == CalibrationData.CameraIndex.Left ? GridsLeft : GridsRight; string name = camIdx == CalibrationData.CameraIndex.Left ? "Left" : "Right"; double error = 0.0; double error2 = 0.0; double relerror = 0.0; double rerrx = 0.0; double rerry = 0.0; for(int p = 0; p < imgs.Length; ++p) { Vector<double> ip = cpoints[p].Img.ToMathNetVector3(); Vector<double> rp = reals[p]; Vector<double> eip = camera * rp; eip.DivideThis(eip[2]); var d = (ip - eip); double e = d.L2Norm(); error += e; error2 += e * e; ip[2] = 0.0; relerror += e / ip.L2Norm(); double rx = Math.Abs(d[0]) / Math.Abs(ip[0]), ry = Math.Abs(d[1]) / Math.Abs(ip[1]); rerrx += rx; rerry += ry; } result.AppendLine(); result.AppendLine("Reprojection error " + name + "( d(xi, PXr) ): "); result.AppendLine("Points count: " + imgs.Length.ToString()); result.AppendLine("Total: " + error.ToString("F4")); result.AppendLine("Total Squared: " + error2.ToString("F4")); result.AppendLine("Mean: " + (error / imgs.Length).ToString("F4")); }