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

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

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



lpal.palNumEntries = 256;(tempCanvas->Handle,0,256,SysPal.lpal.palPalEntry);(i=0;i<=255;i++)

{.lpal.palPalEntry[i].peRed = i; //красный канал.lpal.palPalEntry[i].peGreen = i;//зеленый канал.lpal.palPalEntry[i].peBlue = i; //синий канал

Palette=CreatePalette((consttagLOGPALETTE*)&SysPal.lpal);=(PBMP_Arr*)Bmp1->ScanLine[Bmp1->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp1->ScanLine[i_c],(void*)&a_new_uc_tmp[(Bmp1->Width)*i_c],Bmp1->Width);->Width=Bmp0->Width;->Height=Bmp0->Height;->Canvas->Draw(0,0,Bmp1);">}->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal.lpal);= (PBMP_Arr *)Bmp1->ScanLine[Bmp1->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp1->ScanLine[i_c],(void *)&a_new_uc_tmp[(Bmp1->Width)*i_c],Bmp1->Width);->Width = Bmp0->Width;->Height = Bmp0->Height;->Canvas->Draw(0,0, Bmp1);

PixelFormat = pf8bit; //формат->Width = Bmp0->Width; //ширина->Height = Bmp0->Height;//высота= (PBMP_Arr *)Bmp2->ScanLine[Bmp2->Height-1];SysPal2;*tempCanvas2 = new TCanvas;notUsed2;->Handle = GetDeviceContext(notUsed2);.lpal.palVersion = 0x300;.lpal.palNumEntries = 256;(tempCanvas2->Handle,0,256,SysPal2.lpal.palPalEntry);(i=0;iHandle,0,256,SysPal2.lpal.palPalEntry);(i=0;i<=255;i++)

{.lpal.palPalEntry[i].peRed = i; //красный канал.lpal.palPalEntry[i].peGreen = i;//зеленый канал.lpal.palPalEntry[i].peBlue = i; //синий канал

Palette=CreatePalette((consttagLOGPALETTE*)&SysPal2.lpal);=(PBMP_Arr*)Bmp2->ScanLine[Bmp2->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp2->ScanLine[i_c],(void*)&b_new_uc_tmp[(Bmp2->Width)*i_c],Bmp2->Width);->Width=Bmp0->Width;->Height=Bmp0->Height;->Canvas->Draw(0,0,Bmp2);">}->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal2.lpal);= (PBMP_Arr *)Bmp2->ScanLine[Bmp2->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp2->ScanLine[i_c],(void *)&b_new_uc_tmp[(Bmp2->Width)*i_c],Bmp2->Width);->Width = Bmp0->Width;->Height = Bmp0->Height;->Canvas->Draw(0,0, Bmp2);

}

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

{ // восстановление РЛИ

// Обратное Фурье-преобразование

i1 = 0;

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

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

{_v[i1*Bmp0->Width + i2] = 0;(k=0;kHeight;k++)

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

{_v[i1*Bmp0->Width + i2] = f1_v[i1*Bmp0->Width + i2] +_new[k][l] * cos(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width) -_new[k][l] * sin(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);

}

}_v[i1*Bmp0->Width + i2] = f1_v[i1*Bmp0->Width + i2] * 1 ;

}

}

// восстановление РЛИ

// визуальное отображение восстановленного РЛИ

long int tmp_x;(RadioButton1->Checked == True)

{(i=0;iWidth);i++)

{_vc[i] = floor (f1_v[i] + 0.5) * 256; //(f1_vc[i] > 255) f1_vc[i] = 255;

}

}

{(i=0;iWidth);i++)

{_vc[i] = floor (f1_v[i] + 0.5); // * 255

}

}

PixelFormat = pf8bit;->Width = Bmp0->Width; //ширина->Height = Bmp0->Height;= (PBMP_Arr *)Bmp3->ScanLine[Bmp3->Height-1];SysPal3;*tempCanvas3 = new TCanvas;notUsed3;->Handle = GetDeviceContext(notUsed3);.lpal.palVersion = 0x300;.lpal.palNumEntries = 256;(tempCanvas3->Handle,0,256,SysPal3.lpal.palPalEntry);(i=0;iHandle,0,256,SysPal3.lpal.palPalEntry);(i=0;i<=255;i++)

{.lpal.palPalEntry[i].peRed = i;.lpal.palPalEntry[i].peGreen = i;.lpal.palPalEntry[i].peBlue = i;

Palette=CreatePalette((consttagLOGPALETTE*)&SysPal3.lpal);=(PBMP_Arr*)Bmp3->ScanLine[Bmp3->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp3->ScanLine[i_c],(void*)&f1_vc[(Bmp3->Width)*i_c],Bmp3->Width);->Width=Bmp0->Width;->Height=Bmp0->Height;->Canvas->Draw(0,0,Bmp3);">}->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal3.lpal);= (PBMP_Arr *)Bmp3->ScanLine[Bmp3->Height-1];(i_c=Bmp0->Height-1;i_c>=0;i_c--)(Bmp3->ScanLine[i_c],(void *)&f1_vc[(Bmp3->Width)*i_c],Bmp3->Width);->Width = Bmp0->Width;->Height = Bmp0->Height;->Canvas->Draw(0,0, Bmp3);

}

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

{

//Процедура поворота РЛИ на произвольный угол

try{angle=StrToFloat(Edit1->Text); //угол поворота::TBitmap *SrcBitmap=new Graphics::TBitmap;::TBitmap *DestBitmap=new Graphics::TBitmap;=Image1->Picture->Bitmap;

// преобразуем градусы в радианыradians=(2*3.1416*angle)/360;cosine=(float)cos(radians);sine=(float)sin(radians);Point1x=(-SrcBitmap->Height*sine);Point1y=(SrcBitmap->Height*cosine);Point2x=(SrcBitmap->Width*cosine-SrcBitmap->Height*sine);Point2y=(SrcBitmap->Height*cosine+SrcBitmap->Width*sine);Point3x=(SrcBitmap->Width*cosine);Point3y=(SrcBitmap->Width*sine);

//Расчет координат результирующего изображения

float minx=0;

if (minx>Point1x)

{minx=Point1x;}(minx>Point2x)

{minx=Point2x;}(minx>Point3x)

{minx=Point3x;}

//Расчет координат результирующего изображения

float miny=0;

if (miny>Point1y)

{miny=Point1y;}(miny>Point2y)

{miny=Point2y;}(miny>Point3y)

{miny=Point3y;}

//Расчет координат результирующего изображения

float maxx=Point1x;

if (maxx<Point2x)

{maxx=Point2x;}(maxx<Point3x)

{maxx=Point3x;}

//Расчет координат результирующего изображения

float maxy=Point1y;

if (maxy<Point2y)

{maxy=Point2y;}(maxy<Point3y)

{maxy=Point3y;}

//Расчет координат результирующего изображенияDestBitmapWidth=2*(int)ceil(maxx-minx);DestBitmapHeight=2*(int)ceil(maxy-miny);>Height=DestBitmapHeight;>Width=DestBitmapWidth;

//отображение повернутого РЛИ

for(int x=0;x<DestBitmapWidth;x++)

{(int y=0;y<DestBitmapHeight;y++)

{ SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); (SrcBitmapx>=0&&SrcBitmapxHeight)

{ >Canvas->Pixels[x][y]=>Canvas->Pixels[SrcBitmapx][SrcBitmapy];

}

}

}->Picture->Bitmap=DestBitmap;= NULL;= NULL;

}(Exception *ex)

{(NULL, "Неверно задан угол поворота", "Ошибка!", MB_OK | MB_ICONERROR);

}

}

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

{

//процедура масштабирования исходного РЛИ

try{

if (StrToFloat(Edit2->Text)>50 | StrToFloat(Edit2->Text)<0)

{MessageBox(NULL, "Масштаб слишком велик или мал", "Ошибка!", MB_OK | MB_ICONERROR);}{(int i=0; iWidth;i++)

{(int j=0; jHeight;j++)

{->Canvas->Pixels[i][j]=(255,255,255);

}

}WidthSource, HeightSource;// исходные размерыWidthDest, HeightDest; // конечные размеры::TBitmap *sour = new Graphics::TBitmap();::TBitmap *dest = new Graphics::TBitmap();->Height=Image1->Height*StrToFloat(Edit2->Text);->Width=Image1->Width*StrToFloat(Edit2->Text);=Image1->Picture->Bitmap;= sour->Width;= sour->Height;= Image1->Width*StrToFloat(Edit2->Text);= Image1->Height*StrToFloat(Edit2->Text);>Width = WidthDest;>Height = HeightDest;kX = (float)WidthDest / (float)WidthSource;kY = (float)HeightDest / (float)HeightSource;(int x = 0; x < WidthSource; x++)(int y = 0; y < HeightSource; y++)

{(int i = 0; i < kX; i++)(int j = 0; j < kY; j++)

{>Canvas->Pixels[x*kX+i][y*kY+j] = sour->Canvas->Pixels[x][y];

}

}->Canvas->Draw(0,0, dest);

}

}(Exception *ex)

{(NULL, "Неверно задан масштаб", "Ошибка!", MB_OK | MB_ICONERROR);

}

}

//---------------------------------------------------------------------------__fastcall TForm