示例#1
0
        public override void Run()
        {
            Result = new Image <byte>(InputImage.Width, InputImage.Height);
            //calcolo denominatore = numero elementi matrice quadrata filtro
            int denominator = Size * Size;
            //usa la classe di prima impostando il filtro con tutti 1 (smoothing, elimina il rumore)
            ConvoluzioneByteInt performer = new ConvoluzioneByteInt();

            //crea il filtro con la dimensione e il denominatore (nel caso dello sharpening è = 1 la dimensione)
            performer.Filter = new ConvolutionFilter <int>(Size, 1);
            //assegno valori al filtro
            for (int i = 0; i < denominator; i++)
            {
                performer.Filter[i] = -1;
            }
            //il valore centrale del filtro è la dimensione - 1 (es size = 3, valore centrale = 8)
            performer.Filter[(denominator + 1) / 2] = denominator - 1;
            //se non si fa la result da nullReferenceException
            performer.InputImage = InputImage.Clone();
            performer.Execute();
            //formula dello sharpening = img_originale + k * img_connvoluzione
            //k è un parametro
            for (int i = 0; i < InputImage.PixelCount; i++)
            {
                Result[i] = ((int)(InputImage[i] + K * performer.Result[i])).ClipToByte();
            }
            //immagine intermedia
            Intermedia = performer.Result.Clone();
        }
示例#2
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();
            }
        }
示例#3
0
        public override void Run()
        {
            //calcolo denominatore = numero elementi matrice quadrata filtro
            denominator = Size * Size;
            //usa la classe di prima impostando il filtro con tutti 1 (smoothing, elimina il rumore)
            ConvoluzioneByteInt performer = new ConvoluzioneByteInt();

            //crea il filtro con la dimensione e il denominatore
            performer.Filter = new ConvolutionFilter <int>(Size, denominator);
            //assegno valori al filtro
            for (int i = 0; i < denominator; i++)
            {
                performer.Filter[i] = 1;
            }
            //se non si fa la result da nullReferenceException
            performer.InputImage = InputImage.Clone();
            performer.Execute();
            Result = performer.Result;
        }