public override Bitmap processImage(Bitmap sourceImage, BackgroundWorker worker) { Bitmap resultImage = new Bitmap(sourceImage.Width, sourceImage.Height); Filters Err = new Erosion(st_elem); Bitmap resultE = Err.processImage(sourceImage, worker); Filters Dila = new Dilation(st_elem); Bitmap resultD = Dila.processImage(sourceImage, worker); for (int i = 0; i < sourceImage.Width; i++) { worker.ReportProgress((int)((float)i / resultImage.Width * 100)); //прерывание процесса if (worker.CancellationPending) { return(null); } for (int j = 0; j < sourceImage.Height; j++) { // изображение с расширением (-) изобржение с эрозией, выделяет границы всего, что есть на изображении // с учетом цвета, потому что при чб некоторые границы пропадают int newR = Clamp(resultD.GetPixel(i, j).R - resultE.GetPixel(i, j).R, 0, 255); int newG = Clamp(resultD.GetPixel(i, j).G - resultE.GetPixel(i, j).G, 0, 255); int newB = Clamp(resultD.GetPixel(i, j).B - resultE.GetPixel(i, j).B, 0, 255); resultImage.SetPixel(i, j, Color.FromArgb(newR, newG, newB)); } } return(resultImage); }
public override Bitmap processImage(Bitmap sourceImage, BackgroundWorker worker) { //сначала сужение, потом расширение Bitmap resultImage = new Bitmap(sourceImage.Width, sourceImage.Height); Filters Err = new Erosion(st_elem); Filters Dila = new Dilation(st_elem); Bitmap result = Err.processImage(sourceImage, worker); result = Dila.processImage(result, worker);//применили два фильтра return(result); }
private void dilationToolStripMenuItem_Click(object sender, EventArgs e) { Morphology dil = new Dilation(); backgroundWorker1.RunWorkerAsync(dil); }