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;

       }

    

   }

}

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

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


 

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

58931. Дослідження цифрової інтегральної мікросхеми 368.5 KB
  Цифрові ІМС складають з логічних елементів І, АБО, НЕ, яких з’єднують відповідним чином для утворення пристроїв різного функціонального призначення. Електричні властивості ЦІМС визначають за статичними характеристиками передавання і параметрами логічних елементів (ЛЕ).
58932. Птицю пізнають за пір’ям, а людину – за справами 44 KB
  Мета: удосконалювати навички правильного і виразного читання та навички літературного аналізу твору уміння самостійно працювати; збагачувати мовлення новими словами; розвивати образну уяву увагу память...
58933. Разработка предложений по повышению эффективности личных продаж медицинских представителей через избирательные формы работы с их различными категориями (на примере регионального представительства компании «Санофи-Синтелабо») 667.5 KB
  Разработка процедуры по идентификации медицинских представителей регионального представительства компании согласно их категорийности по уровням мотивированности и компетентности и распределению усилий регионального менеджера в соответствии с названными категориями..
58935. Підготовка до ЗНО. Вимоги до монологічного висловлювання. Тренувальні вправи 57.5 KB
  Актуалізація опорних знань учнів про роздум Один із видів роботи під час проходження ЗНО завдання з розгорнутою відповіддю передбачає створення власного монологічного висловлювання на дискусійну тему у вигляді творуроздуму у якому слід аргументовано ствердити...
58936. Захворювання статевих органів. Венеричні хвороби. СНІД 133 KB
  Довести важливість дбайливого ставлення до свого здоровя з раннього віку необхідність дотримання норм здорового способу життя. Добридень Зустрічаючись люди зазвичай говорять це гарне добре слово бажаючи один одному здоровя.
58937. Тренувальні вправи на добір ознак, характерних для окремих предметів 49 KB
  Відгадайте загадкуприкметники закриті Червоний колір а кислий смак Камяне серце чому це так вишня Чи можемо відгадати загадку Чому Які слова допомогли відгадати загадку На які питання вони відповідають Що означають Яку роль відіграють слова-ознаки в житті...
58939. Публій Вергілій Марон. Поема “Енеїда” як літературна обробка римської легенди про троянця Енея — засновника Риму. Творче наслідування поем Гомера 126 KB
  Мета: подати загальні відомості про золоту добу римської культури та літератури розкрити значення творчості Вергілія як найвидатнішого римського поета творця національного героїчного епосу пояснити...