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(); }
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]); } }
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; }