/// <summary>
        ///
        /// </summary>
        /// <param name="originalImage"></param>
        /// <param name="maskImage"></param>
        /// <param name="edgeFindData"></param>
        /// <returns></returns>
        public override bool Execute(List <NamedData> data, ref IWaferEdgeFindData edgeFindData)
        {
            Image <Gray, byte>[] rawImages  = null;
            Image <Gray, byte>[] maskImages = null;


            if (!IsInitialized)
            {
                _logger.Error($"{this.GetType().Name} is not initialized.");
                return(false);
            }

            rawImages = GetEmguByteImages("RawImages", data);
            int imageCounterRaw = rawImages?.Length ?? 0;

            maskImages = GetEmguByteImages("MaskImages", data);
            int imageCounterMask = maskImages?.Length ?? 0;

            if (imageCounterMask != imageCounterRaw)
            {
                _logger.Info($"{this.GetType()} input and mask image number is not the same!");
                return(false);
            }


            for (int m = 0; m < imageCounterRaw; m++)
            {
                if (!CheckInputData(rawImages[m], maskImages[m], _calcAreas))
                {
                    _logger.Info($"{this.GetType()} input and mask data is not proper!");
                    continue;
                }

                Point[] topPoints    = FindPoints(maskImages[m], _calcAreas[SearchOrientations.TopToBottom], SearchOrientations.TopToBottom);
                Point[] bottomPoints = FindPoints(maskImages[m], _calcAreas[SearchOrientations.BottomToTop], SearchOrientations.BottomToTop);
                Point[] leftPoints   = FindPoints(maskImages[m], _calcAreas[SearchOrientations.LeftToRight], SearchOrientations.LeftToRight);
                Point[] rightPoints  = FindPoints(maskImages[m], _calcAreas[SearchOrientations.RightToLeft], SearchOrientations.RightToLeft);

                if (topPoints?.Length < 1 || bottomPoints?.Length < 1 || leftPoints?.Length < 1 || rightPoints?.Length < 1)
                {
                    _logger?.Trace("The found edge segments are not proper in EdgeLineFinder_CSharp1");
                    return(false);
                }

                //WaferEdgeFindData result = new WaferEdgeFindData
                //{
                //    TopSide = new VectorOfPoint(topPoints),
                //    BottomSide = new VectorOfPoint(bottomPoints),
                //    LeftSide = new VectorOfPoint(leftPoints),
                //    RightSide = new VectorOfPoint(rightPoints)
                //};

                //edgeFindData = result;
            }

            return(true);
        }
Exemplo n.º 2
0
 protected override OutputArray FitEdge(IWaferEdgeFindData edgepoints)
 {
     throw new NotImplementedException();
 }
 protected abstract OutputArray FitEdge(IWaferEdgeFindData edgepoints);
 public bool Execute(IWaferEdgeFindData edgeFindData, ref IWaferFittingData edgeFitData)
 {
     return(true);
 }
Exemplo n.º 5
0
        public override bool Execute(List <NamedData> data, ref IWaferEdgeFindData edgeFindData)
        {
            Image <Gray, byte>[] rawImages  = null;
            Image <Gray, byte>[] maskImages = null;

            try
            {
                if (!IsInitialized)
                {
                    _logger.Error($"{this.GetType().Name} is not initialized.");
                    return(false);
                }

                rawImages = GetEmguByteImages("RawImages", data);
                int imageCounterRaw = rawImages?.Length ?? 0;

                maskImages = GetEmguByteImages("MaskImages", data);
                int imageCounterMask = maskImages?.Length ?? 0;

                if (imageCounterMask != imageCounterRaw)
                {
                    _logger.Info($"{this.GetType()} input and mask image number is not the same!");
                    return(false);
                }


                for (int m = 0; m < imageCounterRaw; m++)
                {
                    if (!CheckInputData(rawImages[m], maskImages[m], _calcAreas))
                    {
                        _logger.Info($"{this.GetType()} input and mask data is not proper!");
                        continue;
                    }

                    WaferEdgeFit leftLineData;
                    WaferEdgeFit rightLineData;
                    WaferEdgeFit topLineData;
                    WaferEdgeFit bottomLineData;

                    LineSpreadFunction(rawImages[m], out leftLineData, out rightLineData, out topLineData, out bottomLineData);

                    edgeFindData = new WaferEdgeFindData
                    {
                        TopLineSpread    = topLineData.LineSpread,
                        LeftLineSpread   = leftLineData.LineSpread,
                        BottomLineSpread = bottomLineData.LineSpread,
                        RightLineSpread  = rightLineData.LineSpread,

                        TopSide    = topLineData.FitParams,
                        LeftSide   = leftLineData.FitParams,
                        BottomSide = bottomLineData.FitParams,
                        RightSide  = rightLineData.FitParams
                    };
                }

                return(true);
            }
            catch (Exception ex)
            {
                _logger?.Error($"Exception occured during CalculateColumnDataEmgu1 - Run: {ex}");
                return(false);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override bool Execute()
        {
            if (!IsInitialized)
            {
                _logger?.Error($"{this.GetType().Name} Run is not initialized yet.");
                return(false);
            }

            _logger?.Info($"{this.GetType().Name} Run started.");

            while (!_dirReader.IsEndOfDirectory())
            {
                _watch1.Restart();

                string name = string.Empty;
                _dirReader.GetNextImage(_dynamicResult, ref name);

                LogElapsedTime(_watch1, $"Image reading: {Path.GetFileName(name)}");

                _preProc.Execute(_dynamicResult, name);
                //_preProc.Run(_dynamicResult, name);

                LogElapsedTime(_watch1, $"Image pre-processing: {Path.GetFileName(name)}");

                _borderSearcher.Execute(_dynamicResult, name);
                //_borderSearcher.Run(_images[1], _masks[1], ref _borderPoints2, name);

                LogElapsedTime(_watch1, $"Border search: {Path.GetFileName(name)}");


                _columnDataCalculator.Execute(_dynamicResult, string.Empty);

                LogElapsedTime(_watch1, $"Column data, statistical calculation: {Path.GetFileName(name)}");

                IColumnMeasurementResult result1 = new ColumnMeasurementResult {
                    Name = "img1", ColumnMeanVector = _meanVector1, ColumnStdVector = _stdVector1
                };
                IColumnMeasurementResult result2 = new ColumnMeasurementResult {
                    Name = "img2", ColumnMeanVector = _meanVector2, ColumnStdVector = _stdVector2
                };

                _saver.SaveResult(result1, name, "");
                _saver.SaveResult(result2, name, "");

                LogElapsedTime(_watch1, $"Result saving: {Path.GetFileName(name)}");

                IWaferEdgeFindData waferEdgeFindData1 = null;
                IWaferEdgeFindData waferEdgeFindData2 = null;

                _edgeFinder.Execute(_dynamicResult, ref waferEdgeFindData1);
                //_edgeFinder.Run(_images[1], _masks[1], ref waferEdgeFindData2);

                LogElapsedTime(_watch1, "Edge finder");

                IWaferFittingData waferEdgeFittingData1 = null;
                IWaferFittingData waferEdgeFittingData2 = null;

                _edgeFitter.Execute(waferEdgeFindData1, ref waferEdgeFittingData1);
                _edgeFitter.Execute(waferEdgeFindData2, ref waferEdgeFittingData2);

                LogElapsedTime(_watch1, "Edge fitter");

                Console.WriteLine();
            }

            _logger?.Info($"{this.GetType().Name} Run ended.");

            return(true);
        }
Exemplo n.º 7
0
 public abstract bool Execute(List <NamedData> data, ref IWaferEdgeFindData edgeFindData);
Exemplo n.º 8
0
        public override bool Execute()
        {
            if (!IsInitialized)
            {
                _logger?.Error($"{this.GetType().Name} Execute is not initialized yet.");
                return(false);
            }

            _logger?.Info($"{this.GetType().Name} Execute started.");

            while (!_dirReader.IsEndOfDirectory())
            {
                _watch1.Restart();
                _dynamicResult = new List <NamedData>();

                string name = string.Empty;
                _dirReader.GetNextImage(_dynamicResult, ref name);

                string path = Path.Combine(_saver1.OutputFolder, Path.GetFileName(name) ?? string.Empty);

                LogElapsedTime(_watch1, $"Image reading: {name}");

                _preProc.Execute(_dynamicResult, path);

                LogElapsedTime(_watch1, $"Image pre-processing: {name}");

                _borderSearcher.Execute(_dynamicResult, path);

                LogElapsedTime(_watch1, $"Border search: {Path.GetFileName(name)}");

                _columnDataCalculator1.Execute(_dynamicResult, path);

                LogElapsedTime(_watch1, $"Column data, statistical calculation 1: {Path.GetFileName(name)}");

                _columnDataCalculator2.Execute(_dynamicResult, path);

                LogElapsedTime(_watch1, $"Column data, statistical calculation 2: {Path.GetFileName(name)}");

                bool result = (_saver1 as INamedDataResultSaver).SaveResult(_dynamicResult, name, "Result");



                //IColumnMeasurementResult result2 = new ColumnMeasurementResult
                //{
                //    Name = name,
                //    ColumnMeanVector = _meanVector1,
                //    ColumnStdVector = _stdVector1
                //};
                //_saver2.SaveResult(result2 as IMeasurementResult, name, "MeanAndStd");

                //IColumnMeasurementResult result3 = new ColumnMeasurementResult
                //{
                //    Name = name,
                //    ColumnMeanVector = _meanVector1,
                //    ColumnStdVector = _stdVector1
                //};


                //_saver2.SaveResult(result3 as IMeasurementResult, name, "Noise");


                IWaferEdgeFindData waferEdgeFindData1 = null;

                //_edgeFinder.Run(_dynamicResult, ref waferEdgeFindData1);
                //result1.LeftLineSpread = waferEdgeFindData1.LeftLineSpread;
                //result1.RightLineSpread = waferEdgeFindData1.RightLineSpread;
                //result1.TopLineSpread = waferEdgeFindData1.TopLineSpread;
                //result1.BottomLineSpread = waferEdgeFindData1.BottomLineSpread;

                LogElapsedTime(_watch1, "Edge finder");

                //_saver1.SaveResult(result1 as IMeasurementResult, name, "");

                LogElapsedTime(_watch1, $"Result saving: {Path.GetFileName(name)}");
            }

            _logger?.Info($"{this.GetType().Name} Run ended.");

            return(true);
        }