예제 #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 <int>(InputImage.Width, InputImage.Height);
            //filtro Delta X
            ConvoluzioneByteInt dX = new ConvoluzioneByteInt();

            dX.Filter       = new ConvolutionFilter <int>(3, 3);
            dX.Filter[0, 0] = 1;
            dX.Filter[1, 0] = 1;
            dX.Filter[2, 0] = 1;
            dX.Filter[0, 1] = 0;
            dX.Filter[1, 1] = 0;
            dX.Filter[2, 1] = 0;
            dX.Filter[0, 2] = -1;
            dX.Filter[1, 2] = -1;
            dX.Filter[2, 2] = -1;
            //Filtro Delta Y
            ConvoluzioneByteInt dY = new ConvoluzioneByteInt();

            dY.Filter       = new ConvolutionFilter <int>(3, 3);
            dY.Filter[0, 0] = 1;
            dY.Filter[0, 1] = 1;
            dY.Filter[0, 2] = 1;
            dY.Filter[1, 0] = 0;
            dY.Filter[1, 1] = 0;
            dY.Filter[1, 2] = 0;
            dY.Filter[2, 0] = -1;
            dY.Filter[2, 1] = -1;
            dY.Filter[2, 2] = -1;
            dX.InputImage   = InputImage;
            dY.InputImage   = InputImage;
            dX.Execute();
            dY.Execute();

            /*
             * X = dX.Result.Clone();
             * Y = dY.Result.Clone();
             */
            AlgorithmIntermediateResultEventArgs x1 = new AlgorithmIntermediateResultEventArgs(dX.Result, "Delta X");
            AlgorithmIntermediateResultEventArgs y1 = new AlgorithmIntermediateResultEventArgs(dY.Result, "Delta Y");

            OnIntermediateResult(x1);
            OnIntermediateResult(y1);
            //calcola modulo gradiente per ogni pixel
            for (int i = 0; i < InputImage.PixelCount; i++)
            {
                Result[i] = (int)Math.Sqrt(dX.Result[i] * dX.Result[i] + dY.Result[i] * dY.Result[i]);
            }
        }
예제 #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;
        }