21. ГОСТ 12.1.003–83. ССБТ. Шум. Общие требования безопасности (с изменениями по И-1-III-89). 22. Почерняев С.В., Килин И.В., Сенилов М.А. Методические указания по дипломному проектированию. – Ижевск: Издательство ИжГТУ, 1994. 23. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. – М.: Издательство стандартов, 1991 24. ГОСТ 19.105-78 ЕСПД. Общие требования к программным документам. – М.: Издательство стандартов, 1988 25. ГОСТ 19.401-78 ЕСПД. Текст программы. Требования к содержанию и оформлению. – М.: Издательство стандартов, 1988 26. ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению. – М.: Издательство стандартов, 1988 27. ГОСТ 19.504-79 ЕСПД. Руководство программиста. Требования к содержанию и оформлению. – М.: Издательство стандартов, 1988 28. ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению. – М.: Издательство стандартов, 1988 ПРИЛОЖЕНИЕ 1 ТЕКСТ ПРОГРАММЫ П.1.1. Файл «Relax.cpp» //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("ParamCentroid.cpp", FormParam); USEFORM("About.cpp", FormAbout); USEFORM("seria.cpp", FormSeria); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TFormParam), &FormParam); Application->CreateForm(__classid(TFormAbout), &FormAbout); Application->CreateForm(__classid(TFormSeria), &FormSeria); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //--------------------------------------------------------------------------- П.1.2. Файл «ParamCentriod.cpp» //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Seria.h" #include "ParamCentroid.h" #include "CentroidRelax.h" #include "About.h" #include <dir.h> #include <stdlib.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TFormParam *FormParam; HDC dc; //--------------------------------------------------------------------------- __fastcall TFormParam::TFormParam(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- // Открытие входного файла и подготовка его к работе //--------------------------------------------------------------------------- void __fastcall TFormParam::OpenBtnClick(TObject *Sender) { char buffer[MAXPATH]; if (OpenDialog1->Execute()) { if (ExtractFileExt(OpenDialog1->FileName)==".bmp") { OpenBMP(); RelaxBtn->Enabled=true; } else if (ExtractFileExt(OpenDialog1->FileName)==".fld") { OpenFLD(); RelaxBtn->Enabled=true; } else Application->MessageBoxA("Недопустимый тип файла", "Ошибка", MB_OK | MB_ICONEXCLAMATION); } } //--------------------------------------------------------------------------- // Обработка нажатия кнопки "О программе..." //--------------------------------------------------------------------------- void __fastcall TFormParam::AboutBtnClick(TObject *Sender) { FormAbout->Show(); } //--------------------------------------------------------------------------- // Обработка нажатия кнопки "Релаксация" //--------------------------------------------------------------------------- void __fastcall TFormParam::RelaxBtnClick(TObject *Sender) { string Name; AnsiString FileSafeName; int index; if ((insideR && outsideR)&& (insideR <= outsideR)) { for(int i=0;i<=exp;i++) { // показ имени открытого файла FormParam->Caption=ExtractFileName("Обработка изображения...."); Imaging(insideR,outsideR); // BEGIN DEBUG dc=bmp->Canvas->Handle; BitBlt(dc,0,0,Width,Height,bmp->Canvas->Handle,0,0,SRCCOPY); // формирование имени файла index=AnsiPos(ExtractFileExt(OpenDialog1->FileName),ExtractFileName(OpenDialog1->FileName)); Name = ExtractFileName(OpenDialog1->FileName).c_str(); Name = Name.substr(0,index-1); Name = Name.substr(0,4)+"_" ; //вырезать первые 4 символа FileSafeName=StrPas(Name.c_str()) + IntToStr(outsideR)+"_"+ IntToStr(insideR)+".bmp"; bmp->SaveToFile(FileSafeName); // END DEBUG insideR+=step; outsideR+=step; } // for Application->MessageBoxA("Обработка завершена", "Информация", MB_OK | MB_ICONINFORMATION); // показ имени открытого файла FormParam->Caption=ExtractFileName(OpenDialog1->FileName); } else Application->MessageBoxA("Внешний и внутренний радиусы заданы неверно", "Ошибка", MB_OK | MB_ICONEXCLAMATION); } //--------------------------------------------------------------------------- // Создание формы //--------------------------------------------------------------------------- void __fastcall TFormParam::FormCreate(TObject *Sender) { char buffer[MAXPATH]; RelaxBtn->Enabled=false; bmp=new Graphics::TBitmap; // получение текущей директории проекта OpenDialog1->InitialDir=getcwd(buffer, MAXPATH); step=0; exp=0; } //--------------------------------------------------------------------------- // Обработка ввода внешнего радиуса //--------------------------------------------------------------------------- void __fastcall TFormParam::OutsideREditChange(TObject *Sender) { outsideR=StrToIntDef(OutsideREdit->Text,0); if (outsideR==0) OutsideREdit->Text='0'; if (outsideR>=25) { Application->MessageBoxA("Значение внешнего радиуса должно быть не более 24", "Ошибка", MB_OK | MB_ICONEXCLAMATION); OutsideREdit->Text='0'; } } //--------------------------------------------------------------------------- // Обработка ввода внутреннего радиуса //--------------------------------------------------------------------------- void __fastcall TFormParam::InsideREditChange(TObject *Sender) { insideR=StrToIntDef(InsideREdit->Text,0); if (insideR==0) InsideREdit->Text='0'; if (insideR>=25) { Application->MessageBoxA("Значение внутреннего радиуса должно быть не более 24", "Ошибка", MB_OK | MB_ICONEXCLAMATION); InsideREdit->Text='0'; } } //--------------------------------------------------------------------------- // Выделение памяти массиву ImArr //--------------------------------------------------------------------------- void __fastcall TFormParam::ImArrTakeMemory( unsigned short int Width, unsigned short int Height) { if (ImArr!=NULL) { // удаляем предыдущий массив for (int i=0;i<=LastWidth;i++) delete[] ImArr[i]; delete[] ImArr; } LastWidth= Width; // выделяем память ImArr = new unsigned short int*[Width]; for (int i=0;i<=Width;i++) ImArr[i] = new unsigned short int [Height]; // обнуление массива for (int i=0;i<=Width;i++) { for (int j=0;j<=Height;j++) { ImArr[i][j]=0; } } } //--------------------------------------------------------------------------- // Выделение памяти массиву СкArr //--------------------------------------------------------------------------- void __fastcall TFormParam::CrArrTakeMemory(unsigned short int Width, unsigned short int Height) { if (CrArr!=NULL) { // удаляем предыдущий массив for (int i=0;i<=LastWidth;i++) delete[] CrArr[i]; delete[] CrArr; } LastWidth= Width; // выделяем память CrArr = new unsigned short int*[Width]; for (int i=0;i<=Width;i++) CrArr[i] = new unsigned short int [Height]; // обнуление массива for (int i=0;i<=Width;i++) { for (int j=0;j<=Height;j++) { CrArr[i][j]=0; } } } //--------------------------------------------------------------------------- // Серия //--------------------------------------------------------------------------- void __fastcall TFormParam::SeriaBtnClick(TObject *Sender) { FormSeria->Show(); } //--------------------------------------------------------------------------- // Открытие файла *.bmp //--------------------------------------------------------------------------- void TFormParam::OpenBMP() { bmp->LoadFromFile( OpenDialog1->FileName); Width=bmp->Width; Height=bmp->Height; ImArrTakeMemory(Width,Height); CrArrTakeMemory(Width,Height); // Transform coordinate for (int i=0;i<=Width;i++) { for (int j=0;j<=Height;j++) { ImArr[i][j]=bmp->Canvas->Pixels[i][bmp->Height-j]; } } // показ имени открытого файла FormParam->Caption=ExtractFileName(OpenDialog1->FileName); } //--------------------------------------------------------------------------- // Открытие файла *.fld //--------------------------------------------------------------------------- void TFormParam::OpenFLD() { FILE *InFile; void *data; //FFileName = ; if((InFile=fopen(OpenDialog1->FileName.c_str(), "rb"))==NULL) { Application->MessageBoxA("Ошибка открытия файла", "Ошибка", MB_OK | MB_ICONEXCLAMATION); } else { fread(&data,sizeof(unsigned short int),1, InFile); Width=(unsigned short int)data;//ширина изображения fread(&data,sizeof(unsigned short int),1, InFile); Height=(unsigned short int)data;// длина изображения ImArrTakeMemory(Width,Height); CrArrTakeMemory(Width,Height); for (int i=0;i<Width;i++) { for (int j=0;j<Height;j++) { fread(&data,sizeof(unsigned short int),1, InFile); ImArr[i][j]=(unsigned short int)data; } // for (j) } // for (i) // показ имени открытого файла FormParam->Caption=ExtractFileName(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- // Закрытие программы //--------------------------------------------------------------------------- void __fastcall TFormParam::FormClose(TObject *Sender, TCloseAction &Action) { //освобождаем используемую память if (Width!=0) { for (int i=0;i<=Width;i++) { delete[] ImArr[i]; delete[] CrArr[i]; } delete[] ImArr; delete[] CrArr; } delete(bmp); FormSeria->Close(); } //--------------------------------------------------------------------------- П.1.3.Файл «ParamCentriod.h» //--------------------------------------------------------------------------- #ifndef ParamCentroidH #define ParamCentroidH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Buttons.hpp> #include <Dialogs.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TFormParam : public TForm { __published: // IDE-managed Components TGroupBox *GroupRadius; TLabel *Label1; TEdit *OutsideREdit; TLabel *Label2; TEdit *InsideREdit; TBitBtn *OpenBtn; TBitBtn *RelaxBtn; TOpenDialog *OpenDialog1; TBitBtn *AboutBtn; TBitBtn *SeriaBtn; void __fastcall OpenBtnClick(TObject *Sender); void __fastcall AboutBtnClick(TObject *Sender); void __fastcall RelaxBtnClick(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall OutsideREditChange(TObject *Sender); void __fastcall InsideREditChange(TObject *Sender); void __fastcall SeriaBtnClick(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // User declarations int insideR;//внутренний int outsideR;//внешний public: // User declarations // Global variable unsigned short int **ImArr; // считанное изображение из файла *.bmp или *.mass unsigned short int **CrArr; // массив кривизны unsigned short int Width; unsigned short int Height; unsigned short int LastWidth; int step;// шаг int exp; // эксперименты Graphics::TBitmap *bmp; __fastcall TFormParam(TComponent* Owner); void __fastcall ImArrTakeMemory( unsigned short int Width,unsigned short int Height); void OpenBMP(); void OpenFLD(); void __fastcall CrArrTakeMemory(unsigned short int Width, unsigned short int Height); // выделение памяти динамическому массиву }; //--------------------------------------------------------------------------- extern PACKAGE TFormParam *FormParam; //--------------------------------------------------------------------------- #endif П.1.4.Файл «CentriodRelax.cpp» //--------------------------------------------------------------------------- #pragma hdrstop #include "ParamCentroid.h" #include "CentroidRelax.h" // definitions #define MASK_SIZE 24 #define PI 3.1415926535897932384626433832795 //--------------------------------------------------------------------------- COORDINATE FltArr[MASK_SIZE*MASK_SIZE]; // массив координат точек фильтра int FltArr_index; #pragma package(smart_init) // Piksels Filter void ClearFltArr(void); //--------------------------------------------------------------------------- // Вычисление центра масс //--------------------------------------------------------------------------- COORDINATE CentrMass(PIXEL CF) { COORDINATE P; int M=0,Wx=0,Wy=0; int Cx=0,Cy=0; // работа с маской for (int k=0;k<FltArr_index;k++) { M+= FormParam->ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y]; // масса пикселей в фильтре Wx+=(CF.x+FltArr[k].x)*FormParam->ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y]; //веса пикселей по x Wy+=(CF.y+FltArr[k].y)*FormParam->ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y];//веса пикселей по y } // масса пикселей M=M/255;
|