Example #1
0
        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();
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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;
            }
        }