public override void Run() { Result = new Image <byte>(InputImage.Width, InputImage.Height); //calcolo istogramma HistogramBuilder hb = new HistogramBuilder(InputImage); Histogram h = hb.BuildHistogram(); //elimino la % scritta in StretchDiscardPerc di pixel in ogni bordo //contanto tutti i pixel dell'istogramma int da_eliminare = InputImage.PixelCount / 100 * stretchDiscardPerc; int min = 0; int max = 0; Find_MinMax(ref min, ref max, da_eliminare, h); //ho trovato max e min, adesso faccio contrast stretching considerando quei //valori di max e min int diff = max - min; if (diff > 0) { LookupTableTransform <byte> lut = new LookupTableTransform <byte>(InputImage, p => (255 * (p - min) / diff).ClipToByte()); Result = lut.Execute(); } else { Result = InputImage.Clone(); } }
public override void Run() { Result = new Image <byte>(InputImage.Width, InputImage.Height); //calcola l'istogramma HistogramBuilder hb = new HistogramBuilder(InputImage); Histogram h = hb.Execute(); //ricalcola ogni elemento dell'istogramma come somma dei precedenti for (int i = 1; i < 256; i++) { h[i] += h[i - 1]; } //definisce la funzione di mapping e applica la lut LookupTableTransform <byte> lut = new LookupTableTransform <byte>(InputImage, p => (byte)(255 * h[p] / InputImage.PixelCount)); Result = lut.Execute(); }