exp=0;
}
//---------------------------------------------------------------------------
// Обработка ввода внешнего радиуса
void __fastcall TFormParam::OutsideREditChange(TObject *Sender)
{
outsideR=StrToIntDef(OutsideREdit->Text,0);
if (outsideR==0) OutsideREdit->Text='0';
if (outsideR>=25)
// Обработка ввода внутреннего радиуса
void __fastcall TFormParam::InsideREditChange(TObject *Sender)
insideR=StrToIntDef(InsideREdit->Text,0);
if (insideR==0) InsideREdit->Text='0';
if (insideR>=25)
// Выделение памяти массиву 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 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)
delete[] CrArr[i];
delete[] CrArr;
CrArr = new unsigned short int*[Width];
CrArr[i] = new unsigned short int [Height];
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
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)
else
fread(&data,sizeof(unsigned short int),1, InFile);
Width=(unsigned short int)data;//ширина изображения
Height=(unsigned short int)data;// длина изображения
for (int i=0;i<Width;i++)
for (int j=0;j<Height;j++)
ImArr[i][j]=(unsigned short int)data;
} // for (j)
} // for (i)
// Закрытие программы
void __fastcall TFormParam::FormClose(TObject *Sender,
TCloseAction &Action)
//освобождаем используемую память
if (Width!=0)
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;
// масса пикселей по оси Ox
Wx=Wx/255;
// масса пикселей по оси Oy
Wy=Wy/255;
if (M!=0)
Cx=(int)Wx/M + 0.5;
Cy=Wy/M;
//центр масс
P.x=Cx;
P.y=Cy;
return P;
//--------------------------------------------------------------------------
// Вычисление кривизны в точке i,j
int CentroidRelax(int i,int j,int insideR,int outsideR)
{ COORDINATE P;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16