예제 #1
0
        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";
        }
예제 #2
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);
            }
        }
예제 #3
0
        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;
        }