14755

ФИЛЬТРАЦИЯ ИЗОБРАЖЕНИЯ ОТ ИМПУЛЬСНЫХ ПОМЕХ

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

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

Лабораторная лабота №3 фильтрация изображения от импульсных помех Цель работы: фильтрация изображения от импульсных помех. Задание: Составить программу выполняющую фильтрацию изображения от импульсных помех методами функции рассеяния точки H1 H4 Код про...

Русский

2013-06-09

716.04 KB

5 чел.

Лабораторная лабота №3

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

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

Задание:

Составить программу, выполняющую фильтрацию изображения от импульсных помех методами функции рассеяния точки (H1 – H4)

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

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;

using System.IO;

namespace lab3

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       

       public int[,] h1 = new int[,] { { 1, 1, 1 }, { 1, 2, 1 }, { 1, 1, 1 } };

       public int[,] h2 = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };

       public int[,] h3 = new int[,] { { 1, 2, 1 }, { 2, 4, 2 }, { 1, 2, 1 } };

       public int[,] h4 = new int[,] { { 2, 1, 2 }, { 1, 2, 1 }, { 2, 1, 2 } };

       public int k1 = 10, k2 = 9, k3 = 16, k4 = 14;

       public string path;

       public Bitmap bmpOrig, bmpNoised, bmpH1, bmpH2, bmpH3, bmpH4;

       public Color[,] clr = new Color[3, 3];

       public int r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4;

       private void Form1_Load(object sender, EventArgs e)

       {

           

       }

       //

       //

       private void DPF()

       {

           bmpH1 = new Bitmap(bmpNoised);

           bmpH2 = new Bitmap(bmpNoised);

           bmpH3 = new Bitmap(bmpNoised);

           bmpH4 = new Bitmap(bmpNoised);

           for( int x = 1; x < bmpNoised.Width - 1; x++)

               for (int y = 1; y < bmpNoised.Height - 1; y++)

               {

                   clr[0,0] = bmpNoised.GetPixel(x - 1, y - 1);

                   clr[0,1] = bmpNoised.GetPixel(x - 1, y);

                   clr[0,2] = bmpNoised.GetPixel(x - 1, y + 1);

                   clr[1,0] = bmpNoised.GetPixel(x, y - 1);

                   clr[1,1] = bmpNoised.GetPixel(x, y);

                   clr[1,2] = bmpNoised.GetPixel(x, y + 1);

                   clr[2,0] = bmpNoised.GetPixel(x + 1, y - 1);

                   clr[2,1] = bmpNoised.GetPixel(x + 1, y);

                   clr[2,2] = bmpNoised.GetPixel(x + 1, y + 1);

                   r1 = (clr[0, 0].R * h1[0, 0] + clr[0,1].R * h1[0, 1] +

                       clr[0, 2].R * h1[0, 2] + clr[1, 0].R * h1[1, 0]+

                       clr[1, 1].R * h1[1, 1] + clr[1, 2].R * h1[1, 2]+

                       clr[2, 0].R * h1[2, 0] + clr[2, 1].R * h1[2, 1]+

                       clr[2, 2].R * h1[2, 2]) / k1;

                   g1 = (clr[0, 0].G * h1[0, 0] + clr[0, 1].G * h1[0, 1] +

                       clr[0, 2].G * h1[0, 2] + clr[1, 0].G * h1[1, 0] +

                       clr[1, 1].G * h1[1, 1] + clr[1, 2].G * h1[1, 2] +

                       clr[2, 0].G * h1[2, 0] + clr[2, 1].G * h1[2, 1] +

                       clr[2, 2].G * h1[2, 2]) / k1;

                   b1 = (clr[0, 0].B * h1[0, 0] + clr[0, 1].B * h1[0, 1] +

                       clr[0, 2].B * h1[0, 2] + clr[1, 0].B * h1[1, 0] +

                       clr[1, 1].B * h1[1, 1] + clr[1, 2].B * h1[1, 2] +

                       clr[2, 0].B * h1[2, 0] + clr[2, 1].B * h1[2, 1] +

                       clr[2, 2].B * h1[2, 2]) / k1;

                   

                   r2 = (clr[0, 0].R * h2[0, 0] + clr[0, 1].R * h2[0, 1] +

                       clr[0, 2].R * h2[0, 2] + clr[1, 0].R * h2[1, 0] +

                       clr[1, 1].R * h2[1, 1] + clr[1, 2].R * h2[1, 2] +

                       clr[2, 0].R * h2[2, 0] + clr[2, 1].R * h2[2, 1] +

                       clr[2, 2].R * h2[2, 2]) / k2;

                   g2 = (clr[0, 0].G * h2[0, 0] + clr[0, 1].G * h2[0, 1] +

                       clr[0, 2].G * h2[0, 2] + clr[1, 0].G * h2[1, 0] +

                       clr[1, 1].G * h2[1, 1] + clr[1, 2].G * h2[1, 2] +

                       clr[2, 0].G * h2[2, 0] + clr[2, 1].G * h2[2, 1] +

                       clr[2, 2].G * h2[2, 2]) / k2;

                   b2 = (clr[0, 0].B * h2[0, 0] + clr[0, 1].B * h2[0, 1] +

                       clr[0, 2].B * h2[0, 2] + clr[1, 0].B * h2[1, 0] +

                       clr[1, 1].B * h2[1, 1] + clr[1, 2].B * h2[1, 2] +

                       clr[2, 0].B * h2[2, 0] + clr[2, 1].B * h2[2, 1] +

                       clr[2, 2].B * h2[2, 2]) / k2;

                   r3 = (clr[0, 0].R * h3[0, 0] + clr[0, 1].R * h3[0, 1] +

                       clr[0, 2].R * h3[0, 2] + clr[1, 0].R * h3[1, 0] +

                       clr[1, 1].R * h3[1, 1] + clr[1, 2].R * h3[1, 2] +

                       clr[2, 0].R * h3[2, 0] + clr[2, 1].R * h3[2, 1] +

                       clr[2, 2].R * h3[2, 2]) / k3;

                   g3 = (clr[0, 0].G * h3[0, 0] + clr[0, 1].G * h3[0, 1] +

                       clr[0, 2].G * h3[0, 2] + clr[1, 0].G * h3[1, 0] +

                       clr[1, 1].G * h3[1, 1] + clr[1, 2].G * h3[1, 2] +

                       clr[2, 0].G * h3[2, 0] + clr[2, 1].G * h3[2, 1] +

                       clr[2, 2].G * h3[2, 2]) / k3;

                   b3 = (clr[0, 0].B * h3[0, 0] + clr[0, 1].B * h3[0, 1] +

                       clr[0, 2].B * h3[0, 2] + clr[1, 0].B * h3[1, 0] +

                       clr[1, 1].B * h3[1, 1] + clr[1, 2].B * h3[1, 2] +

                       clr[2, 0].B * h3[2, 0] + clr[2, 1].B * h3[2, 1] +

                       clr[2, 2].B * h3[2, 2]) / k3;

                  

                   r4 = (clr[0, 0].R * h4[0, 0] + clr[0, 1].R * h4[0, 1] +

                       clr[0, 2].R * h4[0, 2] + clr[1, 0].R * h4[1, 0] +

                       clr[1, 1].R * h4[1, 1] + clr[1, 2].R * h4[1, 2] +

                       clr[2, 0].R * h4[2, 0] + clr[2, 1].R * h4[2, 1] +

                       clr[2, 2].R * h4[2, 2]) / k4;

                   g4 = (clr[0, 0].G * h4[0, 0] + clr[0, 1].G * h4[0, 1] +

                       clr[0, 2].G * h4[0, 2] + clr[1, 0].G * h4[1, 0] +

                       clr[1, 1].G * h4[1, 1] + clr[1, 2].G * h4[1, 2] +

                       clr[2, 0].G * h4[2, 0] + clr[2, 1].G * h4[2, 1] +

                       clr[2, 2].G * h4[2, 2]) / k4;

                   b4 = (clr[0, 0].B * h4[0, 0] + clr[0, 1].B * h4[0, 1] +

                       clr[0, 2].B * h4[0, 2] + clr[1, 0].B * h4[1, 0] +

                       clr[1, 1].B * h4[1, 1] + clr[1, 2].B * h4[1, 2] +

                       clr[2, 0].B * h4[2, 0] + clr[2, 1].B * h4[2, 1] +

                       clr[2, 2].B * h4[2, 2]) / k4;

                   bmpH1.SetPixel(x, y, Color.FromArgb(r1, g1, b1));

                   bmpH2.SetPixel(x, y, Color.FromArgb(r2, g2, b2));

                   bmpH3.SetPixel(x, y, Color.FromArgb(r3, g3, b3));

                   bmpH4.SetPixel(x, y, Color.FromArgb(r4, g4, b4));

               }

       }

       //

       private void openFileToolStripMenuItem_Click(object sender, EventArgs e)

       {

           OpenFileDialog dialog = new OpenFileDialog();

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

           if (dialog.ShowDialog() == DialogResult.OK)

           {

               this.path = dialog.FileName;

               bmpOrig = new Bitmap(this.path);

               pictureBox1.Image = bmpOrig;

           }

       }

       private void makeSomeNoiseToolStripMenuItem_Click(object sender, EventArgs e)

       {

           Random rand = new Random();

           bmpNoised = new Bitmap(bmpOrig);

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

           {

               int rx = rand.Next(bmpNoised.Width);

               int ry = rand.Next(bmpNoised.Height);

               if ((rx != 0) && (rx != bmpNoised.Width-1) && (ry != 0) && (ry != bmpNoised.Height-1))

                   bmpNoised.SetPixel(rx, ry, Color.White);

               else

                   i--;

           }

           pictureBox2.Image = bmpNoised;

           pictureBox2.Refresh();

       }

       private void filterItToolStripMenuItem_Click(object sender, EventArgs e)

       {

           DPF();

           pictureBox3.Image = bmpH1;

           pictureBox3.Refresh();

           pictureBox4.Image = bmpH2;

           pictureBox4.Refresh();

           pictureBox5.Image = bmpH3;

           pictureBox5.Refresh();

           pictureBox6.Image = bmpH4;

           pictureBox6.Refresh();

       }

   }

}

Работа программы:

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


 

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

11083. Метеорологические и агрометеорологические чрезвычайные ситуации 155.5 KB
  Метеорологические и агрометеорологические чрезвычайные ситуации Опасное метеорологическое явление это природное явление возникающее в атмосфере под действием различных природных факторов или их совокупности могущее оказать поражающее воздействие на людей орга
11084. Морские гидрологические, гидрологические и гидрогеологические чрезвычайные ситуации 18.85 KB
  Морские гидрологические гидрологические и гидрогеологические чрезвычайные ситуации Морские гидрологические опасные явления Тропический циклон циклон образовавшийся в тропических широтах атмосферный вихрь с пониженным атмосферным давлением в центре. В отличи...
11085. Природные пожары. Поражения сельскохозяйственных растений болезнями и вредителями 23.19 KB
  Природные пожары. Поражения сельскохозяйственных растений болезнями и вредителями Природные пожары. Природные пожары: лесные пожары; пожары степных и хлебных массивов; торфяные пожары; подземные пожары горючих ископаемых. Лесные пожары опасны ...
11086. Общая характеристика чрезвычайных ситуаций техногенного характера, классификация. Пожары, взрывы на объектах экономики. Способы прекращения огня 23.35 KB
  Общая характеристика чрезвычайных ситуаций техногенного характера классификация. Пожары взрывы на объектах экономики. Способы прекращения огня. Чрезвычайные ситуации техногенного характера Техногенные чрезвычайные ситуации связаны с производственной деятельн...
11087. Чрезвычайные ситуации на транспорте 28.73 KB
  Чрезвычайные ситуации на транспорте Особенности аварий на транспорте Значительное число техногенных катастроф происходит на транспорте. Транспорт является важнейшим связующим звеном частей любой страны звеном современного многоотраслевого хозяйства. Транспо...
11088. Аварии с выбросом (угрозой выброса) аварийно химических опасных веществ (АХОВ) 84.16 KB
  Аварии с выбросом угрозой выброса аварийно химических опасных веществ АХОВ Предприятия в городе использующие опасные химические вещества: металлургический завод машиностроительный завод коммунальное хозяйство кондитерская фабрика пивной зав
11089. Аварии с выбросом (угрозой выброса) радиоактивных веществ 183.84 KB
  Аварии с выбросом угрозой выброса радиоактивных веществ Внимание Радиация не имеет запаха цвета вкуса. Радиационноопасный объект РОО объект на котором хранят перерабатывают используют или транспортируют радиоактивные вещества при аварии на котором или его р...
11090. Аварии с выбросом (угрозой выброса) биологических опасных веществ. Гидродинамические аварии. Аварии на коммунальных системах жизнеобеспечения 109.62 KB
  Аварии с выбросом угрозой выброса биологических опасных веществ. Гидродинамические аварии. Аварии на коммунальных системах жизнеобеспечения. Аварии с выбросом биологических опасных веществ Предприятия использующие в производственных процессах различные веществ
11091. Чрезвычайные ситуации экологического характера 192.24 KB
  Чрезвычайные ситуации экологического характера Нарушение экологического равновесия Экология это наука о взаимоотношениях живых организмов между собой и с окружающей средой. Все элементы живой и неживой природы влияют на состояние и жизнедеятельность друг друг...