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(); }
public override void Run() { Result = new RgbImage <byte>(InputImage.Width, InputImage.Height); // TODO: impostare l'immagine Result come negativo dell'immagine InputImage //uso la look up table giĆ fatta nella classe statica LookupTables, poi converto //l'immagine per avere il tipo RgbImage<byte> in output LookupTableTransform <RgbPixel <byte> > lt = new LookupTableTransform <RgbPixel <byte> >(InputImage, LookupTables.Spectrum); Image <RgbPixel <byte> > tmp = lt.Execute(); for (int i = 0; i < InputImage.PixelCount; i++) { Result.BlueChannel[i] = tmp[i].Blue; Result.RedChannel[i] = tmp[i].Red; Result.GreenChannel[i] = tmp[i].Green; } }