Разработка программно-математического обеспечения корреляционного совмещения изображений с использованием быстрого преобразования Фурье
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
СПб: БХВ-Петербург, 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;.