/// <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); }
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); }
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); } }
/// <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); }
public abstract bool Execute(List <NamedData> data, ref IWaferEdgeFindData edgeFindData);
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); }