51220

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

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

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

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

Русский

2014-02-07

287.94 KB

9 чел.

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

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

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

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

Лабораторная работа № 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();

       }

   }

}

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

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


 

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

82687. Действия над многочленами 88 KB
  Задачи: систематизировать материал по данной теме. провести диагностику усвоения системы знаний и умений и её применения для выполнения практических заданий стандартного уровня с переходом на более высокий уровень. развивать познавательные процессы, память, мышление, внимание...
82688. Добрые дела живут на белом свете 28.9 KB
  Цель: закреплять представления детей о добрых делах, понимать, что вежливые слова помогают людям в общении; упражнять в грамотном построении ответов на заданные вопросы. Развивать способность детей к сопереживанию, устанавливать причинно-следственные связи. Упражнять в подборе слов-антонимов, воспитывать чувство доброты.
82689. Переключательная схема 127 KB
  Переключательная схема это схематическое изображение некоторого устройства состоящего из переключателей и соединяющих их проводников а также из входов и выходов на которые подаётся и с которых снимается электрический сигнал.
82690. Будова атома 40.22 KB
  Освітня: повторити і узагальнити знання про будову атома шляхом інтеграції наукових знань, отриманих на уроках фізики і хімії; встановити рівень засвоєння навчального матеріалу з теми «Будова атома»; підготувати учнів до освоєння матеріалу по наступній темі.
82691. Чи модно бути патріотом? 60.5 KB
  Кожен з присутніх має можливість висловити власну думку чи точку зору. Можливо, наша сьогоднішня зустріч допоможе вам знайти відповіді на запитання, які вас хвилюють. Я запрошую всіх, кому не байдуже наше майбутнє, до обговорення.
82692. Приготовление рассольника ленинградского 66.5 KB
  Цели урока: Обучающая – формирование системы умений по осуществлению полного технологического цикла приготовления рассольника ленинградского. Развивающая – освоение репродуктивных умений комплексного планирования профессиональных действий, выбора наиболее рационального их сочетания и чередования...
82693. Абагульняючы ўрок-гульня па беларускай літаратуры ў 6 класе 52.5 KB
  Настаўнік. На працягу першай і другой чвэрці вы, дарагія сябры, пазнаёміліся з цікавымі творамі на розныя тэмы. Спадзяюся, што яны пакінулі ў вашых сэрцах незабыўны след, што вам запомнілася вобразнасць мастацкага слова і вы не засталіся абыякавымі да лёсу літаратурных герояў.
82694. Зв’язок іменників з прикметниками у реченні 67.5 KB
  Мета уроку: поглиблювати знання учнів про роль прикметників у мовленні, про зв’язок прикметників з іменниками, вчити розпізнавати прикметники, ставити до них питання; розвивати навички правильної вимови і написання словникових слів; виховувати повагу і любов до матері, естетичні почуття.
82695. Алфавіт. Звук у, Буква Уу. Узагальнюючий урок по творчості братів Грімм 65.5 KB
  Мета: Закріпити знання учнів про вивчені букви; вдосконалити навички читання складів і слів з буквою У; розвивати увагу, зв’язне мовлення; збагачувати словниковий запас. Перевірити здобуті учнями знання і уміння по темі Творчість братів Грімм створити ситуацію, при якій учні самі стають героями уроку.