51057

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

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

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

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

Русский

2014-02-10

135.5 KB

7 чел.

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

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

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

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

Отчёт

По лабораторной работе №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;

       }

       

   }

}

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

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


 

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

53154. Schulbibliothek. An der Spitze – gestern und heute 98 KB
  Ich möchte wissen, was ihr vor der Stunde erwartet. Hier habe ich eine Liste der Tätigkeiten in der Stunde. Aber die Sätze sind nicht voll. Ergänzt und äußert eure Vermutungen. Was werden wir heute machen? Am Ende der Stunde prüfen wir, welche Vermutungen richtig sind.
53155. Ім'я Гоголя на карті Диканьки 79 KB
  Тема проекту: Ім'я Гоголя на карті Диканьки. Мета: ознайомити дітей з історією вулиці Гоголя в Диканці діяльністю організацій на цій вулиці життям її мешканців. Гоголя; глибше знайомство з особистістю М. Гоголя.
53158. ГОЛОДОМОР 1932 – 1933 рр. НА УКРАЇНІ 127.5 KB
  Обладнання: книга сталінських злочинів макет карта України на якій позначений райони що були охоплені голодом макет Меморіалу жертвам голодомору в Києві панно на стінні Ціна йому життя рушник ікона. Страшно уявити що невеликий шматок хліба став символом для багатьох наших співвітчизників життя. Мама боролась за наше життя. То був останній день коротенького Лізиного життя.
53159. Голгофа голодної смерті 88 KB
  Мета: розказати учням про страшні події 19321933 років показати причини голодомору та його наслідки вшанувати память загиблих Обладнання: стіл з вишитими рушниками на ньому колоски калина запалена свічка виставка художньої та документальної літератури про голодомор на дошці плакат Епіграф: Нема в світі вищих братських могил ніж ті що заповнені останками безневинних жертв...
53160. Трагічні уроки історії (В пам’ять про голодомори 1921-1923, 1932-1933, 1947 роки) 250.5 KB
  Пам’ять – нескінченна книга, в якій записано все: і життя людини, і життя країни. Та багато сторінок у нашу історію вписано кривавим і чорним. Особливо вражаючі сторінки, де смертельним шрифтом вкарбовано слова: Голод, Голодомор.
53162. Голодомор в Україні 1932 – 1933 року 52 KB
  Мета: поглибити і систематизувати знання учнів про одну з найстрашніших сторінок історії України голодомор 1932-1933 років на матеріалі історичних джерел художніх творів; формувати вміння самостійно та критично оцінювати історичні процеси вдумливо сприймати прочитане; сприяти виробленню в школярів обєктивної оцінки; пробудити історичну пам'ятьрозвивати логічне та аналітичне мислення уміння користуватися додатковою літературою. Обладнання: ікона Спасителявидання творів українських письменників про голодомор фоторепродукції...