51344

Фильтрация

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

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

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

Русский

2014-02-09

459 KB

14 чел.

Лабораторная работа 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);

}

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

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


 

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

46768. Финансы как социально-экономическая категория. Сущность и роль финансов в рыночной экономике 29.49 KB
  3осуществляется воздействие на развитие финансов в низовых структурах общества и укрепление финансового положения предприятия. Сущность финансов проявляется через их функции: 1Распределительная распределение и перераспределение общей суммы финансовых ресурсов предприятия 2Контрольная контроль за результатами финансовой деятельности предприятия процессом формирования распределения и использования финансовых ресурсов в соответствии с планами 3Регулирующая вмешательство государства через финансы в процессе воспроизводства:...
46773. Реконструкція будівель 29.5 KB
  Реконструкцію слід проводити у чіткій відповідності до проекту виконання робіт у якому розроблено методи і терміни їх виконання. Низька культура виробництва та зволікання зі строками робіт досить часто призводять до того що ще міцні будівлі у період реконструкції або після її закінчення потребують додаткового підсилення несівних конструкцій мають тріщини у стінах та інших конструкціях чи підвищену їхню вологість. Відомо два організаційнотехнологічних прийоми реконструкції: 1 виконання всіх робіт із розбирання старих конструкцій а...
46774. Расчет многофункционального контроллера МФК3000 4.46 MB
  Контроллер предназначен для измерения, контроля, регулирования, диагностики и управления производственными процессами, технологическими линиями и агрегатами средней и высокой сложности, в том числе для применения в системах противоаварийной защиты (ПАЗ).
46775. Л.С.Выготский «Проблема умственной отсталости» 29.5 KB
  Воля этот рычаг всех действий всех способностей отсутствует у умственно отсталого ребенка. Новая теория соглашается признать только две особенности отличающие интеллект слабоумного от интеллекта нормального ребенка. Тугоподвижность психических систем у отсталого ребенка при известных обстоятельствах может привести к тому что заместительная функция будет обнаруживаться не слабее а сильнее чем у нормального ребенка. Слабоумный ребенок не обнаруживает тех ступенчатых связных...
46776. The United Kingdom of Great Britain and Northern Ireland 30 KB
  The United Kingdom of Great Britain and Northern Ireland is situated on the British Isles. It consists of four parts: England, Wales, Scotland and Northern Ireland