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 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(); }
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(); }
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(); }
private void FilterItem_PrewittVerticalOnClick(object sender, RoutedEventArgs e) { ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.PrewittVertical, 3); HistogramTools.CalculateHistograms(); }
private void BackToOriginalImage(object sender, RoutedEventArgs e) { ModifiedImgSingleton.Source = OriginalImage.Source; HistogramTools.CalculateHistograms(); }
private void TurnImageBlackWhiteOnClick(object sender, RoutedEventArgs e) { ModifiedImgSingleton.Source = Binarization.TurnImageBlackWhite((BitmapSource)ModifiedImgSingleton.Source); HistogramTools.CalculateHistograms(); }
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(); }
private void FilterItem_DetectCornersSouthEast(object sender, RoutedEventArgs e) { ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.SouthEastCorner, 3); HistogramTools.CalculateHistograms(); }
private void FilterItem_Laplace8OnClick(object sender, RoutedEventArgs e) { ModifiedImgSingleton.Source = Mask.PerformMask(MaskTables.LaplaceMiddle8, 3); HistogramTools.CalculateHistograms(); }