示例#1
0
        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);
        }
示例#2
0
        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);
        }