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

}

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

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


 

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

46779. Индустриализация и коллективизация 30.17 KB
  Объясняла кризис просчетами партийно-государственного руководства неверной налоговой ценовой инвестиционной политикой выступала против применения чрезвычайных мер весной 1929 года за стабилизацию положения в сельском хозяйстве на основе рыночных методов постепенное развертывание крупных коллективных зерновых хозяйств сравнительно умеренные темпы индустриализации на основе сбалансированного подъема тяжелой и легкой промышленности маневрирование и др. считали кризис неизбежным результатом ускоренной индустриализации при отсутствии...
46780. Государственное регулирование рыночной экономики 32.09 KB
  Многовековой опыт рыночного хозяйствования развитых стран мира многими интерпретируется как последовательное воплощение принципа свободы предпринимательства. И как аксиома предполагается предпочтительность экономического порядка
46781. Защита экологических прав граждан в судах общей юрисдикции 30.25 KB
  Особенности правового режима животного мира Юридическое понятие животного мира определено в Федеральном законе О животном мире. Отношения в области охраны и использования объектов животного мира содержащихся в полувольных условиях или искусственно созданной среде обитания в целях сохранения ресурса и генетического фонда объектов животного мира и в иных научных и воспитательных целях регулируются названным Федеральным законом другими федеральными законами и иными нормативными правовыми актами РФ а также законами и нормативными правовыми...
46783. Экономический рост – обобщающий результат функционирования национальной экономики 31.64 KB
  Экономическая наука выделяет два основных типа экономического роста: экстенсивный и интенсивный. Главное здесь совершенствование технологии производства повышение основных факторов производства. В экономической теории существуют два основных типа равновесных моделей экономического роста: неоклассические и неокейнсианские. В макроэкономической теории выделяются два основных типа равновесных траекторий экономического роста: устойчивые и неустойчивые.
46786. Imperative sentences 30.5 KB
  Impertive sentences express commnds which convey the desire of the speker to mke someone generlly the listener perform n ction. Besides commnds proper impertive sentences my express prohibition request n invittion wrning persusion etc. Be quick Formlly commnds re mrked by the predicte verb in the impertive mood positive or negtive the reference to the second person lck of subject nd the use of the uxiliry do in negtive in emphtic sentences with the verb to be. Commnds re generlly chrcterized by the flling tone lthough the rising...