51220

Выделение контурных признаков изображения

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы: Изучить методы выделения контурных признаков изображения и применить полученные знания на практике. Задание: Cоставить программу, выполняющую выделение контурных признаков изображения.

Русский

2014-02-07

287.94 KB

10 чел.

Министерство образования Республики Беларусь

Учреждение образования

Брестский государственный технический университет

Кафедра  ЭВМ и С

Лабораторная работа № 4

«Выделение контурных признаков изображения»

Выполнил:

студент гр. Э-41 ФЭИС

Якубчик А.Н.

Проверил:

Кузьмицкий Н.Н.

Брест 2013

Цель работы: Изучить методы выделения контурных признаков изображения и применить полученные знания на практике.

Задание: Cоставить программу, выполняющую выделение контурных признаков изображения. 

  1.  Необходимые характеристики:
  2.  изображение хранится во внешнем файле;
  3.  программа должна выводить исходное и результирующее изображения;
  4.  возможность выбора уровня порогового ограничения;
  5.  перед выделением контура происходит фильтрация изображения любым фильтром.
  6.  возможность изменения порога при роботе с контурным препаратом.

Тип фильтра: 

  1.  курсовые маски (возможность выбора любой маски: С,Ю,З,В,С-З,С-В,...)

Код программы: 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace COS4

{

   public partial class Form1 : Form

   {

       Bitmap image1 = null;

       Bitmap image_2 = null;

       int width = 0;

       int height = 0;

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

           openFileDialog1.ShowDialog();

           Bitmap image = new Bitmap(openFileDialog1.FileName);

           width = image.Width;

           height = image.Height;

           image1 = image;

           pictureBox1.Image = image;

           pictureBox1.Show();

       }

       private void button2_Click(object sender, EventArgs e)

       {

           Bitmap image2 = new Bitmap(width, height);

           pictureBox1.Image = image2;

           image_2 = image2;

           for (int i = 0; i < height; i++)

           {

               for (int j = 0; j < width; j++)

               {

                   Color c = image1.GetPixel(j, i);

                   Double RED = Convert.ToDouble(c.R * 0.2989);

                   Double GREEN = Convert.ToDouble(c.G * 0.587);

                   Double BLUE = Convert.ToDouble(c.B * 0.114);

                   int GREY = Convert.ToInt32(RED + GREEN + BLUE);

                   image2.SetPixel(j, i, Color.FromArgb(c.R, c.G, c.B));

                   image2.SetPixel(j,i,Color.FromArgb(GREY,GREY,GREY));

               }

           }

           pictureBox1.Refresh();

       }

       private void button3_Click(object sender, EventArgs e)

       {

           string input = textBox1.Text;

           double k = Convert.ToDouble(input);

           Bitmap image3 = new Bitmap(width, height);

           pictureBox2.Image = image3;

           double G = 0;

           int[,] maska = new int[3, 3];

           for (int i = 1; i < height - 1; i++)

           {

               for (int j = 1; j < width - 1; j++)

               {

                   for (int county = 0; county < 3; county++)

                   {

                       for (int countx = 0; countx < 3; countx++)

                       {

                           maska[county, countx] = image_2.GetPixel(j + countx - 1, i + county - 1).R;

                       }

                   }

                   if (radioButton1.Checked == true)

                   {

                       G = (maska[0, 0] + maska[0, 1] + maska[0, 2] + maska[1, 0] - 2 * maska[1, 1] + maska[1, 2] - maska[2, 0] - maska[2, 1] - maska[2, 2]);

                   }

                   if (radioButton2.Checked == true)

                   {

                       G = (maska[2, 0] + maska[2, 1] + maska[2, 2] + maska[1, 0] - 2 * maska[1, 1] + maska[1, 2] - maska[0, 0] - maska[0, 1] - maska[0, 2]);

                   }

                   if (radioButton3.Checked == true)

                   {

                       G = (maska[2, 0] + maska[2, 1] - maska[2, 2] + maska[1, 0] - 2 * maska[1, 1] - maska[1, 2] + maska[0, 0] + maska[0, 1] - maska[0, 2]);

                   }

                   if (radioButton4.Checked == true)

                   {

                       G = (maska[2, 1] - maska[2, 0] + maska[2, 2] - maska[1, 0] - 2 * maska[1, 1] + maska[1, 2] - maska[0, 0] + maska[0, 1] + maska[0, 2]);

                   }

                   if (radioButton5.Checked == true)

                   {

                       G = (maska[0, 0] + maska[0, 1] + maska[0, 2] + maska[1, 0] - 2 * maska[1, 1] - maska[1, 2] + maska[2, 0] - maska[2, 1] - maska[2, 2]);

                   }

                   if (radioButton6.Checked == true)

                   {

                       G = (maska[0, 0] + maska[0, 1] + maska[0, 2] - maska[1, 0] - 2 * maska[1, 1] + maska[1, 2] - maska[2, 0] - maska[2, 1] + maska[2, 2]);

                   }

                   if (radioButton7.Checked == true)

                   {

                       G = (maska[2, 0] + maska[2, 1] + maska[2, 2] + maska[1, 0] - 2 * maska[1, 1] - maska[1, 2] + maska[0, 0] - maska[0, 1] - maska[0, 2]);

                   }

                   if (radioButton8.Checked == true)

                   {

                       G = (maska[2, 1] + maska[2, 0] + maska[2, 2] - maska[1, 0] - 2 * maska[1, 1] + maska[1, 2] - maska[0, 0] - maska[0, 1] + maska[0, 2]);

                   }

                   if (G > k)

                   {

                       image3.SetPixel(j, i, Color.White);

                   }

                   else

                   {

                       image3.SetPixel(j,i,Color.Black);

                   }

               }

           }

           pictureBox2.Show();

       }

   }

}

Пример работы программы:

Вывод: в ходе работы изучили методы выделения контурных признаков изображения.


 

А также другие работы, которые могут Вас заинтересовать

22157. ОБЛІК КОРОТКОСТРОКОВИХ ЗОБОВ’ЯЗАНЬ 62.5 KB
  Поняття, оцінка та види короткострокових зобов’язань (пасивів). Облік заборгованості по рахунках постачальників та векселів виданих (векселів до сплати). Облік інших короткострокових зобов’язань. Облік заробітної плати і зобов’язань по заробітній платі.
22158. Резистивные преобразователи перемещения 2.95 MB
  Контактные преобразователи принцип действия и основные типы контактных преобразователей 4 требования к электрической цепи область применения 6 II.2 классификация реостатных преобразователей по конструктивным особенностям...
22159. ТАХОМЕТРЫ 855.42 KB
  Приборы и датчики угловой скорости Приборы предназначенные для измерения частоты вращения называются тахометрами. Тахометры применяются для измерения частоты вращения вала двигателя и его агрегатов. Наибольшее распространение получили следующие методы измерения частоты вращения по принципу действия чувствительного элемента ЧЭ: центробежные в которых ЧЭ реагирует на центробежную силу развиваемую неуравновешенными массами при вращении вала; магнитоиндукционные основанные на зависимости наводимых в металлическом теле вихревых токов от...
22160. ТЕНЗОРЕЗИСТОРЫ 114.5 KB
  2 Основные параметры и характеристики тензорезисторов. 3 Расчёт тензорезисторов. 5 Конструкция тензорезисторов. 9 Схемы включения тензорезисторов.
22161. ТЕПЛОВЫЕ ЯВЛЕНИЯ В РАЗЛИЧНЫХ СРЕДАХ 5.26 MB
  Понятия единицы измерения размерности Единицей количества тепла Q в Международной системе единиц СИ является джоуль Дж. В технике пока еще нередко применяется старая единица тепла калория кал а в англосаксонских странах Британская тепловая единица Б. Тепловой поток Ф это количество тепла проходящего через поперечное сечение А за единицу времени: Ф = . Плотность теплового потока q Дж см2 определяется как количество тепла проходящего за единицу времени t чeрез единицу площади поверхности: Теплоемкость С ранее...
22162. Методы измерения механических напряжений, сил и моментов 3.06 MB
  Измерения усилий требуется производить в различных средах в условиях действия разнообразных влияющих величин в широком диапазоне температур от 270 до 1200 С в широком частотном спектре который для механических напряжений и сил простирается от 0 до 100 к Гц а для давлений ультразвуковых волн в гидроакустике до 10 Гц. Первая группа методов наиболее широко используется для определения механических напряжений путем измерения деформации поверхности исследуемого объекта а также в приборах для измерения сил крутящих моментов и давлений....
22163. ПИРОМЕТРЫ 266.5 KB
  [4] Пирометры частичного излучения. [5] Высокотемпературные пирометры частичного излучения для контроля температуры [6] Особенности [7] ТАБЛИЦА ИНФРАКРАСНЫХ ТЕРМОМЕТРОВ ПИРОМЕТРОВ ДЛЯ ТЕХНОЛОГИЧЕСКИХ ПРОЦЕССОВ [8] Пирометры Серии М50 INFRACOUPLE [9] Пирометры серии М67 М67S. Закон Планка устанавливает связь между абсолютной температурой и спектральным распределением потока излучения светимости АЧТ: 122 Где спектральная плотность потока излучения АЧТ т.
22164. Разница между результатами измерения и истинным значением измеряемой величины 52 KB
  Представляя собой приближенные оценки значений величин найденные путем измерения они зависят не только от них но ещё и от метода измерения от технических средств с помощью которых проводятся измерения и от свойств органов чувств наблюдателя осуществляющего измерения. Разница между результатами измерения и истинным значением измеряемой величины называется погрешностью измерения. Причиной отклонения истинного значения измеряемой величины от результата измерения могут быть самые различные факторы.
22165. Порядок создания предприятия 346.63 KB
  Обычно предприниматели выбирают вид деятельности, подсказанный предыдущим профессиональным опытом. Опыт помогает сориентироваться на рынке данного вида товаров и услуг - профессионалам примерно известен спрос и особенности продукции, что даёт возможность быстро сформировать клиентуру