public void SetAlgoRecipe(Object _Algorithm, double _BenchMarkOffsetX, double _BenchMarkOffsetY, double _ResolutionX, double _ResolutionY) { if (_Algorithm != null) { AlgoInitFlag = false; CogLineFindAlgoRcp = _Algorithm as CogLineFindAlgo; ResolutionX = _ResolutionX; ResolutionY = _ResolutionY; BenchMarkOffsetX = _BenchMarkOffsetX; BenchMarkOffsetY = _BenchMarkOffsetY; numUpDownCaliperNumber.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperNumber); numUpDownSearchLength.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperSearchLength); numUpDownProjectionLength.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperProjectionLength); numUpDownIgnoreNumber.Value = Convert.ToDecimal(CogLineFindAlgoRcp.IgnoreNumber); numUpDownContrastThreshold.Value = Convert.ToDecimal(CogLineFindAlgoRcp.ContrastThreshold); numUpDownFilterHalfSizePixels.Value = Convert.ToDecimal(CogLineFindAlgoRcp.FilterHalfSizePixels); numUpDownStartX.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperLineStartX); numUpDownStartY.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperLineStartY); numUpDownEndX.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperLineEndX); numUpDownEndY.Value = Convert.ToDecimal(CogLineFindAlgoRcp.CaliperLineEndY); ckUseAlignment.Checked = CogLineFindAlgoRcp.UseAlignment; SetSearchDirection(CogLineFindAlgoRcp.CaliperSearchDirection); AlgoInitFlag = true; } }
private void ApplyLineFindValueFunction(CogLineFindAlgo _CogLineFindAlgo, ref CogLineFindResult _CogLineFindResult) { if (eTeachStep.ALGO_SET != CurrentTeachStep) { MessageBox.Show("Not select \"Algorithm Set\" button"); return; } AlgorithmAreaDisplayRefresh(); CogImage8Grey _DestImage = new CogImage8Grey(); bool _Result = InspLineFindProcess.Run(InspectionImage, ref _DestImage, AlgoRegionRectangle, _CogLineFindAlgo, ref _CogLineFindResult); CogLineSegment _CogLine = new CogLineSegment(); if (_CogLineFindResult.StartX != 0 && _CogLineFindResult.StartY != 0 && _CogLineFindResult.Length != 0) { _CogLine.SetStartLengthRotation(_CogLineFindResult.StartX, _CogLineFindResult.StartY, _CogLineFindResult.Length, _CogLineFindResult.Rotation); kpTeachDisplay.DrawStaticLine(_CogLine, "LineFind", CogColorConstants.Green); } }
private void ApplySettingValue() { CogLineFindResult _CogLineFindResult = new CogLineFindResult(); CogLineFindAlgo _CogLineFindAlgoRcp = new CogLineFindAlgo(); _CogLineFindAlgoRcp.CaliperNumber = Convert.ToInt32(numUpDownCaliperNumber.Value); _CogLineFindAlgoRcp.CaliperSearchLength = Convert.ToDouble(numUpDownSearchLength.Value); _CogLineFindAlgoRcp.CaliperProjectionLength = Convert.ToDouble(numUpDownProjectionLength.Value); _CogLineFindAlgoRcp.CaliperSearchDirection = Convert.ToInt32(graLabelSearchDirection.Text); _CogLineFindAlgoRcp.IgnoreNumber = Convert.ToInt32(numUpDownIgnoreNumber.Text); _CogLineFindAlgoRcp.CaliperLineStartX = Convert.ToDouble(numUpDownStartX.Value); _CogLineFindAlgoRcp.CaliperLineStartY = Convert.ToDouble(numUpDownStartY.Value); _CogLineFindAlgoRcp.CaliperLineEndX = Convert.ToDouble(numUpDownEndX.Value); _CogLineFindAlgoRcp.CaliperLineEndY = Convert.ToDouble(numUpDownEndY.Value); var _ApplyLineFindEvent = ApplyLineFindEvent; _ApplyLineFindEvent?.Invoke(_CogLineFindAlgoRcp, ref _CogLineFindResult); }
private void DrawLineFindCaliperFunction(CogLineFindAlgo _CogLineFindAlgo) { if (eTeachStep.ALGO_SET != CurrentTeachStep) { MessageBox.Show("Not select \"Algorithm Set\" button"); return; } AlgorithmAreaDisplayRefresh(); CogFindLine _CogFindLine = new CogFindLine(); _CogFindLine.NumCalipers = _CogLineFindAlgo.CaliperNumber; _CogFindLine.CaliperSearchLength = _CogLineFindAlgo.CaliperSearchLength; _CogFindLine.CaliperProjectionLength = _CogLineFindAlgo.CaliperProjectionLength; _CogFindLine.CaliperSearchDirection = (_CogLineFindAlgo.CaliperSearchDirection == 90) ? 1.5708 : -1.5708; _CogFindLine.NumToIgnore = _CogLineFindAlgo.IgnoreNumber; _CogFindLine.CaliperRunParams.ContrastThreshold = _CogLineFindAlgo.ContrastThreshold; _CogFindLine.CaliperRunParams.FilterHalfSizeInPixels = _CogLineFindAlgo.FilterHalfSizePixels; _CogFindLine.ExpectedLineSegment.SetStartEnd(_CogLineFindAlgo.CaliperLineStartX, _CogLineFindAlgo.CaliperLineStartY, _CogLineFindAlgo.CaliperLineEndX, _CogLineFindAlgo.CaliperLineEndY); kpTeachDisplay.DrawFindLineCaliper(_CogFindLine); }
private void DrawLineFindCaliper() { CogLineFindAlgo _CogLineFindAlgoRcp = new CogLineFindAlgo(); _CogLineFindAlgoRcp.CaliperNumber = Convert.ToInt32(numUpDownCaliperNumber.Value); _CogLineFindAlgoRcp.CaliperSearchLength = Convert.ToDouble(numUpDownSearchLength.Value); _CogLineFindAlgoRcp.CaliperProjectionLength = Convert.ToDouble(numUpDownProjectionLength.Value); _CogLineFindAlgoRcp.CaliperSearchDirection = Convert.ToInt32(graLabelSearchDirection.Text); _CogLineFindAlgoRcp.CaliperLineStartX = Convert.ToDouble(numUpDownStartX.Value); _CogLineFindAlgoRcp.CaliperLineStartY = Convert.ToDouble(numUpDownStartY.Value); _CogLineFindAlgoRcp.CaliperLineEndX = Convert.ToDouble(numUpDownEndX.Value); _CogLineFindAlgoRcp.CaliperLineEndY = Convert.ToDouble(numUpDownEndY.Value); _CogLineFindAlgoRcp.IgnoreNumber = Convert.ToInt32(numUpDownIgnoreNumber.Value); _CogLineFindAlgoRcp.ContrastThreshold = Convert.ToInt32(numUpDownContrastThreshold.Value); _CogLineFindAlgoRcp.FilterHalfSizePixels = Convert.ToInt32(numUpDownFilterHalfSizePixels.Value); var _DrawLineFindCaliperEvent = DrawLineFindCaliperEvent; _DrawLineFindCaliperEvent?.Invoke(_CogLineFindAlgoRcp); }
public void SaveAlgoRecipe() { CogLineFindAlgo _CogLineFindAlgoRcp = new CogLineFindAlgo(); _CogLineFindAlgoRcp.CaliperNumber = Convert.ToInt32(numUpDownCaliperNumber.Value); _CogLineFindAlgoRcp.CaliperSearchLength = Convert.ToDouble(numUpDownSearchLength.Value); _CogLineFindAlgoRcp.CaliperProjectionLength = Convert.ToDouble(numUpDownProjectionLength.Value); _CogLineFindAlgoRcp.CaliperSearchDirection = Convert.ToInt32(graLabelSearchDirection.Text); _CogLineFindAlgoRcp.IgnoreNumber = Convert.ToInt32(numUpDownIgnoreNumber.Text); _CogLineFindAlgoRcp.ContrastThreshold = Convert.ToInt32(numUpDownContrastThreshold.Value); _CogLineFindAlgoRcp.FilterHalfSizePixels = Convert.ToInt32(numUpDownFilterHalfSizePixels.Value); _CogLineFindAlgoRcp.CaliperLineStartX = Convert.ToDouble(numUpDownStartX.Value); _CogLineFindAlgoRcp.CaliperLineStartY = Convert.ToDouble(numUpDownStartY.Value); _CogLineFindAlgoRcp.CaliperLineEndX = Convert.ToDouble(numUpDownEndX.Value); _CogLineFindAlgoRcp.CaliperLineEndY = Convert.ToDouble(numUpDownEndY.Value); var _CheckCaliperStatusEvent = CheckCaliperStatusEvent; bool?_Result = _CheckCaliperStatusEvent?.Invoke(_CogLineFindAlgoRcp); if (true == _Result) { CogLineFindAlgoRcp.CaliperNumber = Convert.ToInt32(numUpDownCaliperNumber.Value); CogLineFindAlgoRcp.CaliperSearchLength = Convert.ToInt32(numUpDownSearchLength.Value); CogLineFindAlgoRcp.CaliperProjectionLength = Convert.ToInt32(numUpDownProjectionLength.Value); CogLineFindAlgoRcp.CaliperSearchDirection = Convert.ToInt32(graLabelSearchDirection.Text); CogLineFindAlgoRcp.IgnoreNumber = Convert.ToInt32(numUpDownIgnoreNumber.Value); CogLineFindAlgoRcp.ContrastThreshold = Convert.ToInt32(numUpDownContrastThreshold.Value); CogLineFindAlgoRcp.FilterHalfSizePixels = Convert.ToInt32(numUpDownFilterHalfSizePixels.Value); CogLineFindAlgoRcp.CaliperLineStartX = Convert.ToInt32(numUpDownStartX.Value); CogLineFindAlgoRcp.CaliperLineStartY = Convert.ToInt32(numUpDownStartY.Value); CogLineFindAlgoRcp.CaliperLineEndX = Convert.ToInt32(numUpDownEndX.Value); CogLineFindAlgoRcp.CaliperLineEndY = Convert.ToInt32(numUpDownEndY.Value); CogLineFindAlgoRcp.UseAlignment = ckUseAlignment.Checked; CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, "Teaching CogLineFind SaveAlgoRecipe", CLogManager.LOG_LEVEL.MID); } }
public bool Run(CogImage8Grey _SrcImage, ref CogImage8Grey _DestImage, CogRectangle _InspRegion, CogLineFindAlgo _CogLineFindAlgo, ref CogLineFindResult _CogLineFindResult, int _NgNumber = 0) { bool _Result = true; SetCaliperContrastAndHalfPixel(_CogLineFindAlgo.ContrastThreshold, _CogLineFindAlgo.FilterHalfSizePixels); SetCaliperDirection(_CogLineFindAlgo.CaliperSearchDirection); SetCaliper(_CogLineFindAlgo.CaliperNumber, _CogLineFindAlgo.CaliperSearchLength, _CogLineFindAlgo.CaliperProjectionLength, _CogLineFindAlgo.IgnoreNumber); SetCaliperLine(_CogLineFindAlgo.CaliperLineStartX, _CogLineFindAlgo.CaliperLineStartY, _CogLineFindAlgo.CaliperLineEndX, _CogLineFindAlgo.CaliperLineEndY); if (true == Inspection(_SrcImage)) { GetResult(); } if (FindLineResults != null && (_CogLineFindAlgo.CaliperNumber - _CogLineFindAlgo.IgnoreNumber) < (FindLineResults.NumPointsFound + 5)) { try { _CogLineFindResult.StartX = FindLineResults.GetLineSegment().StartX; _CogLineFindResult.StartY = FindLineResults.GetLineSegment().StartY; _CogLineFindResult.EndX = FindLineResults.GetLineSegment().EndX; _CogLineFindResult.EndY = FindLineResults.GetLineSegment().EndY; _CogLineFindResult.Length = FindLineResults.GetLineSegment().Length; _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; _CogLineFindResult.PointCount = FindLineResults.Count; #region Line segment 설정별로, 결과 각도별로 보정값 계산 //Radian 값으로 설정 //Line segment가 가로 //if (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= -45 && FindLineProc.RunParams.ExpectedLineSegment.Rotation <= 45) if (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= -0.785 && FindLineProc.RunParams.ExpectedLineSegment.Rotation <= 0.785) { _CogLineFindResult.LineRotation = FindLineResults.GetLineSegment().Rotation; } //Line segment가 가로 //else if ((FindLineProc.RunParams.ExpectedLineSegment.Rotation >= -180 && FindLineProc.RunParams.ExpectedLineSegment.Rotation <= -130) || // (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= 135 && FindLineProc.RunParams.ExpectedLineSegment.Rotation < 180)) else if ((FindLineProc.RunParams.ExpectedLineSegment.Rotation >= -3.15 && FindLineProc.RunParams.ExpectedLineSegment.Rotation <= -2.26) || (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= 2.26 && FindLineProc.RunParams.ExpectedLineSegment.Rotation < 3.14)) { if (_CogLineFindResult.Rotation > 0) { _CogLineFindResult.LineRotation = _CogLineFindResult.Rotation - 3.14159; } else { _CogLineFindResult.LineRotation = 3.14159 + _CogLineFindResult.Rotation; } } //Line segment가 세로(90도) else if (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= 0.785 && FindLineProc.RunParams.ExpectedLineSegment.Rotation < 2.35) { _CogLineFindResult.LineRotation = (-1.57) + _CogLineFindResult.Rotation; } else if (FindLineProc.RunParams.ExpectedLineSegment.Rotation >= -2.35 && FindLineProc.RunParams.ExpectedLineSegment.Rotation < -0.785) { _CogLineFindResult.LineRotation = _CogLineFindResult.Rotation - (-1.57); } #endregion if (_CogLineFindAlgo.UseAlignment) { CogAffineTransformTool _CogTransForm = new CogAffineTransformTool(); CogRectangleAffine _AffineRegion = new CogRectangleAffine(); _AffineRegion.SetCenterLengthsRotationSkew(_InspRegion.CenterX, _InspRegion.CenterY, _InspRegion.Width, _InspRegion.Height, _CogLineFindResult.LineRotation, 0); _CogTransForm.InputImage = _SrcImage; _CogTransForm.Region = _AffineRegion; _CogTransForm.Run(); CogCopyRegionTool _CopyRegion = new CogCopyRegionTool(); _CopyRegion.InputImage = _CogTransForm.OutputImage; _CopyRegion.DestinationImage = _SrcImage; _CopyRegion.RunParams.ImageAlignmentEnabled = true; _CopyRegion.Region = null; _CopyRegion.Run(); _DestImage = (CogImage8Grey)_CopyRegion.OutputImage; if (true == Inspection(_DestImage)) { GetResult(); } if (FindLineResults != null) { _CogLineFindResult.StartX = FindLineResults.GetLineSegment().StartX; _CogLineFindResult.StartY = FindLineResults.GetLineSegment().StartY; _CogLineFindResult.EndX = FindLineResults.GetLineSegment().EndX; _CogLineFindResult.EndY = FindLineResults.GetLineSegment().EndY; _CogLineFindResult.Length = FindLineResults.GetLineSegment().Length; _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; _CogLineFindResult.PointCount = FindLineResults.Count; _CogLineFindResult.IsGood = true; } else { _CogLineFindResult.IsGood = false; } GC.Collect(); } else { _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; double _Rotation = 0; _Rotation = _CogLineFindResult.Rotation * 180 / Math.PI; _CogLineFindResult.IsGood = true; } } catch { _CogLineFindResult.IsGood = false; } } else { _CogLineFindResult.IsGood = false; } return(_Result); }
public bool Run(CogImage8Grey _SrcImage, ref CogImage8Grey _DestImage, CogRectangle _InspRegion, CogLineFindAlgo _CogLineFindAlgo, ref CogLineFindResult _CogLineFindResult, int _NgNumber = 0) { bool _Result = true; SetCaliperDirection(_CogLineFindAlgo.CaliperSearchDirection); SetCaliper(_CogLineFindAlgo.CaliperNumber, _CogLineFindAlgo.CaliperSearchLength, _CogLineFindAlgo.CaliperProjectionLength, _CogLineFindAlgo.IgnoreNumber); SetCaliperLine(_CogLineFindAlgo.CaliperLineStartX, _CogLineFindAlgo.CaliperLineStartY, _CogLineFindAlgo.CaliperLineEndX, _CogLineFindAlgo.CaliperLineEndY); if (true == Inspection(_SrcImage)) { GetResult(); } if (FindLineResults != null && (_CogLineFindAlgo.CaliperNumber - _CogLineFindAlgo.IgnoreNumber) < (FindLineResults.NumPointsFound + 5)) { try { _CogLineFindResult.StartX = FindLineResults.GetLineSegment().StartX; _CogLineFindResult.StartY = FindLineResults.GetLineSegment().StartY; _CogLineFindResult.EndX = FindLineResults.GetLineSegment().EndX; _CogLineFindResult.EndY = FindLineResults.GetLineSegment().EndY; _CogLineFindResult.Length = FindLineResults.GetLineSegment().Length; _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; _CogLineFindResult.PointCount = FindLineResults.Count; if (_CogLineFindAlgo.UseAlignment) { CogAffineTransformTool _CogTransForm = new CogAffineTransformTool(); CogRectangleAffine _AffineRegion = new CogRectangleAffine(); _AffineRegion.SetCenterLengthsRotationSkew(_InspRegion.CenterX, _InspRegion.CenterY, _InspRegion.Width, _InspRegion.Height, _CogLineFindResult.Rotation, 0); _CogTransForm.InputImage = _SrcImage; _CogTransForm.Region = _AffineRegion; _CogTransForm.Run(); CogCopyRegionTool _CopyRegion = new CogCopyRegionTool(); _CopyRegion.InputImage = _CogTransForm.OutputImage; _CopyRegion.DestinationImage = _SrcImage; _CopyRegion.RunParams.ImageAlignmentEnabled = true; _CopyRegion.Region = null; _CopyRegion.Run(); _DestImage = (CogImage8Grey)_CopyRegion.OutputImage; if (true == Inspection(_DestImage)) { GetResult(); } if (FindLineResults != null) { _CogLineFindResult.StartX = FindLineResults.GetLineSegment().StartX; _CogLineFindResult.StartY = FindLineResults.GetLineSegment().StartY; _CogLineFindResult.EndX = FindLineResults.GetLineSegment().EndX; _CogLineFindResult.EndY = FindLineResults.GetLineSegment().EndY; _CogLineFindResult.Length = FindLineResults.GetLineSegment().Length; _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; _CogLineFindResult.PointCount = FindLineResults.Count; _CogLineFindResult.IsGood = true; } else { _CogLineFindResult.IsGood = false; } GC.Collect(); } else { _CogLineFindResult.Rotation = FindLineResults.GetLineSegment().Rotation; double _Rotation = 0; _Rotation = _CogLineFindResult.Rotation * 180 / Math.PI; _CogLineFindResult.IsGood = true; } } catch { _CogLineFindResult.IsGood = false; } } else { _CogLineFindResult.IsGood = false; } return(_Result); }