public override void Run() { Result = new Image <byte>(InputImage.Width, InputImage.Height); //costruisce l'array degli offset dell'elemento strutturante riflesso int[] elementOffsets = MorphologyStructuringElement.CreateOffsets(StructuringElement, InputImage, true); //crea un cursore per scorrerel'immagine escludendo i pixel di bordo var pixelCursor = new ImageCursor(StructuringElement.Width / 2, StructuringElement.Height / 2, InputImage.Width - 1 - StructuringElement.Width / 2, InputImage.Height - 1 - StructuringElement.Height / 2, InputImage); //a differenza della dilatazione controllo se c'è almeno un pixel di background, //se è così il pixel nn fa parte dell'output bool da_canc = false; do { foreach (int offset in elementOffsets) { if (InputImage[pixelCursor + offset] != Foreground) { //un pixel di background trovato da_canc = true; break; } } if (!da_canc) { Result[pixelCursor] = Foreground; } da_canc = false; }while (pixelCursor.MoveNext()); }
public override void Run() { Result = new Image <byte>(InputImage.Width, InputImage.Height); //costruisce l'array degli offset dell'elemento strutturante riflesso int[] elementOffsets = MorphologyStructuringElement.CreateOffsets(StructuringElement, InputImage, true); //crea un cursore per scorrerel'immagine escludendo i pixel di bordo var pixelCursor = new ImageCursor(StructuringElement.Width / 2, StructuringElement.Height / 2, InputImage.Width - 1 - StructuringElement.Width / 2, InputImage.Height - 1 - StructuringElement.Height / 2, InputImage); do { foreach (int offset in elementOffsets) { if (InputImage[pixelCursor + offset] == Foreground) { Result[pixelCursor] = Foreground; break; } } }while(pixelCursor.MoveNext()); }