51344

Фильтрация

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

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

Цель работы: Написать программу, осуществляющую фильтрацию изображения по заданной в программе маске (с возможностью редактирования пользователем). Изображение открывается через диалог открытия файла с расширением .bmp.

Русский

2014-02-09

459 KB

12 чел.

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

Фильтрация

Выполнил: Шуклецов М.А.

 ФРТ, гр. 2106

Цель работы: Написать программу, осуществляющую фильтрацию изображения по заданной в программе маске (с возможностью редактирования пользователем). Изображение открывается через диалог открытия файла с расширением *.bmp.

При выполнении лабораторной работы, я за исходное изображение взял:

 

Общий вид программы следующий:

Здесь мы видим следующие элементы управления:

«Матрица фильтрации» – та матрица, на которую умножается специальным алгоритмом

рамка 3х3 изображения передвигающаяся по изображению.

«Фильтрация» - Кнопка, совершающая описанное выше действие.

«Вернуть изображение» - кнопка, созданная для удобства загрузки изображения и дальнейшего повторения операции.

«Выбрать файл» - через OpenDialog мы выбираем изображение, путь к которому отображается в окне Edit.

Алгоритм фильтрации:

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

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

}

//---------------------------------------------------------------------------

Graphics::TBitmap* pBitmap1 = new Graphics::TBitmap();

byte arrayY[800][600], *ptr;     //создание аххива под изображение

static inline byte CLAMP(int x)     //функция обрезания полученных

{ return ((x > 255) ? 255 : ((x < 0) ? 0 : x)); }   //значении цвета в пределах 0…255

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)  //заполнение матрицы произвольными 

{        //числами

int i,j;

randomize();

for(i=0; i<3;i++)

  {

       for(j=0; j<3;j++)

       {

       StringGrid1->Cells[i][j] = IntToStr(random(10)-4);

       }

  }

       

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)  //Кнопка «Выбрать файл»

{

if(OpenDialog1->Execute())

{

  Edit1->Text=OpenDialog1->FileName;

  pBitmap1->LoadFromFile(Edit1->Text);

}

 Image1->Left=0;

Image1->Top=0;

Image1->Width=pBitmap1->Width;

Image1->Height=pBitmap1->Height;

Image1->Picture->Assign(pBitmap1);

int x, y;

for(y=0; y < pBitmap1->Height; y++)  //цикл считывания изображения в заранее

 {      //созданный массив

   ptr=(Byte*)pBitmap1->ScanLine[y];  

   for(x=0; x < pBitmap1->Width; x++)

       {

       arrayY[x][y] = *(ptr + x);   //запись соответствующего значения в матрицу

       }

 }

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int x, y;

for (y=1 ; y<(pBitmap1->Width)-1; y++)

{

for (x=1; x<(pBitmap1->Height)-1; x++)

 {arrayY[x][y]=arrayY[x-1][y-1]*StrToInt(StringGrid1->Cells[0][0])+ //Собственно сам алгоритм

 arrayY[x][y-1]*StrToInt(StringGrid1->Cells[1][0])+   //представленный выше 

 arrayY[x+1][y-1]*StrToInt(StringGrid1->Cells[2][0])+   

 arrayY[x-1][y]*StrToInt(StringGrid1->Cells[0][1])+   

 arrayY[x-1][y+1]*StrToInt(StringGrid1->Cells[0][2])+

 arrayY[x+1][y+1]*StrToInt(StringGrid1->Cells[2][2])+    

 arrayY[x][y+1]*StrToInt(StringGrid1->Cells[1][2])+

 arrayY[x+1][y]*StrToInt(StringGrid1->Cells[2][1])+

 arrayY[x][y]*StrToInt(StringGrid1->Cells[1][1]);

 arrayY[x][y] = CLAMP(arrayY[x][y]);     //функция описана выше

 }

}

for(y=0; y < pBitmap1->Height; y++)   //цикл перезаписывающий изображение

 {       //из полученной матрицы чисел

   ptr=(Byte*)pBitmap1->ScanLine[y];

   for(x=0; x < pBitmap1->Width; x++)

    {

       *(ptr + x) = arrayY[x][y];

       }

    }

 Image1->Picture->Assign(pBitmap1);   //вывод изображения из памяти в Image1

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)  //кнопка «Вернуть изображение»

{

 pBitmap1->LoadFromFile(Edit1->Text);

 Image1->Left=0;

Image1->Top=0;

Image1->Width=pBitmap1->Width;

Image1->Height=pBitmap1->Height;

Image1->Picture->Assign(pBitmap1);

}

//---------------------------------------------------------------------------

Вывод: Мы посмотрели алгоритм наложения на изображение фильтров.


 

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

10050. Ключевые системы потоковых шифров. Жизненный цикл ключей 29.5 KB
  Ключевые системы потоковых шифров. Жизненный цикл ключем Совокупность всех действующих в системе ключей называется ключевой информацией. Ключевые системы потоковых шифров. Множество ключевых элементов порядок их использования и закон формирования ключей из клю...
10051. Невырожденная эллиптическая кривая. Аналог протокола Диффи-Хэллмана согласования ключей 69.5 KB
  Невырожденная эллиптическая кривая над полем вычетов по модулю связана с решениями сравнения. Каждое решение сравнения называется точкой. Множество решений сравнения можно расширить таким образом что расширенное множество станет коммутатив...
10052. Редактирование фрагментов текста в MS Word 61.5 KB
  Редактирование фрагментов текста в MS Word Цель: освоить понятия гарнитура размер начертание шрифта научиться форматировать текст используя панель инструментов Форматирование и команды меню: Формат/Шрифт. Рекомендации к выполнению При создании и обработке печатн...
10053. Форматирование абзацев в MS Word 463 KB
  Форматирование абзацев в MS Word Цель: освоить понятия: выравнивание отступ и выступ междустрочный интервал и интервал между абзацами научиться форматировать абзацы используя панель инструментов Форматирование и команды меню Формат / Абзац. Рекомендации к выполнению ...
10054. Захищеність WEB-серверів Apache та IIS 124 KB
  Захищеність WEBсерверів Apache та IIS Постановка проблеми у загальному вигляді та її зв’язок із важливими науковими чи практичними завданнями На сьогодні важливим напрямком підвищення ефективності функціонування багатьох як вітчизняних так і закордонних автоматизова...
10055. Использование искусственных нейронных сетей в задачах распознавания атак на компьютерные системы 103 KB
  Использование искусственных нейронных сетей в задачах распознавания атак на компьютерные системы Статья посвящена вопросам применения искусственных нейронных сетей при разработке методов и средств защиты информации. Проведена оценка возможности использования изв...
10056. Безопасность программного обеспечения, созданного с использованием семейства технологий COM, DCOM, COM+ 132 KB
  Безопасность программного обеспечения созданного с использованием семейства технологий COM DCOM COM Введение Важнейшей предпосылкой использования технологии COM и базирующихся на ней технологий DCOM и COM является создание повторно используемых компонентов которые можн
10057. Концепція використання марківських процесів для контролю атак на програмне забезпечення комп’ютерних систем та мереж 112.5 KB
  Концепція використання марківських процесів для контролю атак на програмне забезпечення комп’ютерних систем та мереж В теперішній час забезпечення безпеки інформації що циркулює в територіально розподілених комп’ютерних системах стає одним із найбільш важливих фак...
10058. Понятие риска 34 KB
  Понятие риска. Существующая литература характеризуется неоднозначностью в трактовке черт свойств и элементов риска в понимании его содержания соотношения объективных и субъективных сторон. Разнообразие мнений о сущности риска объясняется в частности многоаспект...