Example #1
0
        public void SaveModule(string projectDirectory, string nodeName)
        {
            string imageFilePath;
            string configFile;

            imageFilePath = projectDirectory + @"\TileImage-" + nodeName + @".bmp";
            if (SingleImage != null)
            {
                Bitmap image = ImageOperateTools.ImageCopy(SingleImage);
                image.Save(imageFilePath, image.RawFormat);
                image.Dispose();
            }

            configFile = projectDirectory + @"\TileImage-" + nodeName + ".xml";
            XmlParameter xmlParameter = new XmlParameter();

            #region IDisplay

            xmlParameter.Add("DisplayWindowName", DisplayWindowName);
            xmlParameter.Add("IsDisplay", IsDisplay);

            #endregion

            xmlParameter.Add("SizeOfText", SizeOfText);

            xmlParameter.WriteParameter(configFile);

            return;
        }
        public void GetDefectCell(string productName, string batchName, string boardName, string sideName, string shotName, string defectName, out DefectCell defectCell)
        {
            defectCell = new DefectCell();
            string defectPath = _dataDir + "\\" + productName + "\\" + batchName + "\\" +
                                boardName + "\\" + sideName + "\\" + shotName;
            MachVisionFile machVisionFile = new MachVisionFile(defectPath, shotName);

            defectName = Regex.Replace(defectName, @"(.bmp)$", "");
            machVisionFile.ReadRoiInTemplate(defectName, out var roi);
            machVisionFile.ReadDefectInfos(defectName, out var defectInfos);
            defectCell.RoiInTemplate = roi;
            defectCell.DefectInfos   = defectInfos;
            string imageFile = defectPath + "\\" + defectName + ".bmp";

            if (!File.Exists(imageFile))
            {
                return;
            }
            defectCell.DefectImage = ImageOperateTools.GetImageFromFile(imageFile);

            Bitmap templateImage;

            if (TryGetTemplateImg(sideName, shotName, roi, out templateImage))
            {
                defectCell.TemplateImage = templateImage;
            }
            else
            {
                defectCell.TemplateImage = null;
            }
        }
Example #3
0
        public void InitModule(string projectDirectory, string nodeName)
        {
            string       imageFilePath;
            string       configFile;
            string       strParamInfo = "";
            XmlParameter xmlParameter = null;

            imageFilePath = projectDirectory + @"\TileImage-" + nodeName + @".bmp";
            if (File.Exists(imageFilePath))
            {
                var image = new Bitmap(imageFilePath, true);
                SingleImage = ImageOperateTools.ImageCopy(image);
                image.Dispose();
            }
            else
            {
                SingleImage = new Bitmap(500, 100);
            }

            configFile = projectDirectory + @"\TileImage-" + nodeName + ".xml";
            if (File.Exists(configFile))
            {
                xmlParameter = new XmlParameter();
                xmlParameter.ReadParameter(configFile);

                #region IDisplay

                strParamInfo = xmlParameter.GetParamData("DisplayWindowName");
                if (strParamInfo != "")
                {
                    DisplayWindowName = strParamInfo;
                }
                strParamInfo = xmlParameter.GetParamData("IsDisplay");
                if (strParamInfo != "")
                {
                    IsDisplay = Convert.ToBoolean(strParamInfo);
                }

                #endregion

                strParamInfo = xmlParameter.GetParamData("SizeOfText");
                if (strParamInfo != "")
                {
                    SizeOfText = Convert.ToInt32(strParamInfo);
                }
            }

            return;
        }
        private bool TryGetTemplateImg(string sideName, string shotName, Rectangle roi, out Bitmap templateBitmap)
        {
            if (_templateBitmapDirectory.ContainsKey(sideName + shotName))
            {
                Bitmap bitmap = _templateBitmapDirectory[sideName + shotName];
                if (ImageOperateTools.BitmapCropImage(bitmap, roi, out templateBitmap))
                {
                    return(true);
                }
            }
            else
            {
                templateBitmap = null;
            }

            return(false);
        }
        private bool GetTemplateBitmap(string sideName, string shotName, out Bitmap templateBitmap)
        {
            templateBitmap = null;
            try
            {
                string filePath = _modelDir + "\\" + sideName + "\\" + shotName + ".jpg";
                if (!File.Exists(filePath))
                {
                    return(false);
                }
                templateBitmap = ImageOperateTools.GetImageFromFile(filePath);
            }
            catch (Exception ex)
            {
                templateBitmap = null;
                MessageBox.Show(ex.Message);

                return(false);
            }

            return(true);
        }
Example #6
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;
        }
Example #7
0
        public void Run()
        {
            //throw new NotImplementedException();
            //WholeImage = null;
            //_originImages = new List<Bitmap>();

            //MessageManager.Instance().Info("++++++TileImage.Run(): begin.");
            //lock (Task.TaskPool.PadLock)
            //{
            //    if (null != _device && null != _device.OriginImages && 0 < _device.OriginImages.Count)
            //    {
            //        foreach (var temp in _device.OriginImages)
            //        {
            //            _originImages.Add(_device.OriginImages.Dequeue());
            //        }
            //    }
            //}
            //TileSingleImages();
            //GetSingleRois();
            //MessageManager.Instance().Info("++++++TileImage.Run(): end.");

            //
            if (null == SingleImage)
            {
                MessageManager.Instance().Warn("TileImage.Run: lack of single image.");

                return;
            }
            if (_device.TotalSize != CurrTotalSize)
            {
                WholeImage    = null;
                CurrTotalSize = _device.TotalSize;
                SingleImages  = new List <Bitmap>();
            }
            if (null == SingleImages || 0 >= SingleImages.Count)
            {
                SingleImages = new List <Bitmap>();
                for (int index = 0; index < CurrTotalSize; ++index)
                {
                    SingleImages.Add(SingleImage);
                }
            }

            if (null == WholeImage)
            {
                TileSingleImages(SingleImages, out var wholeImage);
                if (null == wholeImage)
                {
                    MessageManager.Instance().Alarm("TileImage.Run: error in TileSingleImages.");

                    return;
                }
                WholeImage = ImageOperateTools.ImageCopy(wholeImage);
            }

            //
            DisplayBitmap = null;
            DisplayShapes = new List <AqShap>();
            if (IsDisplay)
            {
                DisplayBitmap = WholeImage;
                GenerateResultDisplay(SingleImage.Height, out var contours);
                //DisplayContour.GetContours(_singleRois.XldPointYs, _singleRois.XldPointXs, _singleRois.XldPointsNums, out var contours, AqVision.Graphic.AqColorEnum.Yellow, 1);
                DisplayShapes = contours;
                IsUpdate      = true;
            }
            else
            {
                IsUpdate = false;
            }

            return;
        }