14759

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

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

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

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

Русский

2013-06-09

1.41 MB

21 чел.

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

Задание:

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

  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 одновременно:

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


 

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

21455. Системы линейных дифференциальных уравнений 293 KB
  Системы линейных дифференциальных уравнений. Напомним что достаточными условиями существования и единственности решения системы обыкновенных дифференциальных уравнений 1 удовлетворяющего начальным условиям 2 являются: непрерывность всех функций в окрестности начальных значений; выполнение условия Липшица для всех...
21456. Системы линейных дифференциальных уравнений с постоянными коэффициентами 282 KB
  Системы линейных дифференциальных уравнений с постоянными коэффициентами. Итак общее решение однородной системы 1 имеет вид 6 причем векторы 7 частные решения системы 1 которые могут быть получены следующим образом. Итак решения линейно...
21457. Матричная экспонента 394 KB
  а – матрица j – й столбец которой есть решение системы 1а с начальными условиями т. матрица имеет вид и удовлетворяет уравнению Тогда вектор t – решение системы 1а с начальным условием может быть записан в виде т. Запишем теперь jе решение уравнения 1а удовлетворяющее начальному условию где – диагональная матрица вектор столбец коэффициентов и положим где – матрица коэффициентов . Теперь окончательно имеем...
21458. Спектральные приборы 519 KB
  различаются методами спектрометрии приёмниками излучения исследуемым рабочим диапазоном длин волн и др. Форма отверстия в равномерно освещенном экране 1 соответствует функции f описывающей исследуемый спектр распределение энергии излучения по длинам волн . группа 2 информация об исследуемом спектре получается путём одновременной регистрации без сканирования по  несколлькими приёмниками потоков излучения разных длин волн ’ ’’ ’’’ .
21459. Управление света светом 870.5 KB
  ставит очень амбициозную задачу создание устройств выполняющих функции управления характеристиками оптического излучения с помощью другого оптического излучения. Предлагается воспользоваться свойствами поляризованного электромагнитного оптического излучения а именно использовать эффект оптического гашения который описан например в [3]. 1 Если четвертьволновую пластинку P1 установить так чтобы её быстрая ось была ориентирована под углом к оси OX то для излучения прошедшего через пластинку P1 получим = 1 = . 2 Согласно [4]...
21460. Применение лазерного излучения для управления движением атомами и ионами 789.5 KB
  Этот эффект называется охлаждением атомов давлением лазерного излучения. Методы позволяющие с помощью лазерного излучения охлаждать атомы основаны на эффекте вязкой жидкости оптическая патока в которой атомы медленно перемещаются. При охлаждении вещества его энергия и энтропия понижаются поэтому процесс охлаждения возможен если энергия и энтропия излучения после взаимодействия с веществом повышаются.
21461. Лазерный пинцет 957 KB
  Сила с которой свет действует на окружающие объекты невелика но ее оказывается достаточно чтобы ловить и контролируемо перемещать частицы размером от 10 нм до 10 мкм. В дальнейшем Эшкин и его коллеги продемонстрировали возможности оптической ловушки на основе инфракрасного лазера захватывать удерживать и перемещать в пространстве различные биологические объекты такие как вирусные частицы одиночные бактериальные и дрожжевые клетки и органеллы в живых клетках водорослей. Как будет вести себя частица в поле после Пишейпера В случаях...
21462. Прецизионные волоконно-оптические датчики 333 KB
  100 Мрад Последовательного и параллельного типа Распределение температуры и деформации Обратное рассеяние Релея Интенсивность обратного рассеяния Релея Многомодовое Разрешающая способность 1 м Условия реализации волоконных датчиков связаны с наличием оптической комплектации: оптическое волокно в различных спектральных диапазонах. Соединительные и разделительные фильтры Многослойники дифракционные решетки; модуляторы интенсивности на основе электрооптического эффекта ниобат лития обладающий электрооптическими свойствами которые...
21463. Импульсный оптический рефлектометр 479 KB
  Введение Импульсные оптические рефлектометры OTDR Opticl Time Domin Reflectometer различных типов широко используются практически на всех этапах создания волоконнооптических систем связи: от производства волокна и оптического кабеля до строительства волоконнооптических линий связи ВОЛС и их эксплуатации. Измерять средние потери оптического волокна на катушках равномерность распределения потерь в волокне и выявлять наличие локальных дефектов при производстве волокна. Обнаруживать постепенное или внезапное ухудшение качества волокна...