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