51217

Фильтрация изображения от импульсных помех

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

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

Цель: Составить программу, выполняющую фильтрацию изображения от импульсных помех. Необходимые характеристики: изображение хранится во внешнем файле; программно в изображение вносятся помехи (точки, линии, ...); программа должна выводить исходное и отфильтрованное изображения, должна присутствовать возможность выбора уровня зашумления, порога фильтра, размера окна.

Русский

2014-02-07

145.44 KB

19 чел.

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

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

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

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

Отчёт

По лабораторной работе №3

"Фильтрация изображения от импульсных помех"

Выполнил:

студент группы Э-41

Якубчик А.Н.

 

Проверил:

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

      

Брест 2013г.

Цель:

Составить программу, выполняющую фильтрацию изображения от импульсных помех.

  1.  Необходимые характеристики:
    1.  изображение хранится во внешнем файле;
    2.  программно в изображение вносятся помехи (точки, линии, ...);
    3.  программа должна выводить исходное и отфильтрованное изображения, должна присутствовать возможность выбора уровня зашумления, порога фильтра, размера окна.
  2.  Варианты (тип фильтра) 
    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 lab3

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       int Width;

       int Height;

       Bitmap picture;

       private void button1_Click(object sender, EventArgs e)

       {

           openFileDialog1.Filter = "bmp|*.bmp";

           openFileDialog1.ShowDialog();

           picture = (Bitmap)Image.FromFile(openFileDialog1.FileName);

           pictureBox1.Image = picture;

           pictureBox1.Show();

       }

       private void button2_Click(object sender, EventArgs e)

       {

           double l;

           l = Convert.ToDouble(textBox6.Text);

           Random rand = new Random();

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

           {

               picture.SetPixel(rand.Next(picture.Width), rand.Next(picture.Height), Color.White);

           }

           pictureBox2.Image = picture;

           pictureBox2.Invalidate();

       }

       private void button3_Click(object sender, EventArgs e)

       {

           

           Color color;

            Width = Convert.ToInt32(textBox1.Text);

             Height = Convert.ToInt32(textBox2.Text);

           int X = Convert.ToInt32(textBox3.Text);

           int Y = Convert.ToInt32(textBox4.Text);

           int H1 = (Height - 1) / 2;

           int W1 = (Width - 1) / 2;

           int[] temp = new int[(Height+Width-1)];

           ///int[][] temp1=new int[Width][Height];

           progressBar1.Step = 1;

           

           

           progressBar1.Maximum = picture.Width*picture.Height;

           for(int i=Y;i<picture.Height-H1;i++)

               for (int j = X; j < picture.Width-W1; j++)

               {

                   color = picture.GetPixel(j, i);

                   temp[0]=Convert.ToInt32(color.R);

                   int k=1;

                   while(k<=H1)

                   {

                       color = picture.GetPixel(j + k, i);

                       temp[k] = Convert.ToInt32(color.R);

                       k++;

                   }

                   k= 1;

                   while (k <= H1)

                   {

                       color = picture.GetPixel(j - k, i);

                       temp[H1 + k] = Convert.ToInt32(color.R);

                       k++;

                   }

                   k = 1;

                   while (k <= W1)

                   {

                       color = picture.GetPixel(j, i + k);

                       temp[2 * H1 + k] = Convert.ToInt32(color.R);

                       k++;

                   }

                   k = 1;

                   while (k <= W1)

                   {

                       color = picture.GetPixel(j, i - k);

                       temp[W1+H1+H1 + k] = Convert.ToInt32(color.R);

                       k++;

                   }

                   Sort(temp);

                   int color1 = temp[((Height + Width) / 2)-1];

                   picture.SetPixel(j, i, Color.FromArgb(color1, color1, color1));

                   progressBar1.PerformStep();

               }

           pictureBox2.Image = picture;

           progressBar1.Value = 0;

       }

       void Sort(int[] a)

       {

           int top = Height+Width-2;

           while (top != 0)

           {

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

               {

                   if (a[i] > a[i + 1])

                   {

                       int temp;

                       temp = a[i];

                       a[i] = a[i + 1];

                       a[i + 1] = temp;

                   }

               }

               top--;

           }

       }

       private void button4_Click(object sender, EventArgs e)

       {

           Color color;

           int r, g, b = 0;

           double r1, g1, b1;

           int sum;

           for (int i = 0; i < picture.Height; i++)

               for (int j = 0; j < picture.Width; j++)

               {

                   color = picture.GetPixel(j, i);

                   r = color.R;

                   g = color.G;

                   b = color.B;

                   r1 = Convert.ToDouble(r);

                   r1 = r1 * 0.2989;

                   r = Convert.ToInt32(r1);

                   g1 = Convert.ToDouble(g);

                   g1 = g1 * 0.587;

                   g = Convert.ToInt32(g1);

                   b1 = Convert.ToDouble(b);

                   b1 = b1 * 0.114;

                   b = Convert.ToInt32(b1);

                   sum = r + g + b;

                   picture.SetPixel(j, i, Color.FromArgb(sum, sum, sum));

               }

           pictureBox2.Image = picture;

       }

    

   }

}

Тестовый пример:

Вывод: Составил программу, выполняющую фильтрацию изображения от импульсных помех.


 

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

52815. Einkaufen. Wir gehen in den Supermarkt 60 KB
  Liebe Kinder, ich freue mich euch gesund und lustig zu sehen. Wie geht es euch? Sind alle Kinder da? Gibt es etwas Neues? Gibt es etwas Interessantes? (Die Schüler beantworten die Fragen des Lehrers)
52816. Екологічні проблеми, які стосуються мене 95.5 KB
  Мета проекту: Стимулювати інтерес в учнів до проблеми екології оволодівати певною сумою знань стосовно того що майбутнє нашої планети в наших руках про необхідність дбайливого ставлення до природи про взаємозвязки між діяльністю людини і життям природи;виховувати почуття відповідальності за те що відбувається в природі підвищувати екологічну культуру. І ЕТАП Урок Я і Україна ТЕМА: Охорона природи. Узагальнити знання учнів про те що обовязок кожної людини охорона рідної природи. До чого закликає нас матінкаприрода Ми з вами...
52817. Екологічний практикум. Урок математики в 6 класі 49.5 KB
  60 кг макулатури рятує одно дерево 30 кг макулатури рятує 1 га лісу 1 т макулатури економить 1000 кВт ч електроенергії 1 т макулатури економить 200 м3 води 1т макулатури економить дає 2500 учнівських зошитів. Використання макулатури для виробу паперу на 75 зменшує забруднення повітря та дозволяє зекономити до 40 води Не викидай папір який ви використовували збирайте його та здавайте макулатуру V. Скільки дерев зберегли учні Скільки учнівських зошитів можна виготувати із цієї макулатури Скільки води та електроенергії буде з...
52818. Экологический праздник: Звери, птицы, лес и я - вместе дружная семья! 75.5 KB
  Все ребята молодцы Инсценировка Аринка Солнечный лучик. Аринка. Ну это надо Ни здравствуй не сказала ни разрешения не спросила а уж прямо на голову сесть собирается Ну и молодежь пошла А еще Аринкой Солнечный лучик прозывается Аринка удивленно. Ктокто Это я старый заслуженный пень ветеран леса Аринка.
52819. Екологічне виховання учнів 1.27 MB
  Вчителі початкових класів при викладанні предметів застосовують такі методи та методичні прийоми як: екологічне моделювання та прогнозування екологічні ігри розвязування екологічних задач. Ігрові форми діяльності: конкурси турніри аукціони на знання певної теми повязаної з природою вікторини пізнавальні та рольові ігри екологічні свята пізнавальні екскурсії з іграми забезпечують практичну діяльність учнів початкових класів і орієнтовані на вирішення реальних місцевих екологічних проблем. Протягом 5 років постійно з варіативу до...