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;

       }

    

   }

}

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

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


 

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

17505. Ввод текста в редакторе Word 28 KB
  Лабораторная работа №1 Тема: Ввод текста в редакторе Word Цель: Ввести текст с клавиатуры и научиться делать элементарные рисунки в редакторе Word Выполнение работы: В основной состав компьютера входят: материнская плата звуковая карта она может быть встроена в...
17506. Составление таблиц и расчет по формулам в редакторе Word 34.5 KB
  Лабораторная работа №2 Тема: Составление таблиц и расчет по формулам в редакторе Word Цель: Составить таблицу и выполнить расчёты по формулам в текстовом редакторе Word Расчёт № ___________________ Расход по командировочному удостоверению № 4/092005 от 2 09 2005г. Фамилия имя
17507. Построение графиков зависимостей в Excel 46.5 KB
  Лабораторная работа №3 Тема: Построение графиков зависимостей в Excel Цель: Построить график зависимости температуры от времени Времяч ТемператураС 0 27298 051111 28408 ...
17508. Построение графиков и диаграмм при помощи Excel 29 KB
  Тема: Построение графиков и диаграмм при помощи Excel Цель : научиться строить графики и диаграммы Теоретические сведения Если создана электронная таблица т.е. возможность для наглядного представления данных таблицы в виде графиков и диаграмм. Данные в таблицу мож
17509. Построение графиков заданных в виде формул. Метод приближенного решения в редакторе Excel 126.5 KB
  Тема: построение графиков заданных в виде формул. Метод приближенного решения в редакторе Excel Мета: построить графики по заданным формулам и приобрести навыки по использованию метода приближенного решения. Теоретические сведения Построение графиков заданных в ви...
17510. Логические операции в Excel 29.5 KB
  Тема: Логические операции в Excel Цель : научится использовать логические операторы Excel. Теоретические сведения Excel позволяет решать логические задачи. При записи условий логических задач используются логические символы min и max значения логические операторы. Логиче...
17511. Використання логічних операторів в редакторі Excel для пошуку рішень 76.5 KB
  ЛАБОРАТОРНА РОБОТА 4 Використання логічних операторів в редакторі Excel для пошуку рішень Мета роботи: навчитися користуватися логічними операторами для пошуку правильних рішень логічних задач. Завдання на лабораторну роботу: Отримати завдання; Заповнити та
17512. Методи наближеного розв’язання рівнянь в редакторі Excel 101 KB
  ЛАБОРАТОРНА РОБОТА 3 Методи наближеного розв’язання рівнянь в редакторі Excel Мета роботи: навчитися знаходити корені рівняння за допомогою редактора Excel визначати точність знайденого розв’язку. Загальні положення про корені рівняння та точність знайденого розв’яз
17513. Конспект лекций по экономической теории 539 KB
  Экономическое мышление является ровесником человеческого общества. Первоначально экономическая мысль не выделялась в виде отдельной формы мышления. Истоками считают и папирусы Древнего Египта, и законы царя Хаммурапи, древнеиндийский трактат «Артхашастра», экономические заповеди находятся в Библии.