14759

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

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

Информатика, кибернетика и программирование

Цель работы: фильтрация изображения от импульсных помех. Задание: Составить программу выполняющую фильтрацию изображения от импульсных помех. Необходимые характеристики: изображение хранится во внешнем файле; программно в изображение вносятся помехи то...

Русский

2013-06-09

1.41 MB

20 чел.

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

Задание:

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

  1.  Необходимые характеристики:
  2.  изображение хранится во внешнем файле;
  3.  программно в изображение вносятся помехи (точки, линии, ...);
  4.  программа должна выводить исходное и отфильтрованное изображения, должна присутствовать возможность выбора уровня зашумления, порога фильтра, размера окна.
  5.  Варианты (тип фильтра)
  6.  медианный фильтр. окно 1хN И Nx1. т.е. должен осуществляться проход изображения по строкам и столбцам (отдельно и вместе)

Код программы:

using System;

using System.Drawing;

using System.Windows.Forms;

using System.IO;

namespace TSOS_LAB1_Final

{

   public partial class Form1 : Form

   {

       public int N;

       public Bitmap original, work;

       public String bfType;

       public Int32 bfSize;

       public Int16 bfReserved1;

       public Int16 bfreserved2;

       public Int32 bfOffBits;

       public Int32 bfSizeheader;

       public Int32 bfShirinaImage;

       public Int32 bfVisotaImage;

       public Int16 bfNumberPlosk;

       public Int16 bfBitPixel;

       public Int32 bfCompress;

       public Int32 bfSizeRastMass;

       public Int32 bfGorSize;

       public Int32 bfVertSize;

       public Int32 bfNumberColors;

       public Int32 bfMainColors;

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

           openFileDialog1.Filter = "bmp |*.bmp";

           openFileDialog1.ShowDialog();

           BinaryReader bReader = new BinaryReader(File.Open(openFileDialog1.FileName, FileMode.Open));

           bfType = new string(bReader.ReadChars(2));

           bfSize = bReader.ReadInt32();

           bfReserved1 = bReader.ReadInt16();

           bfreserved2 = bReader.ReadInt16();

           bfOffBits = bReader.ReadInt32();

           bfSizeheader = bReader.ReadInt32();

           bfShirinaImage = bReader.ReadInt32();

           bfVisotaImage = bReader.ReadInt32();

           bfNumberPlosk = bReader.ReadInt16();

           bfBitPixel = bReader.ReadInt16();

           bfCompress = bReader.ReadInt32();

           bfSizeRastMass = bReader.ReadInt32();

           bfGorSize = bReader.ReadInt32();

           bfVertSize = bReader.ReadInt32();

           bfNumberColors = bReader.ReadInt32();

           bfMainColors = bReader.ReadInt32();

           

           bReader.Close();

           String CompressType=0.ToString();

           if (bfCompress == 0 || bfCompress == 3 || bfCompress == 6)

               CompressType = "Без сжатия";

           else if (bfCompress == 1 || bfCompress == 2)

               CompressType = "RLE";

           else if (bfCompress == 4)

               CompressType = "JPEG";

           else if (bfCompress == 5)

               CompressType = "PNG";

           Bitmap original_image = new Bitmap(openFileDialog1.FileName);

           original = new Bitmap(openFileDialog1.FileName);

           work = new Bitmap(openFileDialog1.FileName);

           pictureBox1.Image = original_image;

           pictureBox1.Show();

           pictureBox2.Image = work;

           pictureBox2.Show();

#region fileInfo

           String message = "Сигнатура файла: " + bfType + "\n Размер файла: " + bfSize.ToString() +

                            "\n Местонахождение данных растрового массива: " + bfOffBits.ToString() +

                            "\n Длина заголовка растрового массива: " + bfSizeheader.ToString() +

                            "\n Ширина изобрадения: " + bfShirinaImage.ToString() + "\n Высота изображения: " +

                            bfVisotaImage.ToString() + "\n Число цевтовых плоскостей: " + bfNumberPlosk +

                            "\n Бит/пиксел: " + bfBitPixel + "\n Метод сжатия: " + CompressType +

                            "\n Длина растрового массива: " + bfSizeRastMass + "\n Горизонтальное разрешение: " +

                            bfGorSize + "\n Вертикальное разрешение: " + bfVertSize +

                            "\n Количество цветов изображения: " + bfNumberColors + "\n Количество основных цветов: " +

                            bfMainColors;

           

           MessageBox.Show(message);

#endregion

       }

#region Shum

       private void button2_Click(object sender, EventArgs e)

       {

           int lvlshum = 0;

           Random rand = new Random();

           if (radioButton1.Checked == true)

               lvlshum = 2000;

           else if (radioButton2.Checked == true)

               lvlshum = 7000;

           else if (radioButton3.Checked == true)

               lvlshum = 20000;

           for (int i =0; i<lvlshum; i++)

           {

               work.SetPixel(rand.Next(work.Width),rand.Next(work.Height),Color.White);

           }

           pictureBox2.Refresh();

       }

#endregion

       private void radioButton6_CheckedChanged(object sender, EventArgs e)

       {

       }

       private void button3_Click(object sender, EventArgs e)

       {

          N = Convert.ToInt32(textBox1.Text);

          if (radioButton4.Checked == true)

          {

              for (int i = 0; i < work.Width - N; i++)

              {

                  for (int j = 0; j < work.Height; j++)

                  {

                      median_filter(work, i, j);

                  }

              }

              pictureBox2.Refresh();

          }

          if (radioButton5.Checked == true)

          {

              for (int i=0;i<work.Width;i++)

              {

                  for (int j=0;j<work.Height-N;j++)

                  {

                      median_filter2(work,i,j);

                  }

              }

              pictureBox2.Refresh();

          }

           if (radioButton6.Checked == true)

               for (int i = 0;i<work.Width-N;i++)

               {

                   for (int j = 0; j < work.Height - N;j++)

                   {

                       median_filter(work, i, j);

                       median_filter2(work, i, j);

                   }

               }

           pictureBox2.Refresh();

       }

       private void median_filter(Bitmap my_bitmap, int x, int y)

       {

           int cR_, cB_, cG_;

           int k = 0;

           int n = N;

           

           int[] cR = new int[n + 1];

           int[] cB = new int[n + 1];

           int[] cG = new int[n + 1];

           

           for (int i = 0; i < n + 1; i++)

           {

               cR[i] = 0;

               cG[i] = 0;

               cB[i] = 0;

           }

           

           for (int i = x; i < x + N; i++)

           {

               

                   System.Drawing.Color c = my_bitmap.GetPixel(i, y);

                   cR[k] = System.Convert.ToInt32(c.R);

                   cG[k] = System.Convert.ToInt32(c.G);

                   cB[k] = System.Convert.ToInt32(c.B);

                   k++;

                   

               

           }

           

           

           Array.Sort(cR);

           Array.Sort(cG);

           Array.Sort(cB);

           int n_ = (int)(n / 2) + 1;

           cR_ = cR[n_];

           cG_ = cG[n_];

           cB_ = cB[n_];

           

           my_bitmap.SetPixel(x, y, System.Drawing.Color.FromArgb(cR_, cG_, cB_));

       }

       private void median_filter2(Bitmap my_bitmap, int x, int y)

       {

           int n;

           int cR_, cB_, cG_;

           int k = 0;

           n = N;

           int[] cR = new int[n + 1];

           int[] cB = new int[n + 1];

           int[] cG = new int[n + 1];

           for (int i = 0; i < n + 1; i++)

           {

               cR[i] = 0;

               cG[i] = 0;

               cB[i] = 0;

           }

           for (int j = y; j < y + N; j++)

           {

               System.Drawing.Color c = my_bitmap.GetPixel(x, j);

               cR[k] = System.Convert.ToInt32(c.R);

               cG[k] = System.Convert.ToInt32(c.G);

               cB[k] = System.Convert.ToInt32(c.B);

               k++;

           }

           Array.Sort(cR);

           Array.Sort(cG);

           Array.Sort(cB);

           int n_ = (int)(n / 2) + 1;

           cR_ = cR[n_];

           cG_ = cG[n_];

           cB_ = cB[n_];

           my_bitmap.SetPixel(x, y, System.Drawing.Color.FromArgb(cR_, cG_, cB_));

       }

   }

}

Скриншоты:

Отрытие файла:


Добавление шумов:

Примение фильтра 1xN:


Применение фильтра Nx1:

Примение фильтров 1xN и Nx1 одновременно:

Вывод: в ходе работы изучили методы фильтрации изображений от импульсных помех.


 

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

48100. Регіональна економіка 350.5 KB
  В основі вивчення регіональної економіки є дослідження розвитку продуктивних сил що являє собою розподіл за територією трудових ресурсів і засобів виробництва всіх основних компонентів соціальноекономічних відносин. Оскільки РПС розглядається як динамічний стан процесу їх розвитку у просторі і в часі форми зосередження виробничої діяльності постійно змінюються. В процесі вивчення регіонального розвитку визначаються комплексні завдання цієї науки а саме: вивчення ТПП регіонів і їх спеціалізації; вдосконалення внутрішньорегіональних та...
48101. ФІНАНСОВИЙ МЕНЕДЖМЕНТ. ОПОРНИЙ КОНСПЕКТ ЛЕКЦІЙ 1.01 MB
  З огляду на це найманого менеджера підприємства іноді розглядають як фінансового посередника. Найбільший вплив на вибір типу фінансової політики підприємства здійснює саме суб’єктивний фактор – тип фінансового менеджера. Унітарне підприємство створюється одним засновником який виділяє необхідне для того майно формує відповідно до закону статутний фонд не поділений на частки паї затверджує статут розподіляє доходи безпосередньо або через керівника який ним призначається керує підприємством і формує його трудовий колектив на засадах...
48102. Техноекологія. Опорний конспект лекцій 368.5 KB
  Контроль забруднення довкілля. Якість вимірювань складу та властивостей об'єктів довкілля та джерел їх забруднення В. Отже антропогенне забруднення атмосфери спричиняється насамперед роботою промислових сільськогосподарських підприємств а також підприємств енергетики автотранспорту тощо що може призвести до таких негативних наслідків: перевищення гранично допустимих концентрацій ГДК багатьох токсичних речовин у містах і населених пунктах; утворення смогу і кислотних дощів; поява парникового ефекту підвищення середньої...
48103. Мікроекономіки. Конспект лекцій 3.63 MB
  Варіації факторів виробництва та оптимум товаровиробника 85 Тема 8. Витрати виробництва 96 Тема 9. Ринок факторів виробництва 155 Тема 13. Він також вважав що багатство створюється в процесі виробництва а розподіл праці конкуренція продуктивність праці ринок підвищують ефективність виробництва.
48104. СУТЬ БІРЖІ ТА ЇЇ ЕКОНОМІЧНА ПРИРОДА 383.5 KB
  СУТЬ БІРЖІ ТА ЇЇ ЕКОНОМІЧНА ПРИРОДА Роль та місце біржі в економіці Суть біржі та її економічна природа Функції та характерні ознаки біржової торгівлі Види бірж 1. Роль та місце біржі в економіці Етимологiчно поняття бiржа походить вiд грецького слова “byrz†що в перекладі означає сýма гаманець. Три основних значення біржі: об’єднання комерційних посередників Місце торгівлі; гуртовий ринок. Суть біржі та її економічна природа Біржа – це постійно діючий ринок масових замінних цінностей який функціонує за визначеними...
48105. ІСТОРІЯ УКРАЇНИ. ОПОРНИЙ КОНСПЕКТ ЛЕКЦІЙ 712 KB
  Латигіна доцент кандидат політичних наук Навчальнометодичне видання Історія України Опорний конспект лекцій Запропонований студентам Київського національного торговельноекономічного університету опорний конспект лекцій з курсу Історія України розроблено відповідно до його програми.Стародавня історія України.
48106. Психологія і педагогіка як наука про людину, її світ і діяльність 1.03 MB
  Педагогіка як наука про навчання і виховання людини. Психологія як наука про людину її світ і діяльність Психологія наука і система знань про закономірності механізми психічні факти і явища в житті людини. Протиріччя внутрішнього і зовнішнього в психіці людини розв'язуються через рухи дії і вчинки що виражають ставлення людини до інших людей природи й суспільства. Зміст і динамічну характеристику стосунків людини слід шукати в її мотивах потребах меті якої вона прагне а також у властивостях темпераменту характеру і здібностях.
48107. НАВЧАЛЬНО-МЕТОДИЧНЕ ЗАБЕЗПЕЧЕННЯ. РЕГІОНАЛЬНА ЕКОНОМІКА 2.25 MB
  Реформування економіки України на ринкових засадах вимагає не тільки суттєвих трансформацій у механізмах державного регулювання у інституційному середовищі у виробничій фінансовокредитній податковій бюджетній законодавчій системах України але й відповідних змін на регіональному рівні у соціальноекономічному житті регіонів. Це значно актуалізує значення регіональних аспектів розвитку України. Предмет регіональної економіки охоплює регіональні аспекти державної економічної політики економіки виробництва трудової та фінансової...
48108. Судово-бухгалтерська експертиза 337.5 KB
  Теоретичні основи судовобухгалтерської експертизи Сутність судовобухгалтерської експертизи та її місце в юридичній та економічній науках. Особливості судовобухгалтерської експертизи. Класифікація судовобухгалтерської експертизи. Предмет та обєкти судовобухгалтерської експертизи.