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