Exemplo n.º 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();
            }
        }
Exemplo n.º 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();
        }