コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }