Разработка программно-математического обеспечения корреляционного совмещения изображений с использованием быстрого преобразования Фурье

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



СПб: БХВ-Петербург, 2004. 320 с.

13">Теория и практика цифровой обработки сигналов. URL:

14">Программирование на С++ Builder. URL:

Приложение

Текст модуля Unit1_log.h:

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

#ifndef Unit1_logH

#define Unit1_logH

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

">#include

">#include

">#include

">#include

">#include

">#include

">#include

">#include

">#include

//---------------------------------------------------------------------------TForm1 : public TForm

{

__published:// IDE-managed Components*OpenPictureDialog1;*RadioButton1;*GroupBox1;*Button1;*Image1;*GroupBox2;*Image5;*Image6;*Button4;*Button5;*Edit1;*Edit2;*GroupBox3;*Button2;*Button3;*Image2;*Image3;*Image4;*Label1;*Label2;*MainMenu1;*N1;*N2;*N3;*N4;*N5;*N6;*N7;*N8;*N9;*N10;*N11;*N12;*N13;*Button6;*SavePictureDialog1;*Button7;__fastcall Button1Click(TObject *Sender);__fastcall Button2Click(TObject *Sender);__fastcall Button3Click(TObject *Sender);__fastcall FormCreate(TObject *Sender);__fastcall Button4Click(TObject *Sender);__fastcall Button5Click(TObject *Sender);__fastcall N4Click(TObject *Sender);__fastcall N2Click(TObject *Sender);__fastcall N6Click(TObject *Sender);__fastcall N7Click(TObject *Sender);__fastcall N9Click(TObject *Sender);__fastcall N10Click(TObject *Sender);__fastcall N13Click(TObject *Sender);__fastcall Button7Click(TObject *Sender);__fastcall Button6Click(TObject *Sender);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

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

#endif

Текст модуля Unit1_log.cpp:

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

#include

#pragma hdrstop

#include "io.h"

#include "fcntl.h"

#include "unit1_log.h"

#include "math.h"

#include "stdio.h"

#include "Unit1_log.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;_Arr [160000];_Arr *Ptr0; // исходное РЛС-изображение_Arr *Ptr1; // Фурье-образ РЛС-изображения (A)

PBMP_Arr *Ptr2; // Фурье-образ РЛС-изображения (B)

PBMP_Arr *Ptr3; // восстановленное РЛС-изображение

typedef struct {lpal;dummy[256];

} LogPal;i_c;i_c2;kol_k;f1; char f[160000]; // исходное РЛС-изображение

long double f1_v[160000]; // восстановленное РЛС-изображение

unsigned char f1_vc[160000]; // восстановленное РЛС-изображение

unsigned char f2[160000]; // ? --

unsigned char f7[160000]; // ? массив фрагмента для контура корреляции

// Переменные для Фурье-образа РЛС

long double a1_tmp; // промежуточная переменная

long double a2_tmp; // промежуточная переменная

long double b1_tmp; // промежуточная переменная

long double b2_tmp; // промежуточная переменная

long double a_new[400][400]; // А-Фурье (РЛС)double b_new[400][400]; // В-Фурье (РЛС)char a_new_uc[400][400]; // А-Фурье (РЛС) 256грchar b_new_uc[400][400]; // В-Фурье (РЛС) 256грchar a_new_uc_tmp[160000];// А-Фурье (РЛС) 256гр - одномchar b_new_uc_tmp[160000];// В-Фурье (РЛС) 256гр - одном

// Переменные для Фурье-образа А-Д

long double a1_tmp2; // промежуточная переменная

long double a2_tmp2; // промежуточная переменная

long double b1_tmp2; // промежуточная переменная

long double b2_tmp2; // промежуточная переменная

long double a_new2[400][400]; // А-Фурье (А-Д)double b_new2[400][400]; // В-Фурье (А-Д)char a_new_uc2[400][400]; // А-Фурье (А-Д) 256грchar b_new_uc2[400][400]; // В-Фурье (А-Д) 256грchar a_new_uc_tmp2[160000];// А-Фурье (А-Д) 256гр - одномchar b_new_uc_tmp2[160000];// В-Фурье (А-Д) 256гр - одномi1, i2, i, j;char f_new[400][400];double korr_b[160000]; // коррdouble korr_b_tmp[400][400];char korr_b_uc[160000];//double korr_b_max;pik_a_x;pik_a_y;pik_b_x;pik_b_y;pik_a;pik_b;k,l;::TBitmap *Bmp0 = new Graphics::TBitmap();::TBitmap *Bmp1 = new Graphics::TBitmap();::TBitmap *Bmp2 = new Graphics::TBitmap();::TBitmap *Bmp3 = new Graphics::TBitmap();

//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)

{

//Запрещение выполнения операций до загрузки исходного РЛИ

Button2->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;

}

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{ //Окрытие исходного изображения

{(OpenPictureDialog1->Execute())->LoadFromFile(OpenPictureDialog1->FileName);->PixelFormat = pf8bit;= (PBMP_Arr *)Bmp0->ScanLine[Bmp0->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)((void *)&f[Bmp0->Width*i_c],Bmp0->ScanLine[i_c],Bmp0->Width);->Width = Bmp0->Width;->Height = Bmp0->Height;1->Canvas->Draw(0,0, Bmp0);

//разрешение выполнения операций

Button2->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;

//Загрузка исходного РЛИ в соответствующих массив

i = 0;(i1=0;i1Height;i1++)

{(i2=0;i2Width;i2++)

{(RadioButton1->Checked == True)

{_new[i1][i2] = 0x01 && f[i];[i] = 0x01 && f[i];

}

{_new[i1][i2] = f[i];2[i] = f[i];

}

i++;

}

}

}

//обработка попытки открытия изображения неподходящего формата

catch(Exception *ex)

{

MessageBox(NULL, "Выбран неверный формат изображения", "Ошибка!", MB_OK | MB_ICONERROR);

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{

//разрешение выполнения операций

Button3->Enabled=true;

Button6->Enabled=true;->Enabled=true;7->Enabled=true;

//основной цикл Фурье-преобразования

//Более подробное описание - в пояснительной записке

//к дипломному проекту

kol_k = 100;

for (k=0;kHeight;k++)

{(l=0;lWidth;l++)

{_tmp = 0;_tmp = 0;(i1=0;i1Height;i1++)

{_tmp = 0;_tmp = 0;(i2=0;i2Width;i2++)

{_tmp = a2_tmp + f_new[i1][i2]*cos(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);_tmp = b2_tmp + f_new[i1][i2]*sin(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);

}_tmp = a1_tmp + a2_tmp;_tmp = b1_tmp + b2_tmp;

}_new[k][l] = a1_tmp / Bmp0->Height / Bmp0->Width;_new[k][l] = b1_tmp * (-1) / Bmp0->Height / Bmp0->Width;

}

}= 0;(i1=0;i1Width;i2++)

{_new_uc[i1][i2] = floor(a_new[i1][i2] + 0.5);_new_uc_tmp[i] = a_new_uc[i1][i2];_new_uc[i1][i2] = floor(b_new[i1][i2] + 0.5);_new_uc_tmp[i] = b_new_uc[i1][i2];++;

}

// Вывод коэффициента A в графической форме

Bmp1->PixelFormat = pf8bit; //формат

Bmp1->Width = Bmp0->Width; //ширина

Height=Bmp0->Height;//=(PBMP_Arr*)Bmp1->ScanLine[Bmp1->Height-1];SysPal;*tempCanvas=newTCanvas;notUsed;>Handle=GetDeviceContext(notUsed);.lpal.palVersion=0x300;.lpal.palNumEntries=256;(tempCanvas->Handle,0,256,SysPal.lpal.palPalEntry);(i=0;iHandle = GetDeviceContext(notUsed);.lpal.palVersion = 0x300;.