private void Bernsen_Click(object sender, RoutedEventArgs e) { var contrast_threshold = int.Parse(Bernsen_contrast.Text); var temp = Binarization.bernsen(bm, 3, contrast_threshold); refreshImage(temp); }
private void Manual_Click(object sender, RoutedEventArgs e) { var thresholdInt = int.Parse(Manual_threshold.Text); var bmp = Binarization.binarization(bm, thresholdInt); refreshImage(bmp); }
private void Niblack_Click(object sender, RoutedEventArgs e) { var windowSize = int.Parse(niblack_window.Text); var kValue = float.Parse(niblack_k.Text); var temp = Binarization.niblack(this.bm, windowSize, kValue); refreshImage(temp); }
public static Bitmap KMM(Bitmap bm) { var tmp = Binarization.binarization(new Bitmap(bm), 127); //Wszystkie czarne piksele oznaczamy jako 1, zaś białe jako 0. initialize(tmp); //contains 0 and 1 int counter = 0; short[,] saveInitial; do { counter++; saveInitial = (short[, ])kmmArray.Clone(); //Piksele 1, które posiadają sąsiadów o oznaczeniu 0 po bokach, u góry lub u dołu, oznaczamy jako 2. //Pozostałe piksele 1, które posiadają sąsiadów o oznaczeniu 0 na rogach, oznaczamy jako 3. runEdgeAndCornerCheck(); //contins 0,1,2,3 #if VERBOSE Console.WriteLine("After runEdgeAndCornerCheck() (should contain 0123)"); printArray(); #endif //Dla pikseli oznaczonych jako 2 za pomocą maski sprawdzarka obliczamy ich wagę. Jeśli waga znajduje się na liście czwórki oznaczenie piksela zamieniamy z 2 na 4. addFours(); //contains 0,1,2,3,4 #if VERBOSE Console.WriteLine("After addFours() (should contain 01234)"); printArray(); #endif /* * Dla wszystkich pikseli oznaczonych jako 4 wyliczamy wagę za pomocą maski sprawdzarka. Jeśli waga znajduje się na liście wycięcia, zamieniamy piksel na 0, zaś w przeciwnym razie zamieniamy go na 1. * Dla wszystkich pikseli oznaczonych jako 2 wyliczamy wagę za pomocą maski sprawdzarka. Jeśli waga znajduje się na liście wycięcia, zamieniamy piksel na 0, zaś w przeciwnym razie zamieniamy go na 1. * Dla wszystkich pikseli oznaczonych jako 3 wyliczamy wagę za pomocą maski sprawdzarka. Jeśli waga znajduje się na liście wycięcia, zamieniamy piksel na 0, zaś w przeciwnym razie zamieniamy go na 1. */ cutOut(4); //contains 0,1 cutOut(2); cutOut(3); #if VERBOSE Console.WriteLine("After cutOut() (should be only 0 and 1)"); printArray(); Console.WriteLine("Comparing current image to previous..."); if (arrayIdenticalToKmmArray(saveInitial)) { Console.WriteLine("No change since last iteration - EXITING"); } else { Console.WriteLine("Current and last iteration are different - RUNNING NEW ITERATION"); } #endif } while (!arrayIdenticalToKmmArray(saveInitial)); //powtarzamy dopoki operacja wywoluje zmiany Console.WriteLine("KMM Finished after " + counter + " iterations"); return(kmmArrayToBitmap()); }
private void Otsu_Click(object sender, RoutedEventArgs e) { var temp = Binarization.otsu(bm); refreshImage(temp); }