Example #1
0
        private void btnFind_Click(object sender, EventArgs e)
        {
            CogPatternResult _CogPatternResult  = new CogPatternResult();
            CogPatternAlgo   _CogPatternAlgoRcp = new CogPatternAlgo();

            _CogPatternAlgoRcp.MatchingScore = Convert.ToDouble(numericUpDownFindScore.Value);
            _CogPatternAlgoRcp.MatchingCount = Convert.ToInt32(numericUpDownFindCount.Value);
            _CogPatternAlgoRcp.MatchingAngle = Convert.ToDouble(numericUpDownAngleLimit.Value);
            _CogPatternAlgoRcp.IsShift       = Convert.ToBoolean(checkBoxShift.Checked);
            _CogPatternAlgoRcp.AllowedShiftX = Convert.ToDouble(numericUpDownAllowedShiftX.Value);
            _CogPatternAlgoRcp.AllowedShiftY = Convert.ToDouble(numericUpDownAllowedShiftY.Value);
            _CogPatternAlgoRcp.PatternCount  = CogPatternAlgoRcp.ReferenceInfoList.Count;

            _CogPatternAlgoRcp.ReferenceInfoList = new References();
            for (int iLoopCount = 0; iLoopCount < CogPatternAlgoRcp.ReferenceInfoList.Count; ++iLoopCount)
            {
                ReferenceInformation _ReferInfo = new ReferenceInformation();
                _ReferInfo = CogPatternAlgoRcp.ReferenceInfoList[iLoopCount];
                _CogPatternAlgoRcp.ReferenceInfoList.Add(_ReferInfo);
            }

            var _ApplyPatternMatchingValueEvent = ApplyPatternMatchingValueEvent;

            _ApplyPatternMatchingValueEvent?.Invoke(_CogPatternAlgoRcp, ref _CogPatternResult);
        }
Example #2
0
        public void SetAlgoRecipe(Object _Algorithm, double _BenchMarkOffsetX, double _BenchMarkOffsetY, double _ResolutionX, double _ResolutionY)
        {
            if (null == _Algorithm)
            {
                return;
            }
            CurrentPattern = 0;

            CogPatternAlgoRcp = _Algorithm as CogPatternAlgo;
            ReferenceBackup.Clear();
            for (int iLoopCount = 0; iLoopCount < CogPatternAlgoRcp.ReferenceInfoList.Count; ++iLoopCount)
            {
                ReferenceInformation _ReferInfo = CogPatternAlgoRcp.ReferenceInfoList[iLoopCount];
                ReferenceBackup.Add(_ReferInfo);
            }

            ResolutionX      = _ResolutionX;
            ResolutionY      = _ResolutionY;
            BenchMarkOffsetX = _BenchMarkOffsetX;
            BenchMarkOffsetY = _BenchMarkOffsetY;

            numericUpDownFindScore.Value     = Convert.ToDecimal(CogPatternAlgoRcp.MatchingScore);
            numericUpDownFindCount.Value     = Convert.ToDecimal(CogPatternAlgoRcp.MatchingCount);
            numericUpDownAngleLimit.Value    = Convert.ToDecimal(CogPatternAlgoRcp.MatchingAngle);
            numericUpDownAllowedShiftX.Value = Convert.ToDecimal(CogPatternAlgoRcp.AllowedShiftX);
            numericUpDownAllowedShiftY.Value = Convert.ToDecimal(CogPatternAlgoRcp.AllowedShiftY);
            checkBoxShift.Checked            = CogPatternAlgoRcp.IsShift;
            labelPatternCount.Text           = CogPatternAlgoRcp.ReferenceInfoList.Count.ToString();

            CogPatternAlgoRcp.PatternCount = CogPatternAlgoRcp.ReferenceInfoList.Count;
            if (CogPatternAlgoRcp.ReferenceInfoList.Count > 0)
            {
                if (CurrentPattern == 0)
                {
                    CurrentPattern = 1;
                }
                ShowPatternImageArea(CurrentPattern);
                ShowPatternImage(CurrentPattern);
                UpdatePatternCount();
            }
            else
            {
                ShowPatternImage(0);
            }
        }
Example #3
0
        private void ApplyPatternMatchingValueFunction(CogPatternAlgo _CogPatternAlgo, ref CogPatternResult _CogPatternResult)
        {
            if (eTeachStep.ALGO_SET != CurrentTeachStep)
            {
                MessageBox.Show("Not select \"Algorithm Set\" button"); return;
            }
            AlgorithmAreaDisplayRefresh();

            bool _Result = InspPatternProcess.Run(InspectionImage, AlgoRegionRectangle, _CogPatternAlgo, ref _CogPatternResult);

            for (int iLoopCount = 0; iLoopCount < _CogPatternResult.FindCount; ++iLoopCount)
            {
                CogRectangle _PatternRect = new CogRectangle();
                _PatternRect.SetCenterWidthHeight(_CogPatternResult.CenterX[iLoopCount], _CogPatternResult.CenterY[iLoopCount], _CogPatternResult.Width[iLoopCount], _CogPatternResult.Height[iLoopCount]);
                kpTeachDisplay.DrawStaticShape(_PatternRect, "PatternRect" + (iLoopCount + 1), CogColorConstants.Green);

                CogPointMarker _Point = new CogPointMarker();
                _Point.SetCenterRotationSize(_CogPatternResult.OriginPointX[iLoopCount], _CogPatternResult.OriginPointY[iLoopCount], 0, 2);
                kpTeachDisplay.DrawStaticShape(_Point, "PatternOrigin" + (iLoopCount + 1), CogColorConstants.Green, 12);

                string _MatchingName = string.Format($"Rate = {_CogPatternResult.Score[iLoopCount]:F2}, X = {_CogPatternResult.OriginPointX[iLoopCount]:F2}, Y = {_CogPatternResult.OriginPointY[iLoopCount]:F2}");
                kpTeachDisplay.DrawText(_MatchingName, _CogPatternResult.OriginPointX[iLoopCount], _CogPatternResult.OriginPointY[iLoopCount] + 30, CogColorConstants.Green, 10, CogGraphicLabelAlignmentConstants.BaselineCenter);
            }
        }
        public bool Run(CogImage8Grey _SrcImage, CogRectangle _InspRegion, CogPatternAlgo _CogPatternAlgo, ref CogPatternResult _CogPatternResult)
        {
            bool _Result = false;

            if (_CogPatternAlgo.ReferenceInfoList.Count > 0)
            {
                //LDH, 2019.01.04, Score 80%로 설정
                double _MinMatchingScore = _CogPatternAlgo.MatchingScore * 0.8;

                PatternProc.RunParams.AcceptThreshold         = _MinMatchingScore / 100;
                PatternProc.RunParams.ApproximateNumberToFind = _CogPatternAlgo.MatchingCount;
                PatternProc.RunParams.ZoneAngle.Configuration = CogPMAlignZoneConstants.LowHigh;
                PatternProc.RunParams.ZoneAngle.Low           = _CogPatternAlgo.MatchingAngle * -1 * Math.PI / 180;
                PatternProc.RunParams.ZoneAngle.High          = _CogPatternAlgo.MatchingAngle * 1 * Math.PI / 180;

                for (int iLoopCount = 0; iLoopCount < _CogPatternAlgo.ReferenceInfoList.Count; ++iLoopCount)
                {
                    List <int> _PatternIndexList = new List <int>();

                    if (false == Inspection(_SrcImage, _InspRegion, _CogPatternAlgo.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);

                        _CogPatternResult.FindCount = 0;
                        for (int jLoopCount = 0; jLoopCount < PatternResults.Count; ++jLoopCount)
                        {
                            if (PatternResults[jLoopCount].Score * 100 >= _MinMatchingScore)
                            {
                                _CogPatternResult.FindCount++;

                                //LDH, 2019.01.04, Score 순서로 Index 정렬
                                if (_PatternIndexList.Count == 0 || PatternResults[jLoopCount].Score <= PatternResults[_PatternIndexList[0]].Score)
                                {
                                    _PatternIndexList.Add(jLoopCount);
                                }
                                else
                                {
                                    _PatternIndexList.Insert(0, jLoopCount);
                                }
                            }
                        }

                        if (_CogPatternResult.FindCount > _CogPatternAlgo.MatchingCount)
                        {
                            _CogPatternResult.FindCount = _CogPatternAlgo.MatchingCount;
                        }

                        if (_CogPatternResult.FindCount > 0)
                        {
                            _CogPatternResult.Score        = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.Scale        = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.Angle        = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.CenterX      = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.CenterY      = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.OriginPointX = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.OriginPointY = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.Width        = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.Height       = new double[_CogPatternResult.FindCount];
                            _CogPatternResult.IsGoods      = new bool[_CogPatternResult.FindCount];

                            _CogPatternResult.IsGood = false;

                            //int _Index = 0;
                            for (int jLoopCount = 0; jLoopCount < _CogPatternResult.FindCount; ++jLoopCount)
                            {
                                //if (PatternResults[jLoopCount].Score * 100 >= _CogPatternAlgo.MatchingScore)
                                if (PatternResults[jLoopCount].Score * 100 >= _MinMatchingScore)
                                {
                                    _CogPatternResult.Score[jLoopCount]        = PatternResults[_PatternIndexList[jLoopCount]].Score;
                                    _CogPatternResult.Scale[jLoopCount]        = PatternResults[_PatternIndexList[jLoopCount]].GetPose().Scaling;
                                    _CogPatternResult.Angle[jLoopCount]        = PatternResults[_PatternIndexList[jLoopCount]].GetPose().Rotation;
                                    _CogPatternResult.OriginPointX[jLoopCount] = PatternResults[_PatternIndexList[jLoopCount]].GetPose().TranslationX;
                                    _CogPatternResult.OriginPointY[jLoopCount] = PatternResults[_PatternIndexList[jLoopCount]].GetPose().TranslationY;
                                    _CogPatternResult.CenterX[jLoopCount]      = _CogPatternResult.OriginPointX[_PatternIndexList[jLoopCount]] + _CogPatternAlgo.ReferenceInfoList[iLoopCount].OriginPointOffsetX;
                                    _CogPatternResult.CenterY[jLoopCount]      = _CogPatternResult.OriginPointY[_PatternIndexList[jLoopCount]] + _CogPatternAlgo.ReferenceInfoList[iLoopCount].OriginPointOffsetY;
                                    _CogPatternResult.Width[jLoopCount]        = _CogPatternAlgo.ReferenceInfoList[iLoopCount].Width;
                                    _CogPatternResult.Height[jLoopCount]       = _CogPatternAlgo.ReferenceInfoList[iLoopCount].Height;
                                    //_Index++;

                                    if (PatternResults[_PatternIndexList[jLoopCount]].Score * 100 >= _CogPatternAlgo.MatchingScore)
                                    {
                                        _CogPatternResult.IsGood = true;
                                        _CogPatternResult.IsGoods[jLoopCount] = true;
                                    }
                                    else
                                    {
                                        _CogPatternResult.IsGoods[jLoopCount] = false;
                                    }

                                    CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Find Score : " + (_CogPatternResult.Score[jLoopCount] * 100).ToString("F2"), CLogManager.LOG_LEVEL.MID);
                                }
                            }

                            //_CogPatternResult.IsGood = true;
                            break;
                        }

                        else
                        {
                            _CogPatternResult.IsGood = false;
                        }
                    }

                    else
                    {
                        _CogPatternResult.IsGood = false;
                    }
                }
            }

            else
            {
                _CogPatternResult.IsGood = false;
            }

            if (0 == _CogPatternResult.FindCount)
            {
                _CogPatternResult.Score        = new double[1];
                _CogPatternResult.Scale        = new double[1];
                _CogPatternResult.Angle        = new double[1];
                _CogPatternResult.CenterX      = new double[1];
                _CogPatternResult.CenterY      = new double[1];
                _CogPatternResult.OriginPointX = new double[1];
                _CogPatternResult.OriginPointY = new double[1];
                _CogPatternResult.Width        = new double[1];
                _CogPatternResult.Height       = new double[1];

                _CogPatternResult.Score[0]        = 0;
                _CogPatternResult.Scale[0]        = 0;
                _CogPatternResult.Angle[0]        = 0;
                _CogPatternResult.OriginPointX[0] = _InspRegion.CenterX;
                _CogPatternResult.OriginPointY[0] = _InspRegion.CenterY;
                _CogPatternResult.CenterX[0]      = _InspRegion.CenterX;
                _CogPatternResult.CenterY[0]      = _InspRegion.CenterY;
                _CogPatternResult.Width[0]        = _InspRegion.Width;
                _CogPatternResult.Height[0]       = _InspRegion.Height;
            }

            CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Result : " + (_CogPatternResult.IsGood).ToString(), CLogManager.LOG_LEVEL.MID);

            return(_Result);
        }