private static FindCircularEdgeReport IVA_FindCircularEdge(VisionImage image, Roi roi, SpokeDirection direction, EdgeOptions options, CircularEdgeFitOptions fitOptions, IVA_Data ivaData, int stepIndex) { // First, delete all the results of this step (from a previous iteration) Functions.IVA_DisposeStepResults(ivaData, stepIndex); FindCircularEdgeOptions circleOptions = new FindCircularEdgeOptions(direction); circleOptions.EdgeOptions = options; FindCircularEdgeReport circleReport = new FindCircularEdgeReport(); // Calculate the edge locations circleReport = Algorithms.FindCircularEdge(image, roi, circleOptions, fitOptions); // If a circle was found, add results if (circleReport.CircleFound) { ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Center.X Position (Pix.)", circleReport.Center.X)); ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Center.Y Position (Pix.)", circleReport.Center.Y)); if ((image.InfoTypes & InfoTypes.Calibration) != 0) { ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Center.X Position (Calibrated)", circleReport.CenterCalibrated.X)); ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Center.Y Position (Calibrated)", circleReport.CenterCalibrated.Y)); } ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Radius (Pix.)", circleReport.Radius)); if ((image.InfoTypes & InfoTypes.Calibration) != 0) { ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Radius (Calibrated)", circleReport.RadiusCalibrated)); } ivaData.stepResults[stepIndex].results.Add(new IVA_Result("Deviation", circleReport.Roundness)); } return(circleReport); }
public static extern IntPtr imaqSpoke2(IntPtr image, ref ROI roi, SpokeDirection direction, EdgeProcess process, int stepSize, ref EdgeOptions2 edgeOptions);
private FitCircleReport FindCircularEdge(VisionImage image, AnnulusContour searchAnnulus, SpokeDirection spokeDirection, DrawOptions drawOptions, CoordinateTransform transform) { // Add the search rectangle to an Roi. Roi roi = new Roi(new Shape[] { searchAnnulus }); // Transform the Roi. Algorithms.TransformRoi(roi, transform); // Perform a spoke operation. SpokeReport report = Algorithms.Spoke(image, roi, spokeDirection, EdgeProcess.FirstAndLast, 8); Collection <PointContour> circlePoints = new Collection <PointContour>(); foreach (EdgeInfo edgeInfo in report.FirstEdges) { circlePoints.Add(edgeInfo.Position); } // Fit a circle to the points found. FitCircleReport circleReport = Algorithms.FitCircle(circlePoints); // Draw the results. if (drawOptions.ShowSearchLines) { foreach (SearchLineInfo lineInfo in report.SearchLines) { image.Overlays.Default.AddLine(lineInfo.Line, Rgb32Value.BlueColor); DrawArrow(image.Overlays.Default, lineInfo.Line, Rgb32Value.BlueColor); } } if (drawOptions.ShowSearchArea) { image.Overlays.Default.AddRoi(roi); } if (drawOptions.ShowEdgesFound) { foreach (EdgeInfo edgeInfo in report.FirstEdges) { image.Overlays.Default.AddRectangle(new RectangleContour(edgeInfo.Position.X - 1, edgeInfo.Position.Y - 1, 3, 3), Rgb32Value.YellowColor, DrawingMode.PaintValue); } } if (drawOptions.ShowResult) { // Overlay the center point. image.Overlays.Default.AddOval(new OvalContour(circleReport.Center.X - 2, circleReport.Center.Y - 2, 5, 5), Rgb32Value.RedColor, DrawingMode.PaintValue); // Overlay the circle. image.Overlays.Default.AddOval(new OvalContour(circleReport.Center.X - circleReport.Radius, circleReport.Center.Y - circleReport.Radius, 2 * circleReport.Radius, 2 * circleReport.Radius), Rgb32Value.RedColor, DrawingMode.DrawValue); } return(circleReport); }
public static extern IntPtr imaqSpoke(IntPtr image, ref ROI roi, SpokeDirection direction, EdgeProcess process, ref SpokeOptions options);