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); }
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); }
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); }
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); }