コード例 #1
0
        public bool SetByDefectCell(DefectCell defectCell, int regionIndex, EMarkDataType markType)
        {
            if (defectCell == null ||
                defectCell.DefectRegions == null ||
                regionIndex < 0 ||
                regionIndex >= defectCell.DefectRegions.Count ||
                defectCell.DefectRegions[regionIndex] == null ||
                defectCell.DefectRegions[regionIndex].DefectInfoIndexList == null ||
                defectCell.DefectRegions[regionIndex].DefectInfoIndexList.Count <= 0 ||
                defectCell.DefectInfos == null ||
                defectCell.DefectInfos.Count <= 0)
            {
                return(false);
            }

            SingleDefectRegion defectRegion = defectCell.DefectRegions[regionIndex];

            MarkRegionType = markType;
            SmallestRect   = new Rectangle(defectRegion.SmallestRect.X, defectRegion.SmallestRect.Y,
                                           defectRegion.SmallestRect.Width, defectRegion.SmallestRect.Height);
            DefectInfos = new Dictionary <int, DefectInfo>();
            foreach (var index in defectRegion.DefectInfoIndexList)
            {
                if (index < 0 || index >= defectCell.DefectInfos.Count)
                {
                    return(false);
                }
                DefectInfo defectInfo = new DefectInfo();
                defectInfo.CodeNum = defectCell.DefectInfos[index].CodeNum;
                Rectangle rect = defectCell.DefectInfos[index].DefectRect;
                defectInfo.DefectRect = new Rectangle(rect.X, rect.Y, rect.Width, rect.Height);
                if (DefectInfos.ContainsKey(index))
                {
                    return(false);
                }
                else
                {
                    DefectInfos.Add(index, defectInfo);
                }
            }

            return(true);
        }
コード例 #2
0
        public static void GenDefectRegions(Bitmap bitmap, List <Rectangle> rectangles, double radiusOfDilation, out List <SingleDefectRegion> defectRegions)
        {
            defectRegions = new List <SingleDefectRegion>();
            HObject ho_image;
            HObject ho_ConnectedDilations;

            HTuple hv_Row1OfRectangles       = new HTuple();
            HTuple hv_Row2OfRectangles       = new HTuple();
            HTuple hv_Column1OfRectangles    = new HTuple();
            HTuple hv_Column2OfRectangles    = new HTuple();
            HTuple hv_RadiusOfDilation       = new HTuple();
            HTuple hv_IndexOfRectangles      = new HTuple();
            HTuple hv_NumberListOfRectangles = new HTuple();

            // initialation
            HOperatorSet.GenEmptyObj(out ho_image);
            ho_image.Dispose();
            ImageOperateTools.Bitmap8HObjectBpp8(bitmap, out ho_image);
            for (int i = 0; i < rectangles.Count; i++)
            {
                var rectangle = rectangles[i];
                hv_Row1OfRectangles.Append(new HTuple(rectangle.Top));
                hv_Row2OfRectangles.Append(new HTuple(rectangle.Bottom));
                hv_Column1OfRectangles.Append(new HTuple(rectangle.Left));
                hv_Column2OfRectangles.Append(new HTuple(rectangle.Right));
            }
            hv_RadiusOfDilation = radiusOfDilation;
            dilate_regions_pro(ho_image, out ho_ConnectedDilations, hv_Row1OfRectangles, hv_Row2OfRectangles, hv_Column1OfRectangles, hv_Column2OfRectangles, hv_RadiusOfDilation, out hv_IndexOfRectangles, out hv_NumberListOfRectangles);
            List <int> defectInfoIndexList  = new List <int>();
            List <int> defectInfoNumberList = new List <int>();

            if (hv_IndexOfRectangles.TupleLength() > 0 && hv_NumberListOfRectangles.TupleLength() > 0)
            {
                defectInfoIndexList.AddRange(hv_IndexOfRectangles.ToIArr());
                defectInfoNumberList.AddRange(hv_NumberListOfRectangles.ToIArr());
            }
            else
            {
                return;
            }

            HOperatorSet.CountObj(ho_ConnectedDilations, out var hv_NumberOfDilations);
            for (var index = 1; index <= hv_NumberOfDilations; ++index)
            {
                SingleDefectRegion defectRegion = new SingleDefectRegion();
                HOperatorSet.SelectObj(ho_ConnectedDilations, out var ho_Dilation, index);

                // DefectRegion.DefectInfoIndexList
                for (var cnt = 0; cnt < defectInfoNumberList[index - 1]; ++cnt)
                {
                    defectRegion.DefectInfoIndexList.Add(defectInfoIndexList[0]);
                    defectInfoIndexList.RemoveAt(0);
                }

                // DefectRegion.Xldxxx
                convert_single_region_to_points(ho_Dilation, out var hv_posYs, out var hv_posXs, out var hv_pointsNum);
                if (hv_posYs.TupleLength() > 0)
                {
                    defectRegion.XldYs.AddRange(hv_posYs.ToDArr());
                }
                if (hv_posXs.TupleLength() > 0)
                {
                    defectRegion.XldXs.AddRange(hv_posXs.ToDArr());
                }
                if (hv_pointsNum.TupleLength() > 0)
                {
                    defectRegion.XldPointCount.AddRange(hv_pointsNum.ToIArr());
                }

                // DefectRegion.SmallestRect
                HOperatorSet.SmallestRectangle1(ho_Dilation, out var hv_Row1, out var hv_Column1, out var hv_Row2, out var hv_Column2);
                defectRegion.SmallestRect = Rectangle.FromLTRB(hv_Column1.I, hv_Row1.I, hv_Column2.I, hv_Row2.I);

                defectRegions.Add(defectRegion);
            }

            return;
        }