Ejemplo n.º 1
0
        public MainWindow()
        {
            InitializeComponent();
            ImageModificationsList = new List <ImageSource>();
            _originalImgBitmap     = new BitmapImage(new Uri(@"pack://application:,,,/"
                                                             + Assembly.GetExecutingAssembly().GetName().Name
                                                             + ";component/"
                                                             + "InitialImage/finger.png", UriKind.Absolute));
            var width  = _originalImgBitmap.PixelWidth.ToString();
            var height = _originalImgBitmap.PixelHeight.ToString();

            ResolutionStatusBar.Text = width + " x " + height;
            ModifiedImgSingleton     = ModifiedImage;

            ResolutionX.Text = width;
            ResolutionY.Text = height;
            SaveImage.X      = int.Parse(ResolutionX.Text);
            SaveImage.Y      = int.Parse(ResolutionY.Text);
            _originalMatrix  = (MatrixTransform)OriginalImage.RenderTransform;
            _modifiedMatrix  = (MatrixTransform)ModifiedImage.RenderTransform;

            originalBitmapSource = (BitmapSource)OriginalImage.Source;

            //calculate initial histogram values
            HistogramTools.CalculateHistograms();
        }
        private void PreviewImageUpdate()
        {
            try
            {
                //get lut for stretching - preview image
                var lut = HistogramTools.GetLutStretching(int.Parse(TextBoxMin.Text), int.Parse(TextBoxMax.Text));
                //set new image after histogram stretching
                PreviewImage.Source = HistogramTools.StretchHistogram(lut, _option);
                //recalculate histogram after stretching
                CalculateHistograms();
                //update polygon graphs for visual representation of histograms
                switch (_option)
                {
                case 0:
                    HistogramRed.Points = HistogramWindow.ConvertToPointCollection(HistogramR);
                    break;

                case 1:
                    HistogramRed.Points = HistogramWindow.ConvertToPointCollection(HistogramG);
                    break;

                case 2:
                    HistogramRed.Points = HistogramWindow.ConvertToPointCollection(HistogramB);
                    break;

                case 3:
                    HistogramRed.Points = HistogramWindow.ConvertToPointCollection(HistogramU);
                    break;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.StackTrace);
            }
        }
Ejemplo n.º 3
0
        private async void FilterItem_Median5(object sender, RoutedEventArgs e)
        {
            ProgressBarKuhara.Value      = 0;
            ProgressBarKuhara.Visibility = Visibility.Visible;
            var progress = new Progress <int>(value => { ProgressBarKuhara.Value = value; });

            ModifiedImgSingleton.Source = await Mask.PerformMask_Median(5, progress);

            ProgressBarKuhara.Visibility = Visibility.Hidden;
            HistogramTools.CalculateHistograms();
        }
        private void OkButtonClick(object sender, RoutedEventArgs e)
        {
            //close the window
            Close();
            //perform lut calculation for main image
            var lut = HistogramTools.GetLutStretching(int.Parse(TextBoxMin.Text), int.Parse(TextBoxMax.Text));

            //update image with newer one after histogram stretching
            MainWindow.ModifiedImgSingleton.Source = HistogramTools.StretchHistogram(lut, _option);
            //recalculate histograms for updated image
            HistogramTools.CalculateHistograms();
        }
Ejemplo n.º 5
0
        private void HistogramEqualizationOnClick(object sender, RoutedEventArgs e)
        {
            //get dystrybuanta values
            var dystR = HistogramTools.GetDystrybuanta(HistogramTools.HistogramR);
            var dystG = HistogramTools.GetDystrybuanta(HistogramTools.HistogramG);
            var dystB = HistogramTools.GetDystrybuanta(HistogramTools.HistogramB);

            //get lookup table values after passing dystrybuanta for each channel and length of each channel table
            var lutR = HistogramTools.GetLutEqualization(dystR, HistogramTools.HistogramR.Length);
            var lutG = HistogramTools.GetLutEqualization(dystG, HistogramTools.HistogramG.Length);
            var lutB = HistogramTools.GetLutEqualization(dystB, HistogramTools.HistogramB.Length);

            //equalize histogram
            ModifiedImgSingleton.Source = HistogramTools.EqualizeHistogram(lutR, lutG, lutB);
            //update histogram
            HistogramTools.CalculateHistograms();
        }
Ejemplo n.º 6
0
        private void MenuOpenImgFileClick(object sender, RoutedEventArgs e)
        {
            var op = new OpenFileDialog
            {
                Title  = "Wybierz obraz",
                Filter = "Wszystkie wspierane obrazy|*.jpg;*.jpeg;*.bmp;*.png;*.gif;*.tiff;|" +
                         "Obraz PNG (*.png)|*.png|" + "Obraz JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
                         "Obraz BMP (*.bmp)|*.bmp|" +
                         "Obraz GIF(*.gif)|*.gif|" + "Obraz TIFF(*.tiff)|*.tiff"
            };


            if (op.ShowDialog() != true)
            {
                return;
            }
            _originalImgBitmap = new BitmapImage(new Uri(op.FileName));
            _originalImgBitmap = ConvertToAbgrImage(_originalImgBitmap);

            OriginalImage.Source = _originalImgBitmap;
            ModifiedImage.Source = _originalImgBitmap;
            ModifiedImgSingleton = ModifiedImage;


            var width  = _originalImgBitmap.PixelWidth.ToString();
            var height = _originalImgBitmap.PixelHeight.ToString();

            ResolutionStatusBar.Text = width + " x " + height;
            ResolutionX.Text         = width;
            ResolutionY.Text         = height;
            ResetPositionAndZoomOfImage();
            SaveImage.X     = int.Parse(ResolutionX.Text);
            SaveImage.Y     = int.Parse(ResolutionY.Text);
            _originalMatrix = (MatrixTransform)OriginalImage.RenderTransform;
            _modifiedMatrix = (MatrixTransform)ModifiedImage.RenderTransform;

            HistogramTools.CalculateHistograms();
        }
Ejemplo n.º 7
0
 private void FilterItem_PrewittVerticalOnClick(object sender, RoutedEventArgs e)
 {
     ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.PrewittVertical, 3);
     HistogramTools.CalculateHistograms();
 }
Ejemplo n.º 8
0
 private void BackToOriginalImage(object sender, RoutedEventArgs e)
 {
     ModifiedImgSingleton.Source = OriginalImage.Source;
     HistogramTools.CalculateHistograms();
 }
Ejemplo n.º 9
0
 private void TurnImageBlackWhiteOnClick(object sender, RoutedEventArgs e)
 {
     ModifiedImgSingleton.Source = Binarization.TurnImageBlackWhite((BitmapSource)ModifiedImgSingleton.Source);
     HistogramTools.CalculateHistograms();
 }
Ejemplo n.º 10
0
        private void ImageObscuringOnClick(object sender, RoutedEventArgs e)
        {
            var lut = new int[256];
            var max = 0;

            //loop while value of averagedhistogram is equal to zero, if not, assign this
            //position of nonzero value to new variable and break
            for (var i = 255; i >= 0; i--)
            {
                if (HistogramTools.HistogramU[i] > 0)
                {
                    max = i;
                    break;
                }
            }


            for (var i = 0; i < 256; i++)
            {
                //using power function to obscure image
                lut[i] = (int)Math.Round(255.0 * Math.Pow((double)i / max, 2.0), 0, MidpointRounding.AwayFromZero);

                if (lut[i] > 255)
                {
                    lut[i] = 255;
                }
                if (lut[i] < 0)
                {
                    lut[i] = 0;
                }
            }

            var bitmap = new WriteableBitmap((BitmapSource)ModifiedImgSingleton.Source);

            var width  = bitmap.PixelWidth;
            var height = bitmap.PixelHeight;

            var stride = width * ((bitmap.Format.BitsPerPixel + 7) / 8);

            var arraySize = stride * height;
            var pixels    = new byte[arraySize];

            //copy all data about pixels values into 1-dimentional array
            bitmap.CopyPixels(pixels, stride, 0);

            var j = 0;

            for (var i = 0; i < pixels.Length / 4; i++)
            {
                //get values of pixels
                var r = pixels[j + 2];
                var g = pixels[j + 1];
                var b = pixels[j];

                //assign new values from lut at r/g/b positions
                pixels[j + 2] = (byte)lut[r];
                pixels[j + 1] = (byte)lut[g];
                pixels[j]     = (byte)lut[b];

                j += 4;
            }

            //overwrite pixels table
            var rect = new Int32Rect(0, 0, width, height);

            bitmap.WritePixels(rect, pixels, stride, 0);

            //set new image
            ModifiedImgSingleton.Source = bitmap;
            //calculate histograms with new image
            HistogramTools.CalculateHistograms();
        }
Ejemplo n.º 11
0
 private void FilterItem_DetectCornersSouthEast(object sender, RoutedEventArgs e)
 {
     ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.SouthEastCorner, 3);
     HistogramTools.CalculateHistograms();
 }
Ejemplo n.º 12
0
 private void FilterItem_Laplace8OnClick(object sender, RoutedEventArgs e)
 {
     ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.LaplaceMiddle8, 3);
     HistogramTools.CalculateHistograms();
 }