Рефераты. Система автоматизированного анализа пространственной структуры изображений. Подсистема центроидной р...

  double h;

  int C;

  PIXEL CF;

  CF.mass=FormParam->ImArr[i][j];

  if ((CF.mass==0)||(CF.mass==140))

      return 140;  // точка не на линии  - фон цвет серый

  else

    {

      CF.x=i;

      CF.y=j;

      P=CentrMass(CF);//определить координаты центра масс

      // определить длину вектора h

      h=sqrt(pow(P.x-CF.x,2.0)+pow(P.y-CF.y,2.0));

      // вычислить кривизну для текущей точки изображения

      //*100, потому что кривизна находится в промежутке  [0;1)

      C=(h/pow(insideR,2.0)+0.005)*100;

      //C=h/insideR+0.5;

      // сохранить в массив

     }

  return C;

}


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

//   Вычисление точек фильтра

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

void  RingFiltrPoint(int insideR,int outsideR)

{

  float s;

  ClearFltArr();

  for(int i=-MASK_SIZE;i<=MASK_SIZE;i++)

  {

    for(int j=MASK_SIZE;j>=-MASK_SIZE;j--)

    {

     s=sqrt(i*i+j*j);

     if ((s<=outsideR)&&(s>=insideR))

       {

        FltArr[FltArr_index].x=i;

        FltArr[FltArr_index++].y=j;

       }

    } //for

  } //for

}


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

//   Очистка массива точек фильтра

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

void ClearFltArr(void)

{

 FltArr_index=0;

 for(int i=0;i<=MASK_SIZE*MASK_SIZE;i++)

   {

     FltArr[i].x=0;

     FltArr[i].y=0;

   }

}


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

//   Обработка изображения

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

void Imaging(int insideR,int outsideR)

{

  int C,index;


  string Name;

  AnsiString FileSafeName;


  FILE *outIm;

  // формирование имени файла

  index=AnsiPos(ExtractFileExt(FormParam->OpenDialog1->FileName),

                       ExtractFileName(FormParam->OpenDialog1->FileName));

  Name = ExtractFileName(FormParam->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)+".rlx";


  outIm=fopen(FileSafeName.c_str(),"wb"); // открываем бинарный файл

  fwrite(&FormParam->Width,sizeof(FormParam->Width),1, outIm);//ширина изображения

  fwrite(&FormParam->Height,sizeof(FormParam->Height),1, outIm);//ширина изображения

  // вычисляем точки фильтра

  RingFiltrPoint(insideR,outsideR);

  for (int i=outsideR;i<FormParam->Width-outsideR;i++)

   {

    for (int j=outsideR;j<FormParam->Height-outsideR;j++)

     {

      FormParam->CrArr[i][j]=CentroidRelax(i,j,insideR,outsideR);

      FormParam->bmp->Canvas->Pixels[i][FormParam->Height-outsideR-j]=FormParam->CrArr[i][j]; // debug

      }

   }

  // сохранение результатов в файл

  for (int i=0;i<FormParam->Width;i++)

   {

    for (int j=0;j<FormParam->Height;j++)

     {

     fwrite(&FormParam->CrArr[i][j],sizeof(FormParam->CrArr[i][j]),1, outIm);//

     }

   }

   fclose(outIm);

}


П.1.5 Файл «CentriodRelax.h»

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


#ifndef CentroidRelaxH

#define CentroidRelaxH

#include <Math.h>

#include <fstream.h>

#include <ExtCtrls.hpp>

typedef struct

{

  int mass;

  int x;

  int y;

} PIXEL;

typedef struct

{

  int x;

  int y;

} COORDINATE;


//function

//int CentroidRelax(PIXEL CF);

int CentroidRelax(int i,int j,int insideR,int outsideR) ;

void Imaging(int insideR,int outsideR);


#endif


П.1.6. Файл «Seria.cpp»

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


#include <vcl.h>

#pragma hdrstop


#include "seria.h"

#include "ParamCentroid.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TFormSeria *FormSeria;

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

__fastcall TFormSeria::TFormSeria(TComponent* Owner)

        : TForm(Owner)

{

}


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

//  обработка нажатия кнопки -ОК

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

void __fastcall TFormSeria::Button1Click(TObject *Sender)

{

  if (seria)

    {

     FormParam->exp=StrToInt(EditExp->Text);

     FormParam->step=StrToInt(EditStep->Text);

     }

  FormSeria->Hide();

}


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

//  обработка CheckBox1 - разрешить серию вычислений

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

void __fastcall TFormSeria::CheckBox1Click(TObject *Sender)

{

 if (CheckBox1->Checked)

   {

    seria=true;

    this->Label1->Enabled=true;

    this->Label2->Enabled=true;

    this->UpDownExp->Enabled=true;

    this->EditExp->Enabled=true;

    this->UpDownStep->Enabled=true;

    this->EditStep->Enabled=true;

    }

 else

   {

    seria=false;

    this->Label1->Enabled=false;

    this->Label2->Enabled=false;

    this->UpDownExp->Enabled=false;

    this->EditExp->Enabled=false;

    this->UpDownStep->Enabled=false;

    this->EditStep->Enabled=false;

    FormParam->exp=0;

    FormParam->step=0;

    }


}


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

//  Создание формы

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

void __fastcall TFormSeria::FormCreate(TObject *Sender)

{

    this->Label1->Enabled=false;

    this->Label2->Enabled=false;

    this->UpDownExp->Enabled=false;

    this->EditExp->Enabled=false;

    this->UpDownStep->Enabled=false;

    this->EditStep->Enabled=false;

}

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



П.1.7. Файл «Seria.h»

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


#ifndef seriaH

#define seriaH

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

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

class TFormSeria : public TForm

{

__published:         // IDE-managed Components

        TButton *Button1;

        TLabel *Label1;

        TLabel *Label2;

        TEdit *EditExp;

        TUpDown *UpDownExp;

        TEdit *EditStep;

        TUpDown *UpDownStep;

        TCheckBox *CheckBox1;

        void __fastcall Button1Click(TObject *Sender);

        void __fastcall CheckBox1Click(TObject *Sender);

        void __fastcall FormCreate(TObject *Sender);

private:        // User declarations

public:                  // User declarations

        bool seria; // true - серия

        __fastcall TFormSeria(TComponent* Owner);

};

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

extern PACKAGE TFormSeria *FormSeria;

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

#endif


ПРИЛОЖЕНИЕ 2

 

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

При запуске программы, появляется главное окно, представленное на рис. П.2.1.


Главное окно программы

Рис. П.2.1

 

При нажатии на кнопку «Открыть» появляется диалог, представленный на рис. П.2.2.

Диалог «Отрыть»

Рис. П.2.2

При выборе файла в заголовке главного окна программы отображается имя открытого файла и кнопка «Релаксация » становится доступной (см рис. П.2.3).


Главное окно программы после открытия файла

Рис. П.2.3

 

При нажатии на кнопку «Серия» появляется диалог, представленный на рис. П.2.4.


Диалог «Серия»

Рис. П.2.4

При нажатии на кнопку  «О программе…» появляется сообщение о версии программы и разработчике, представленное на рис. П.2.5.


Сообщение «О программе…»

Рис. П.2.5

 

Результаты релаксации изображения сериями кольцевых фильтров  представлены на рис. П.2.6 – П.2.26.  Изображения получены используя следующие  параметры:

Максимальное кольцо:

– внешний радиус – 24 пиксела;

– внутренний радиусами – 20 пиксела.

Минимальное кольцо:

– внешний радиус – 5 пикселов;

– внутренний радиусами – 1 пиксел.

Шаг изменения колец – 1 пиксел.

 

Исходное изображение

Рис. П.2.6

Изображение, обработанное  кольцевым фильтром Rвнеш=24, Rвнутр=20

 

 

 

 

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.