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;

       }

       

   }

}

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

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


 

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

54007. На життєві йдучи видноколи, не розтратьте найкращих чуттів, будьте гідні рідної школи, будьте гідні своїх вчителів! 108.5 KB
  Будьте гідні рідної школи Будьте гідні своїх вчителів за творчістю випускників Чернівецької гімназії № 5: Ірини Вільде Ореста Масикевича Володимира Кобилянського Дмитра Загула Тараса Унгуряна Андрія Шкургана Олександра Маслюченка Єлєни Даскал Мета: ознайомити учнів з цікавими фактами життя і творчості майстрів художнього слова які навчались у Чернівецькій гімназії № 5; через художнє слово ввести учнів у чарівний світ поезії; навчити аналізувати поетичні твори; розвивати творчі та комунікативні здібності вміння логічно мислити;...
54008. «The Tsar Bell and the Kunstkammer». Путешествие в Москву и Санкт-Петербург 93 KB
  Write down your home task. Translate the texts «Lake Baikal» and «The Nile» at pages 22, 24 in your workbooks 1; А, В, C, D at page 49 in your textbooks. And please, read the words at page 44 in your textbooks.
54011. МИСТЕЦТВО. (ТЕЛЕБАЧЕННЯ. КІНО. МУЗИКА) 255 KB
  So, it’s better to see than to hear. And I quite side with you. Now let’s watch a short fragment and try to guess what we are going to discuss at today’s lesson. Look at the screen. Unfortunately the extract is in Russian but Russian is just one more foreign language, isn’t it?
54012. Theatre Lessons for children 62.5 KB
  Many of the skills learned in playing are social skills. Most games worth playing are highly social and have a problem that needs solving within them- an objective point in which each individual must become involved with others while attempting to reach a goal.
54013. Опис графічних операцій у мові програмування Паскаль 139.5 KB
  Мета: Ввести поняття про графічних операторів у Паскалі. Навчити учнів правильно складати програми по обробці графічних функцій й операцій.
54014. Квадратні рівняння 329 KB
  Пропоную конспекти різних типів уроків де розкрито різні способи організації самостійної роботи з учнями при вивченні теми Квадратні рівняння. Квадратне рівняння. Повні та неповні квадратні рівняння їх розв’язання.
54015. Популярність. Популярні зірки 154 KB
  The topic of the today’s lesson is “The Famous Pop Stars”. Well, at the today’s lesson we’re speaking about people who want to be famous. You’ll read the text. You’re going to revise grammar (Past Simple and Present Perfect). By the end of the lesson you’ll be able to ask and answer the questions about pop idols.