/// <summary> /// Generate a intrinsic/extrinsic calibration from an initial set of four marker points. /// </summary> /// <param name="finals">List of ellipses</param> /// <param name="marker_ids">Ellipse ids of detected marker-ellipses</param> /// <param name="icp">Resulting intrinsic calibration</param> /// <param name="ecp">Resulting extrinsic calibration</param> /// <param name="size">Image size</param> private void ApproximatePlane(List <DetectedEllipse> finals, int[] marker_ids, out Emgu.CV.IntrinsicCameraParameters icp, out Emgu.CV.ExtrinsicCameraParameters ecp, System.Drawing.Size size) { // Currently the marker points correspond to corner points in the rectangular pattern. Vector[] object_points = new Vector[] { this.ObjectPoints[0], this.ObjectPoints[_number_circle_centers.Width - 1], this.ObjectPoints[_number_circle_centers.Width * (_number_circle_centers.Height - 1)], this.ObjectPoints[_number_circle_centers.Width * _number_circle_centers.Height - 1] }; System.Drawing.PointF[] image_points = marker_ids.Select(id => { return(finals[id].Ellipse.MCvBox2D.center); }).ToArray(); Parsley.Core.IntrinsicCalibration ic = new Parsley.Core.IntrinsicCalibration(object_points, size); ic.AddView(image_points); icp = ic.Calibrate(); Parsley.Core.ExtrinsicCalibration ec = new Parsley.Core.ExtrinsicCalibration(object_points, icp); ecp = ec.Calibrate(image_points); }
/// <summary> /// Generate a intrinsic/extrinsic calibration from an initial set of four marker points. /// </summary> /// <param name="finals">List of ellipses</param> /// <param name="marker_ids">Ellipse ids of detected marker-ellipses</param> /// <param name="icp">Resulting intrinsic calibration</param> /// <param name="ecp">Resulting extrinsic calibration</param> /// <param name="size">Image size</param> private void ApproximatePlane(List<DetectedEllipse> finals, int[] marker_ids, out Emgu.CV.IntrinsicCameraParameters icp, out Emgu.CV.ExtrinsicCameraParameters ecp, System.Drawing.Size size) { // Currently the marker points correspond to corner points in the rectangular pattern. Vector[] object_points = new Vector[] { this.ObjectPoints[0], this.ObjectPoints[_number_circle_centers.Width - 1], this.ObjectPoints[_number_circle_centers.Width * (_number_circle_centers.Height-1)], this.ObjectPoints[_number_circle_centers.Width * _number_circle_centers.Height - 1]}; System.Drawing.PointF[] image_points = marker_ids.Select(id => { return finals[id].Ellipse.MCvBox2D.center; }).ToArray(); Parsley.Core.IntrinsicCalibration ic = new Parsley.Core.IntrinsicCalibration(object_points, size); ic.AddView(image_points); icp = ic.Calibrate(); Parsley.Core.ExtrinsicCalibration ec = new Parsley.Core.ExtrinsicCalibration(object_points, icp); ecp = ec.Calibrate(image_points); }