public HImage Process(HImage image) { var domain = image.GetDomain(); var domainWidth = domain.GetWidth(); var domainHeight = domain.GetHeight(); var maskWidth = MaskWidth == 0 ? domainWidth : MaskWidth; var maskHeight = MaskHeight == 0 ? domainHeight : MaskHeight; HImage enhancedImage = image.Emphasize(maskWidth, maskHeight, Factor); return(enhancedImage); }
private double FindPositionBottle(HImage Image, DataType.AlgoritmoControlloLivelloParam param, bool useIconic, ref ArrayList iconicList) { double columnCenter = 0; HMeasure MeasureHandle = null; HImage ImgEmfatize = null; try { double Rowstart, Rowend, Colstart, Colend; int Width, Height; Image.GetImageSize(out Width, out Height); Rowstart = 0.0; Rowend = Height; Colstart = Width / 2; Colend = Width / 2; if (useIconic) { iconicList.Add(new Utilities.ObjectToDisplay("Line", new HTuple(Rowstart, Colstart, Rowend, Colend), "red", 1)); } param.RectCentraggio.Column = Width / 2; if (useIconic) { // genero i due rettangoli per la misura dell'inclinazione bottiglia // solo per visualizzazione HRegion rectangleCentraggio = new HRegion(); rectangleCentraggio.GenRectangle2(param.RectCentraggio.Row, Width / 2, 0, param.RectCentraggio.Length1, param.RectCentraggio.Length2); iconicList.Add(new Utilities.ObjectToDisplay(rectangleCentraggio, "red", 1)); } // Determine all edge pairs that have a negative transition, i.e., edge pairs that enclose dark regions. const string Interpolation = "nearest_neighbor"; HTuple RowEdge_first, ColumnEdge_first, Amplitude_first, Distance_first; HTuple RowEdge_last, ColumnEdge_last, Amplitude_last, Distance_last; ImgEmfatize = Image.Emphasize(7, 7, param.EmphasizeFactorx10 / 10.0); // Misura degli edge sul primo rettangolo MeasureHandle = new HMeasure(param.RectCentraggio.Row, Width / 2, 0, param.RectCentraggio.Length1, param.RectCentraggio.Length2, Width, Height, Interpolation); MeasureHandle.MeasurePos(ImgEmfatize, param.Sigmax10 / 10.0, param.Thresholdx10 / 10.0, "all", "first", out RowEdge_first, out ColumnEdge_first, out Amplitude_first, out Distance_first); MeasureHandle.Dispose(); // Libera lo spazio associato a 'MeasureHandle' MeasureHandle = new HMeasure(param.RectCentraggio.Row, Width / 2, Math.PI, param.RectCentraggio.Length1, param.RectCentraggio.Length2, Width, Height, Interpolation); MeasureHandle.MeasurePos(ImgEmfatize, param.Sigmax10 / 10.0, param.Thresholdx10 / 10.0, "all", "first", out RowEdge_last, out ColumnEdge_last, out Amplitude_last, out Distance_last); MeasureHandle.Dispose(); // Libera lo spazio associato a 'MeasureHandle' if (RowEdge_first.Length == 1 && RowEdge_last.Length == 1 && ColumnEdge_first.Length == 1 && ColumnEdge_last.Length == 1) { columnCenter = (ColumnEdge_last.D + ColumnEdge_first.D) / 2; if (useIconic) { iconicList.Add(new Utilities.ObjectToDisplay("Cross", new HTuple(RowEdge_first.D, ColumnEdge_first.D, 15, Math.PI / 4), "magenta", 1)); iconicList.Add(new Utilities.ObjectToDisplay("Cross", new HTuple(RowEdge_last.D, ColumnEdge_last.D, 15, Math.PI / 4), "magenta", 1)); iconicList.Add(new Utilities.ObjectToDisplay("Cross", new HTuple(RowEdge_last.D, columnCenter, 15, Math.PI / 4), "green", 1)); } } else { columnCenter = Width / 2; } } catch (Exception) { columnCenter = 0; } finally { if (MeasureHandle != null) { MeasureHandle.Dispose(); } if (ImgEmfatize != null) { ImgEmfatize.Dispose(); } } return(columnCenter); }