51057

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

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

Коммуникация, связь, радиоэлектроника и цифровые приборы

Программа должна выводить исходное и отфильтрованное изображения, должна присутствовать возможность выбора уровня зашумления, порога фильтра, размера окна

Русский

2014-02-10

135.5 KB

4 чел.

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

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

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

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

Отчёт

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

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

Выполнил:

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

Тихонов А.В.

 

Проверил:

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

      

Брест 2013г.

Цель:

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

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

       {

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

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

               {

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

               }

           pictureBox2.Image = picture;

       }

       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();

               }

           pictureBox1.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));

               }

           pictureBox1.Image = picture;

       }

       

   }

}

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

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


 

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

26133. Нематериальные активы как объект учета, нормативное регулирование и учет их движения 21.54 KB
  НМА регламентируются ПБУ 14 2007Учет нематериальных активов. НМА объекты не имеющие физически осязаемой формы но используемые организацией при прве продукции или управления процессом прва в течении срока превышающего 1 год. При принятии к бухгалтерскому учету активов в качестве НМА необходимо единовременное выполнение следующих условий: 1 отсутствие материальновещественной физической структуры; 2 возможность идентификации выделения отделения от другого имущества; 3 испие в прве продукции при выполнении работ или оказании...
26138. Элиминирование как элемент методики анализа 17.39 KB
  Для осущия этой задачи используется прием элиминирования кот. Элиминирование представляет собой логический прием при помощи кот. Цепные подстановки При нем опряется дополнительная условная величина кот. При нем наименование показателей по кот.