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();

       }

   }

}

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

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


 

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

262. Определение роли PR-средств в продюсировании музыкальных коллективов 369 KB
  Рассмотреть шоу-бизнес как основу массовой культуры. Проанализировать структуры и разновидности PR. Ознакомиться с группой Smile Band как с примером коммерческого музыкального коллектива. Разработать стратегию продюсирования группы Smile Band на лето и осень 2011 года.
263. Алкоголизм и наркомания как негативные социальные явления, отрицательно влияющие на сознание и волю личности 490.5 KB
  Исследование алкоголизма и наркомании на основе изучения основных направлений совершенствования системы уголовно-правовых норм, предусматривающих ответственность за преступления, совершенные в состоянии опьянения. Криминологические особенности лиц, совершивших преступления в состоянии опьянения.
264. Электронные таблицы Excel, оформление документов в текстовом редакторе Word 479 KB
  Описание методики табуляции функции, построения графиков в Excel и результаты работы. Построение списка (однотабличной базы данных) в Excel и результаты работы с ним. Теоретический обзор MS Word и методы его функционирования.
265. Расчет цилиндрически-червячного редуктора 261 KB
  Определение общего передаточного отношения механизма от двигателя до выходного вала. Предварительный выбор электродвигателя. Построение кинематической схемы механизма. Расчет геометрии цилиндрического прямозубого колеса.
266. Финансирование бюджетных учреждений сферы дошкольного образования на примере Муниципального дошкольного образовательного учреждения детский сад комбинированного вида № 185 Росинка 420.5 KB
  Экономическая сущность и основы деятельности бюджетных учреждений сферы дошкольного образования. Характеристика деятельности бюджетной организации МДОУ Детский сад № 185. Основные направления совершенствования финансирования и деятельности бюджетного учреждения сферы дошкольного образования.
267. Защита информации по паролю в WinWord и WinRar. Системы восстановления паролей AOPR и ARPR 419.5 KB
  Определить правильный пароль, запрашиваемый программой break00.exe – любыми доступными средствами. Определить ожидаемое время подбора пароля при силовой атаке. Определить пароль доступа к архивному файлу.
268. Тяговые и скоростные свойства автомобиля ПАЗ-3205 179.1 KB
  Расчет и построение внешней скоростной характеристики двигателя. Расчет сил тяги и сопротивления движению. Построение динамического паспорта автомобиля. Графики разгона с переключением передач. Время разгона на участках пути 400 и 1000 м.
269. Мировые информационные ресурсы, лекции 561 KB
  Протокол обмена гипертекстовой информацией HTTP. Основные организационные структуры, координирующие работу Internet. Правовое регулирование информационных отношений в сети Интернет. Обзор поисковых систем Интернета. Государственная система научно-технической информации.
270. Проектирование системы автоматического управления поливальной машины 271.56 KB
  Определение элементной базы и расчет передаточных функций выбранных форсунки и датчика расхода. Деление ЛСУ на изменяемую и неизменяемую части. Расчет тахометрического датчика расхода. Построение логарифмических характеристик САУ.