public static BitmapImage Init(Bitmap resultBmp, MeasureTime measure) { var stopwatch = Stopwatch.StartNew(); int[,] pixelArray = new int[resultBmp.Height, resultBmp.Width]; // one record on this array = one pixel pixelArray = LowPerformance.SetOneZero(resultBmp, pixelArray); deletion = 1; int deletionFirst, deletionSecond; while (deletion != 0) { deletion = 0; pixelArray = LowPerformance.SetOneTwoThree(resultBmp, pixelArray); (deletionFirst, pixelArray) = LowPerformance.FindAndDeleteFour(resultBmp, pixelArray); (deletionSecond, pixelArray) = LowPerformance.DeletingTwoThree(resultBmp, pixelArray); deletion = deletionFirst > deletionSecond ? deletionFirst : deletionSecond; } resultBmp = LowPerformance.SetImageAfterKMM(resultBmp, pixelArray); measure.SumTimeElapsedMs(stopwatch.ElapsedMilliseconds); return(BitmapConversion.Bitmap2BitmapImage(resultBmp)); }
public static BitmapImage LowPerformance(Bitmap tempBmp, Bitmap resultBmp, MeasureTime measure) { int threshold = OtsuValue(tempBmp); //calculate threshold by otsu value var stopwatch = Stopwatch.StartNew(); //start measure time int[] pixelValue = new int[tempBmp.Width + 1]; for (int y = 0; y < tempBmp.Height; y++) { for (int x = 0; x < tempBmp.Width; x++) { Color color = tempBmp.GetPixel(x, y); pixelValue[x] = (color.R + color.G + color.B) / 3; if (pixelValue[x] < threshold) { pixelValue[x] = 0; } else { pixelValue[x] = 255; } Color newColor = Color.FromArgb(pixelValue[x], pixelValue[x], pixelValue[x]); resultBmp.SetPixel(x, y, newColor); } } measure.TimeElapsedMs = stopwatch.ElapsedMilliseconds; return(BitmapConversion.Bitmap2BitmapImage(resultBmp)); }
private void Execute() { async Task InitializeLP() //initialize methods that use Get/Set Pixel { MeasureTime measureLP = new MeasureTime(); Bitmaps.BinarizeLPImage = BitmapConversion.CreateNonIndexedImage(new Bitmap(Bitmaps.Filepath)); Bitmaps.BinarizeLPImageView = await Task.Run(() => Binarization.LowPerformance(new Bitmap(Bitmaps.Filepath), Bitmaps.BinarizeLPImage, measureLP)); Bitmaps.KMMLP = await Task.Run(() => KMMLowPerformanceMain.Init(Bitmaps.BinarizeLPImage, measureLP)); Bitmaps.TimeElapsedLP = measureLP.TimeElapsedMs; } async Task InitializeHP() //initialize methods with lockbits, marshall copy { MeasureTime measureHP = new MeasureTime(); Bitmaps.BinarizeHPImage = await Task.Run(() => Binarization.HighPerformance(new Bitmap(Bitmaps.Filepath), measureHP)); Bitmaps.BinarizeHPImageView = BitmapConversion.Bitmap2BitmapImage(Bitmaps.BinarizeHPImage); Bitmaps.KMMHP = await Task.Run(() => BitmapConversion.Bitmap2BitmapImage(KMMHighPerformanceMain.Init(Bitmaps.BinarizeHPImage, measureHP))); Bitmaps.TimeElapsedHP = measureHP.TimeElapsedMs; Bitmaps.TimeElapsedHPTicks = measureHP.TimeElapsedTicks; } try { var task1 = Task.Run(() => InitializeLP()); var task2 = Task.Run(() => InitializeHP()); Task.WaitAll(task1, task2); } catch (Exception ex) { if (ex is ArgumentNullException || ex is AggregateException) { System.Windows.MessageBox.Show("There is no image to Apply KMM"); } } }