private void btnFind_Click(object sender, EventArgs e) { int Num = Convert.ToInt32(((Button)sender).Tag); SelectedPattern = Num; if (CogMultiPatternAlgoRcp.ReferenceInfoList.Count <= Num) { MessageBox.Show("등록된 Pattern이 없습니다."); return; } CogMultiPatternResult _CogMultiPatternResult = new CogMultiPatternResult(); CogMultiPatternAlgo _CogMultiPatternAlgoRcp = new CogMultiPatternAlgo(); _CogMultiPatternAlgoRcp.MatchingScore = Convert.ToDouble(numericUpDownFindScore.Value); _CogMultiPatternAlgoRcp.MatchingCount = Convert.ToInt32(numericUpDownFindCount.Value); _CogMultiPatternAlgoRcp.MatchingAngle = Convert.ToDouble(numericUpDownAngleLimit.Value); _CogMultiPatternAlgoRcp.ReferenceInfoList = new References(); int ReferenceCount = 1; if (SelectedPattern == -1) { ReferenceCount = CogMultiPatternAlgoRcp.ReferenceInfoList.Count; } for (int iLoopCount = 0; iLoopCount < ReferenceCount; iLoopCount++) { ReferenceInformation _ReferInfo = new ReferenceInformation(); if (SelectedPattern != -1) { _ReferInfo = CogMultiPatternAlgoRcp.ReferenceInfoList[SelectedPattern]; } else { _ReferInfo = CogMultiPatternAlgoRcp.ReferenceInfoList[iLoopCount]; } _CogMultiPatternAlgoRcp.ReferenceInfoList.Add(_ReferInfo); } var _ApplyPatternMatchingValueEvent = ApplyMultiPatternValueEvent; _ApplyPatternMatchingValueEvent?.Invoke(_CogMultiPatternAlgoRcp, ref _CogMultiPatternResult); txtBoxAngle.Text = (_CogMultiPatternResult.IsGood) ? _CogMultiPatternResult.TwoPointAngle.ToString("N2") : "0.0"; }
public void SetAlgoRecipe(Object _Algorithm, double _BenchMarkOffsetX, double _BenchMarkOffsetY, double _ResolutionX, double _ResolutionY) { if (null == _Algorithm) { return; } CogMultiPatternAlgoRcp = _Algorithm as CogMultiPatternAlgo; ReferenceBackup.Clear(); for (int iLoopCount = 0; iLoopCount < CogMultiPatternAlgoRcp.ReferenceInfoList.Count; ++iLoopCount) { ReferenceInformation _ReferInfo = CogMultiPatternAlgoRcp.ReferenceInfoList[iLoopCount]; ReferenceBackup.Add(_ReferInfo); } ResolutionX = _ResolutionX; ResolutionY = _ResolutionY; BenchMarkOffsetX = _BenchMarkOffsetX; BenchMarkOffsetY = _BenchMarkOffsetY; numericUpDownFindScore.Value = Convert.ToDecimal(CogMultiPatternAlgoRcp.MatchingScore); numericUpDownFindCount.Value = Convert.ToDecimal(CogMultiPatternAlgoRcp.MatchingCount); numericUpDownAngleLimit.Value = Convert.ToDecimal(CogMultiPatternAlgoRcp.MatchingAngle); txtBoxAngle.Text = CogMultiPatternAlgoRcp.TwoPointAngle.ToString("F2"); //txtBoxAngle.Text = "0.0"; if (CogMultiPatternAlgoRcp.ReferenceInfoList.Count > 0) { for (int iLoopCount = 0; iLoopCount < CogMultiPatternAlgoRcp.ReferenceInfoList.Count; iLoopCount++) { ShowPatternImageArea(iLoopCount + 1); ShowPatternImage(iLoopCount + 1); } SetPatternButton(1, true); } else { ShowPatternImage(0); } }
private void ApplyMultiPatternValueFunction(CogMultiPatternAlgo _CogMultiPatternAlgo, ref CogMultiPatternResult _CogMultiPatternResult) { if (eTeachStep.ALGO_SET != CurrentTeachStep) { MessageBox.Show("Not select \"Algorithm Set\" button"); return; } AlgorithmAreaDisplayRefresh(); bool _Result = InspMultiPatternProcess.Run(InspectionImage, AlgoRegionRectangle, _CogMultiPatternAlgo, ref _CogMultiPatternResult); for (int iLoopCount = 0; iLoopCount < _CogMultiPatternResult.FindCount; ++iLoopCount) { CogRectangle _PatternRect = new CogRectangle(); _PatternRect.SetCenterWidthHeight(_CogMultiPatternResult.CenterX[iLoopCount], _CogMultiPatternResult.CenterY[iLoopCount], _CogMultiPatternResult.Width[iLoopCount], _CogMultiPatternResult.Height[iLoopCount]); kpTeachDisplay.DrawStaticShape(_PatternRect, "PatternRect" + (iLoopCount + 1), CogColorConstants.Green); CogPointMarker _Point = new CogPointMarker(); _Point.SetCenterRotationSize(_CogMultiPatternResult.OriginPointX[iLoopCount], _CogMultiPatternResult.OriginPointY[iLoopCount], 0, 2); kpTeachDisplay.DrawStaticShape(_Point, "PatternOrigin" + (iLoopCount + 1), CogColorConstants.Green, 12); string _MatchingName = string.Format($"Rate = {_CogMultiPatternResult.Score[iLoopCount]:F2}, X = {_CogMultiPatternResult.OriginPointX[iLoopCount]:F2}, Y = {_CogMultiPatternResult.OriginPointY[iLoopCount]:F2}"); kpTeachDisplay.DrawText(_MatchingName, _CogMultiPatternResult.OriginPointX[iLoopCount], _CogMultiPatternResult.OriginPointY[iLoopCount] + 30, CogColorConstants.Green, 10, CogGraphicLabelAlignmentConstants.BaselineCenter); } }
public bool Run(CogImage8Grey _SrcImage, CogRectangle _InspRegion, CogMultiPatternAlgo _CogMultiPatternAlgo, ref CogMultiPatternResult _CogMultiPatternResult) { bool _Result = true; PatternProc.RunParams.AcceptThreshold = _CogMultiPatternAlgo.MatchingScore / 100; PatternProc.RunParams.ZoneAngle.Configuration = CogPMAlignZoneConstants.LowHigh; PatternProc.RunParams.ZoneAngle.Low = _CogMultiPatternAlgo.MatchingAngle * -1; PatternProc.RunParams.ZoneAngle.High = _CogMultiPatternAlgo.MatchingAngle * 1; _CogMultiPatternResult.Score = new double[2]; _CogMultiPatternResult.Scale = new double[2]; _CogMultiPatternResult.Angle = new double[2]; _CogMultiPatternResult.CenterX = new double[2]; _CogMultiPatternResult.CenterY = new double[2]; _CogMultiPatternResult.OriginPointX = new double[2]; _CogMultiPatternResult.OriginPointY = new double[2]; _CogMultiPatternResult.Width = new double[2]; _CogMultiPatternResult.Height = new double[2]; for (int iLoopCount = 0; iLoopCount < _CogMultiPatternAlgo.ReferenceInfoList.Count; ++iLoopCount) { if (false == PatternInspection(_SrcImage, _InspRegion, _CogMultiPatternAlgo.ReferenceInfoList[iLoopCount].Reference)) continue; if (PatternResults != null && PatternResults.Count > 0) { CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Find Count : " + PatternResults.Count.ToString(), CLogManager.LOG_LEVEL.MID); int TopScoreIndex = 0; for (int jLoopCount = 0; jLoopCount < PatternResults.Count; ++jLoopCount) { if(PatternResults[TopScoreIndex].Score < PatternResults[jLoopCount].Score) TopScoreIndex = jLoopCount; } _CogMultiPatternResult.Score[iLoopCount] = PatternResults[TopScoreIndex].Score; _CogMultiPatternResult.Scale[iLoopCount] = PatternResults[TopScoreIndex].GetPose().Scaling; _CogMultiPatternResult.Angle[iLoopCount] = PatternResults[TopScoreIndex].GetPose().Rotation; _CogMultiPatternResult.OriginPointX[iLoopCount] = PatternResults[TopScoreIndex].GetPose().TranslationX; _CogMultiPatternResult.OriginPointY[iLoopCount] = PatternResults[TopScoreIndex].GetPose().TranslationY; _CogMultiPatternResult.CenterX[iLoopCount] = _CogMultiPatternResult.OriginPointX[iLoopCount] + _CogMultiPatternAlgo.ReferenceInfoList[iLoopCount].OriginPointOffsetX; _CogMultiPatternResult.CenterY[iLoopCount] = _CogMultiPatternResult.OriginPointY[iLoopCount] + _CogMultiPatternAlgo.ReferenceInfoList[iLoopCount].OriginPointOffsetY; _CogMultiPatternResult.Width[iLoopCount] = _CogMultiPatternAlgo.ReferenceInfoList[iLoopCount].Width; _CogMultiPatternResult.Height[iLoopCount] = _CogMultiPatternAlgo.ReferenceInfoList[iLoopCount].Height; CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Find Score : " + (_CogMultiPatternResult.Score[iLoopCount] * 100).ToString("F2"), CLogManager.LOG_LEVEL.MID); _CogMultiPatternResult.FindCount++; } else { _CogMultiPatternResult.IsGood = false; _CogMultiPatternResult.Score[iLoopCount] = 0; _CogMultiPatternResult.Scale[iLoopCount] = 0; _CogMultiPatternResult.Angle[iLoopCount] = 0; _CogMultiPatternResult.OriginPointX[iLoopCount] = _InspRegion.CenterX; _CogMultiPatternResult.OriginPointY[iLoopCount] = _InspRegion.CenterY; _CogMultiPatternResult.CenterX[iLoopCount] = _InspRegion.CenterX; _CogMultiPatternResult.CenterY[iLoopCount] = _InspRegion.CenterY; _CogMultiPatternResult.Width[iLoopCount] = _InspRegion.Width; _CogMultiPatternResult.Height[iLoopCount] = _InspRegion.Height; _Result = false; } } if (_CogMultiPatternResult.FindCount == 2) { double[] StartPoint = new double[2]; double[] EndPoint = new double[2]; StartPoint[0] = _CogMultiPatternResult.OriginPointX[0]; StartPoint[1] = _CogMultiPatternResult.OriginPointY[0]; EndPoint[0] = _CogMultiPatternResult.OriginPointX[1]; EndPoint[1] = _CogMultiPatternResult.OriginPointY[1]; if (false == AngleInspection(_SrcImage, _InspRegion, StartPoint, EndPoint, ref _CogMultiPatternResult.TwoPointAngle)) _Result = false; //LJH 2018.11.28 기존값을 기준으로 틀어준다. _CogMultiPatternResult.TwoPointAngle = _CogMultiPatternResult.TwoPointAngle - _CogMultiPatternAlgo.TwoPointAngle; _CogMultiPatternResult.IsGood = true; } CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Result : " + (_CogMultiPatternResult.IsGood).ToString(), CLogManager.LOG_LEVEL.MID); return _Result; }