Esempio n. 1
0
        public List <double> GetLeadGuidePosition(CogBlobResults _BlobResults)
        {
            List <double> _GuidePositionList = new List <double>();

            if (null == _BlobResults || _BlobResults.GetBlobs().Count <= 0)
            {
                return(_GuidePositionList);
            }

            for (int iLoopCount = 0; iLoopCount < _BlobResults.GetBlobs().Count; ++iLoopCount)
            {
                double _CenterX = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeCenterX, iLoopCount);

                bool _IsNew = true;
                for (int jLoopCount = 0; jLoopCount < _GuidePositionList.Count; ++jLoopCount)
                {
                    if (_CenterX > _GuidePositionList[jLoopCount] - 100 && _CenterX < _GuidePositionList[jLoopCount] + 100)
                    {
                        _IsNew = false;
                        break;
                    }
                }

                if (true == _IsNew)
                {
                    double _GuidePosTemp;
                    _GuidePosTemp = _CenterX;
                    _GuidePositionList.Add(_GuidePosTemp);
                }
            }

            _GuidePositionList.Sort();

            return(_GuidePositionList);
        }
        private bool GetResult(bool _IsGraphicResult)
        {
            bool _Result = true;

            if (null == BlobResults || BlobResults.GetBlobs().Count < 0)
            {
                return(false);
            }
            InspResults.BlobCount       = BlobResults.GetBlobs().Count;
            InspResults.BlobArea        = new double[BlobResults.GetBlobs().Count];
            InspResults.Width           = new double[BlobResults.GetBlobs().Count];
            InspResults.Height          = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMinX        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMinY        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMaxX        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMaxY        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobCenterX     = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobCenterY     = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMessCenterX = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMessCenterY = new double[BlobResults.GetBlobs().Count];
            InspResults.OriginX         = new double[BlobResults.GetBlobs().Count];
            InspResults.OriginY         = new double[BlobResults.GetBlobs().Count];
            InspResults.IsGoods         = new bool[BlobResults.GetBlobs().Count];
            if (_IsGraphicResult)
            {
                InspResults.ResultGraphic = new CogCompositeShape[InspResults.BlobCount];
            }

            for (int iLoopCount = 0; iLoopCount < InspResults.BlobCount; ++iLoopCount)
            {
                BlobResult = BlobResults.GetBlobByID(iLoopCount);

                InspResults.BlobArea[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Area, iLoopCount);
                InspResults.Width[iLoopCount]           = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeWidth, iLoopCount);
                InspResults.Height[iLoopCount]          = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeHeight, iLoopCount);
                InspResults.BlobMinX[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinX, iLoopCount);
                InspResults.BlobMinY[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinY, iLoopCount);
                InspResults.BlobMaxX[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxX, iLoopCount);
                InspResults.BlobMaxY[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxY, iLoopCount);
                InspResults.BlobCenterX[iLoopCount]     = (InspResults.BlobMaxX[iLoopCount] + InspResults.BlobMinX[iLoopCount]) / 2;
                InspResults.BlobCenterY[iLoopCount]     = (InspResults.BlobMaxY[iLoopCount] + InspResults.BlobMinY[iLoopCount]) / 2;
                InspResults.BlobMessCenterX[iLoopCount] = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.CenterMassX, iLoopCount);
                InspResults.BlobMessCenterY[iLoopCount] = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.CenterMassY, iLoopCount);

                if (_IsGraphicResult)
                {
                    InspResults.ResultGraphic[iLoopCount] = BlobResult.CreateResultGraphics(CogBlobResultGraphicConstants.Boundary);
                }
            }

            return(_Result);
        }
Esempio n. 3
0
        public double GetWidthResult(CogBlobResults _BlobResults)
        {
            double _Width   = 0;
            double _MaxArea = 0;

            if (null == _BlobResults || _BlobResults.GetBlobs().Count <= 0)
            {
                return(_Width);
            }

            for (int iLoopCount = 0; iLoopCount < _BlobResults.GetBlobs().Count; ++iLoopCount)
            {
                if (_MaxArea < _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Area, iLoopCount))
                {
                    _MaxArea = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Area, iLoopCount);
                    _Width   = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeWidth, iLoopCount);
                }
            }

            return(_Width);
        }
Esempio n. 4
0
        private bool GetResult(bool _IsGraphicResult = false)
        {
            bool _Result = true;

            if (null == BlobResult || BlobResults.GetBlobs().Count < 0)
            {
                return(false);
            }
            InspResults.IsGood          = true;
            InspResults.BlobCount       = BlobResults.GetBlobs().Count;
            InspResults.BlobArea        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobCenterX     = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobCenterY     = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMinX        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMinY        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMaxX        = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMaxY        = new double[BlobResults.GetBlobs().Count];
            InspResults.Width           = new double[BlobResults.GetBlobs().Count];
            InspResults.Height          = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMessCenterX = new double[BlobResults.GetBlobs().Count];
            InspResults.BlobMessCenterY = new double[BlobResults.GetBlobs().Count];
            InspResults.PrincipalWidth  = new double[BlobResults.GetBlobs().Count];
            InspResults.PrincipalHeight = new double[BlobResults.GetBlobs().Count];
            InspResults.Angle           = new double[BlobResults.GetBlobs().Count];
            InspResults.Degree          = new double[BlobResults.GetBlobs().Count];

            InspResults.IsLeadBentGood   = new bool[BlobResults.GetBlobs().Count];
            InspResults.LeadPitchTopX    = new double[BlobResults.GetBlobs().Count];
            InspResults.LeadPitchTopY    = new double[BlobResults.GetBlobs().Count];
            InspResults.LeadPitchBottomX = new double[BlobResults.GetBlobs().Count];
            InspResults.LeadPitchBottomY = new double[BlobResults.GetBlobs().Count];

            InspResults.LeadLength       = new double[BlobResults.GetBlobs().Count];
            InspResults.LeadLengthStartX = new double[BlobResults.GetBlobs().Count];
            InspResults.LeadLengthStartY = new double[BlobResults.GetBlobs().Count];

            if (_IsGraphicResult)
            {
                InspResults.ResultGraphic = new CogCompositeShape[InspResults.BlobCount];
            }

            for (int iLoopCount = 0; iLoopCount < InspResults.BlobCount; ++iLoopCount)
            {
                BlobResult = BlobResults.GetBlobByID(iLoopCount);

                InspResults.BlobArea[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Area, iLoopCount);
                InspResults.Width[iLoopCount]           = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeWidth, iLoopCount);
                InspResults.Height[iLoopCount]          = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeHeight, iLoopCount);
                InspResults.BlobMinX[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinX, iLoopCount);
                InspResults.BlobMinY[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinY, iLoopCount);
                InspResults.BlobMaxX[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxX, iLoopCount);
                InspResults.BlobMaxY[iLoopCount]        = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxY, iLoopCount);
                InspResults.BlobCenterX[iLoopCount]     = (InspResults.BlobMaxX[iLoopCount] + InspResults.BlobMinX[iLoopCount]) / 2;
                InspResults.BlobCenterY[iLoopCount]     = (InspResults.BlobMaxY[iLoopCount] + InspResults.BlobMinY[iLoopCount]) / 2;
                InspResults.BlobMessCenterX[iLoopCount] = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.CenterMassX, iLoopCount);
                InspResults.BlobMessCenterY[iLoopCount] = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.CenterMassY, iLoopCount);
                InspResults.PrincipalWidth[iLoopCount]  = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPrincipalAxisWidth, iLoopCount);
                InspResults.PrincipalHeight[iLoopCount] = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPrincipalAxisHeight, iLoopCount);
                InspResults.Angle[iLoopCount]           = BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Angle, iLoopCount);
                InspResults.Degree[iLoopCount]          = InspResults.Angle[iLoopCount] * 180 / Math.PI;
                if (_IsGraphicResult)
                {
                    InspResults.ResultGraphic[iLoopCount] = BlobResult.CreateResultGraphics(CogBlobResultGraphicConstants.Boundary);
                }
            }

            return(_Result);
        }
Esempio n. 5
0
        public List <LeadFormAlignResultData> GetAlignResult(CogBlobResults _BlobResults)//, int _LeadCount)
        {
            List <LeadFormAlignResultData> _AlignResultDataList = new List <LeadFormAlignResultData>();

            if (null == _BlobResults || _BlobResults.GetBlobs().Count <= 0)
            {
                return(_AlignResultDataList);
            }

            for (int iLoopCount = 0; iLoopCount < _BlobResults.GetBlobs().Count; ++iLoopCount)
            {
                double _BlobMinX = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinX, iLoopCount);
                double _BlobMaxX = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxX, iLoopCount);
                double _BlobMinY = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMinY, iLoopCount);
                double _BlobMaxY = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeMaxY, iLoopCount);
                double _Width    = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeWidth, iLoopCount);
                double _Height   = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.BoundingBoxPixelAlignedNoExcludeHeight, iLoopCount);

                //사이즈가 너무 큰 경우 걸러내기
                if ((_Width < 65 && _Height < 65) && (_Width > 35 && _Height > 35))
                {
                    LeadFormAlignResultData _AlignResultDataTemp = new LeadFormAlignResultData();
                    _AlignResultDataTemp.Area    = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Area, iLoopCount);
                    _AlignResultDataTemp.Width   = _Width;
                    _AlignResultDataTemp.Height  = _Height;
                    _AlignResultDataTemp.Angle   = _BlobResults.GetBlobMeasure(CogBlobMeasureConstants.Angle, iLoopCount);
                    _AlignResultDataTemp.CenterX = (_BlobMaxX + _BlobMinX) / 2;
                    _AlignResultDataTemp.CenterY = (_BlobMaxY + _BlobMinY) / 2;

                    _AlignResultDataList.Add(_AlignResultDataTemp);
                }
            }

            //Y축 정렬
            _AlignResultDataList.Sort(delegate(LeadFormAlignResultData _A, LeadFormAlignResultData _B)
            {
                if (_A.CenterY > _B.CenterY)
                {
                    return(1);
                }
                else if (_A.CenterY < _B.CenterY)
                {
                    return(-1);
                }
                return(0);
            });

            //Y축 정렬 후 Lead 갯수까지만 자르기
            //if (_AlignResultDataList.Count > _LeadCount)
            //{
            //    for (int iLoopCount = _AlignResultDataList.Count - 1; iLoopCount > _LeadCount - 1; --iLoopCount)
            //        _AlignResultDataList.RemoveAt(iLoopCount);
            //}

            //X축으로 재 정렬
            _AlignResultDataList.Sort(delegate(LeadFormAlignResultData _A, LeadFormAlignResultData _B)
            {
                if (_A.CenterX > _B.CenterX)
                {
                    return(1);
                }
                else if (_A.CenterX < _B.CenterX)
                {
                    return(-1);
                }
                return(0);
            });

            return(_AlignResultDataList);
        }