private void btn_MultiplyImage_Click(object sender, EventArgs e) { if (isImageALoaded == false) { MessageBox.Show("Please load image A first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (isImageBLoaded == false) { MessageBox.Show("Please load image B first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { pb_ImageResults.Image = ManipulateImage.MultiplyImage(imageAPath, imageBPath); } }
static void Main(string[] args) { string path = @"../../../../../imgs/"; Bitmap original_image = (Bitmap)Image.FromFile(path + "test_image.jpg"); // Обычный медианный фильтр Bitmap median_image = Filter.MedianFilter(original_image, 3); median_image.Save(path + "MedianFilter_image.jpg"); // Картинку в серый цвет Bitmap gray_image = Filter.ImageToGray(original_image); gray_image.Save(path + "gray_image.jpg"); // Размытие матрицами double koef = 1d / 16d; Bitmap gaus_image = Filter.ApplySmoothMethod(gray_image, Matrix.Gauss3x3, koef); gaus_image.Save(path + "gausBlur_image.jpg"); // Доп. Массивы для нахождений линий на изображении int[,] hough_array; double[,] atans; //Применения оператора Собеля Bitmap sobel_image = Filter.ApplySobelMethod(gaus_image, Matrix.SobelVertical, Matrix.SobelGorizontal, out atans); Bitmap nonmax_image = Filter.NonMaximum(sobel_image, atans); nonmax_image.Save(path + "nonmax_image.jpg"); //постобработка изображения Bitmap doubletres_image = Filter.ApplyDoubleTresholding(nonmax_image, 0.3d, 0.7d); Bitmap posttreatment_image = Filter.PostTreatment(doubletres_image); posttreatment_image.Save(path + "posttreatment_image.jpg"); //Алгоритм Хафа для нахождени линий Bitmap h_image = Filter.ApplyHoughAlgoritm(doubletres_image, out hough_array); Bitmap image_with_lines = Filter.DrawingLineOnImage(original_image, hough_array, 90); image_with_lines.Save(path + "base_img_with_lines.jpg"); ManipulateImage.Resize(h_image, 320, 280).Save(path + "hough_space_image.jpg"); //Проверка времени выполнения копирования изображений различными методами System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); List <long> _new = new List <long>(); List <long> _clone = new List <long>(); List <long> _copy = new List <long>(); sw.Start(); long last_time = sw.ElapsedTicks; for (int i = 0; i < 1000; i++) { Bitmap new_bitmap = new Bitmap(original_image); _new.Add(sw.ElapsedTicks - last_time); last_time = sw.ElapsedTicks; Bitmap clone = (Bitmap)original_image.Clone(); _clone.Add(sw.ElapsedTicks - last_time); last_time = sw.ElapsedTicks; Bitmap copy = ManipulateImage.CopyImage(original_image); _copy.Add(sw.ElapsedTicks - last_time); last_time = sw.ElapsedTicks; } _new.Sort(); _clone.Sort(); _copy.Sort(); System.Console.WriteLine("Медианные значения количества тиков:\n" + string.Format("Создание нового объекта через new Bitmap(): Max: {0:10} Mid: {1:10} Min: {2:10}\n", _new[999], _new[500], _new[0]) + string.Format("Создание нового объекта через Clone(): Max: {0:10} Mid: {1:10} Min: {2:10}\n", _clone[999], _clone[500], _clone[0]) + string.Format("Создание нового объекта через CopyImage(): Max: {0:10} Mid: {1:10} Min: {2:10}\n", _copy[999], _copy[500], _copy[0]) ); System.Console.ReadKey(); }