Exemplo n.º 1
0
        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));
        }
Exemplo n.º 3
0
        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");
                }
            }
        }