📄 mainfrm.cpp
字号:
float Res;
Res=dlg.height*tan(PI*34.0/180.0)/128.0;
for (int m=0;m<50;m++)
{
Client_circle.x=c[m];
Client_circle.y=r[m];
int row_ref,col_ref;
row_ref=col_ref=(int)((256+64)*Res/10);
//========================存储SAR参考图=====================
Picture temp_sar_ref;
temp_sar_ref.row=row_ref;
temp_sar_ref.col=col_ref;
temp_sar_ref.p=fspace_2d(row_ref,col_ref);
for (i=0;i<row_ref;i++)
for(int j=0;j<col_ref;j++)
{
if(Client_circle.x-col_ref/2+j>=0)
temp_sar_ref.p[i][j]=input_sar.p[Client_circle.y-row_ref/2+i][Client_circle.x-col_ref/2+j];
}
::writepic(outsar,temp_sar_ref);
ChangeNameExtension1(outsar);
dspace_2d(temp_sar_ref.p,row_ref,col_ref);
//======================存储OPT参考图====================
if(dlg.m_refpath!="")
{
input_opt.p=InputImageWithName(dlg.m_refpath,input_opt.row,input_opt.col);
Picture temp_opt_ref;
temp_opt_ref.row=row_ref;
temp_opt_ref.col=col_ref;
temp_opt_ref.p=fspace_2d(row_ref,col_ref);
for (i=0;i<row_ref;i++)
for(int j=0;j<col_ref;j++)
{
if(Client_circle.x-col_ref/2+j>=0)
temp_opt_ref.p[i][j]=input_opt.p[Client_circle.y-row_ref/2+i][Client_circle.x-col_ref/2+j];
}
::writepic(outopt,temp_opt_ref);
ChangeNameExtension1(outopt);
dspace_2d(temp_opt_ref.p,row_ref,col_ref);
dspace_2d(input_opt.p,input_opt.row,input_opt.col);
}
//======================存储DEM参考图====================
if(dlg.m_dimpath!="")
{
FILE *demfile=NULL;
demfile=fopen(dlg.m_dimpath,"r");
input_dem.p=fspace_2d(3601,3601*2);
fread(input_dem.p,3601*3601*2,1,demfile);
fclose(demfile);
Picture temp_dem_ref;
temp_dem_ref.row=row_ref;
temp_dem_ref.col=col_ref*2;
temp_dem_ref.p=fspace_2d(row_ref,col_ref*2);
for (i=0;i<row_ref;i++)
for(int j=0;j<col_ref*2;j++)
{
if(Client_circle.x*2-col_ref+j>=0)
temp_dem_ref.p[i][j]=input_dem.p[Client_circle.y-row_ref/2+i][Client_circle.x*2-col_ref+j];
}
::writepic(outdem,temp_dem_ref);
ChangeNameExtension1(outdem);
dspace_2d(temp_dem_ref.p,row_ref,col_ref*2);
dspace_2d(input_dem.p,3601,3601*2);
}
}
::MessageBox(NULL,"FINISH","NOTICE",MB_OK);
}
//===========================================================
return;
}
#ifndef FUTUERKNOWLEDGE_H
#define FUTUERKNOWLEDGE_H
#include "FutuerKnowledge.h"
#endif
#include "Match.h"
#include "matchdlg.h"
void CMainFrame::OnPipei()
{
int i,j,rect_length,rect_centre;
int Maskinner,Maskouter;
unsigned char **TempImg;
RadonResult res;
int true_theta;
POINT firstpos,endpos;
int num=0;
CMatchDlg dlg;
// unsigned char **ref;
FILE *fp;
int *r,*c;
POINT outresult[50],outorgresult[50];
double cor[50];
//=======================================================================
char inputFileName[512];
char inputRefSarName[512];
char outputtxtName[512];
Picture inputpic,inputref;
//=======================================================================
//::MessageBox(NULL,"BEGIN","WARNING",MB_OK);
//===================================初始化变量区========================
int result[8];
if(dlg.DoModal()==IDOK)
{
// dlg.UpdateData(FALSE);
true_theta=dlg.m_truecorner;
Maskinner=dlg.m_mask_inner;
Maskouter=dlg.m_mask_outer;
rect_length=dlg.m_rect_length;
rect_centre=76;//(Maskouter-Maskinner)/2+Maskinner;
strcpy(inputFileName,dlg.m_sar_path);
strcpy(inputRefSarName,dlg.m_ref_path);
strcpy(outputtxtName,dlg.m_txt_path);
r=new int [dlg.m_num];
c=new int [dlg.m_num];
fp=fopen(dlg.m_inputpath,"r");
fseek( fp, 76, SEEK_SET );
fscanf( fp, "%d", &r[0] );
fseek(fp,27,SEEK_CUR);
fscanf(fp,"%d",&c[0]);
for (i=1;i<dlg.m_num;i++)
{
fseek(fp,41,SEEK_CUR);
fscanf(fp,"%d",&r[i]);
fseek(fp,27,SEEK_CUR);
fscanf(fp,"%d",&c[i]);
}
fclose(fp);
TempImg=fspace_2d(rect_length,rect_length);
if(TempImg==NULL)
return;
//===========================生成MASK图形================================
Picture maskpic1;
unsigned char **mask;
maskpic1.row=256;
maskpic1.col=256;
maskpic1.p=fspace_2d(maskpic1.row,maskpic1.col);
for(i=0;i<maskpic1.row;i++)
for (j=0;j<maskpic1.col;j++)
maskpic1.p[i][j]=255;
int span;
for (i=0;i<maskpic1.row;i++)
for (j=0;j<maskpic1.col;j++)
{
span=(int)(pow(i-maskpic1.row/2,2)+pow(j-maskpic1.col/2,2));
if(span<=Maskinner*Maskinner||span>Maskouter*Maskouter)
maskpic1.p[i][j]=0;
}
//=======================================================================
struct _timeb timebuffer,timebuffer1;
_ftime( &timebuffer );
for(int x=0;x<dlg.m_num;x++)
{
inputpic.p=InputImageWithName(inputFileName,inputpic.row,inputpic.col);
inputref.p=InputImageWithName(inputRefSarName,inputref.row,inputref.col);
num=0;
//::MessageBox(NULL,"BEGIN","WARNING",MB_OK);
for (int theta=0;theta<360;theta=theta+45)
{
j=(int)(inputpic.col/2.0-rect_centre*cos(theta*3.1416/180.0));
i=(int)(inputpic.row/2.0-rect_centre*sin(theta*3.1416/180.0));
{
for (int k=0;k<rect_length;k++)
{
memcpy(TempImg[k],inputpic.p[i+k-(int)(rect_length/2.0)]+j-(int)(rect_length/2.0),rect_length);
}
radon(TempImg,rect_length,rect_length,&res);
if(abs(res.theta-true_theta)<=7)
{
result[num]=res.avernum;
}
else
{
result[num]=256;
}
num++;
}
}
int temp1=256;
int Angle;
for (int t=0;t<8;t++)
{
if(temp1>result[t])
{
temp1=result[t];
Angle=t*45;
}
}
if(temp1==256)
{/*
unsigned char **ttemp,**ttempmask;
ttemp=fspace_2d(256,256);
ttempmask=fspace_2d(256,256);
for(int x=0;x<256;x++)
{
memcpy(ttemp[x],inputpic.p[x+122]+122,256);
memcpy(ttempmask[x],maskpic1.p[x+122]+122,256);
}
FILE *fp;
CMatch match;
POINT temppos;
temppos.x=temppos.y=0;
ref=CComlib::ImgScaleCubicLinear(inputref.p ,inputref.row,inputref.col,320,320 ) ;
NPOT ret=match.SingleMatch_Box(ref,ttemp,ttempmask,320,320,256,256,temppos);
POINT tempresult;
tempresult.x=(ret.x)*(inputref.row/320.0)+c[9]-(inputref.row/2);
tempresult.y=(ret.y)*(inputref.row/320.0)+r[9]-(inputref.row/2);
fp=fopen(outputtxtName,"a");
fprintf(fp,"图片%d= ",x+1);
//fprintf(fp," 没有发现机场目标");
fprintf(fp," 理论匹配点(%d,%d), 实际匹配结果 (%d,%d), 误差(%d,%d) ,相关cor=%f \n",c[x],r[x],tempresult.x,tempresult.y,abs(tempresult.x-c[x]),abs(tempresult.y-r[x]),ret.cor);
fclose(fp);
dspace_2d(inputpic.p,inputpic.row,inputpic.col);
dspace_2d(inputref.p,inputref.row,inputref.col);
inputpic.p=NULL;
ChangeNameExtension1(inputFileName);
ChangeNameExtension1(inputRefSarName);
continue;*/
}
firstpos.x=(int)(inputpic.col/2.0-rect_centre*cos(Angle*3.1416/180.0));
firstpos.y=(int)(inputpic.row/2.0-rect_centre*sin(Angle*3.1416/180.0));
POINT temppos;
temppos.x=firstpos.x-(rect_length/2.0);
temppos.y=firstpos.y-(rect_length/2.0);
unsigned char **outsar;
outsar=fspace_2d(rect_length,rect_length);
mask=fspace_2d(rect_length,rect_length);
for (int k=0;k<rect_length;k++)
{
memcpy(outsar[k],inputpic.p[temppos.y+k]+temppos.x,rect_length);
memcpy(mask[k],maskpic1.p[temppos.y+k]+temppos.x,rect_length);
}
OutputImageWithName(outsar,rect_length,rect_length,"c:\\1.pic");
OutputImageWithName(mask,rect_length,rect_length,"c:\\11.pic");
CMatch match;
NPOT ret=match.SingleMatch_Box(inputref.p,outsar,mask,inputref.row,inputref.col,rect_length,rect_length,temppos);
//========================================
Picture tempc;
tempc.p=fspace_2d(320,320);
tempc.row=tempc.col=320;
POINT ttemp;
ttemp.x=ret.x+firstpos.x-50;
ttemp.y=ret.y+firstpos.y-50;
for (k=0;k<320;k++)
for (int l=0;l<320;l++)
{
if(k!=ttemp.y&&l!=ttemp.x&&k!=ttemp.y+100&&l!=ttemp.x+100)
tempc.p[k][l]=inputref.p[k][l];
else if(k>=ttemp.y&&k<ttemp.y+100&&l==ttemp.x)
tempc.p[k][l]=255;
else if(k==ttemp.y&&l>=ttemp.x&&l<ttemp.x+100)
tempc.p[k][l]=255;
else if(k==ttemp.y+100&&l>=ttemp.x&&l<ttemp.x+100)
tempc.p[k][l]=255;
else if(k>=ttemp.y&&k<ttemp.y+100&&l==ttemp.x+100)
tempc.p[k][l]=255;
else
tempc.p[k][l]=inputref.p[k][l];
}
::writepic("c:\\111.pic",tempc);
//==============================================
dspace_2d(outsar,rect_length,rect_length);
dspace_2d(mask,rect_length,rect_length);
/// ::MessageBox(NULL,"FINISH","WARNING",MB_OK);
POINT tempresult;
outorgresult[x].x=ret.x;
outorgresult[x].y=ret.y;
outresult[x].x=(ret.x+inputpic.col/2.0)*atof(dlg.m_Res)/10.0+c[x]-320*atof(dlg.m_Res)/20.0;
outresult[x].y=(ret.y+inputpic.row/2.0)*atof(dlg.m_Res)/10.0+r[x]-320*atof(dlg.m_Res)/20.0;
cor[x]=ret.cor;
dspace_2d(inputpic.p,inputpic.row,inputpic.col);
dspace_2d(inputref.p,inputref.row,inputref.col);
inputpic.p=NULL;
ChangeNameExtension1(inputFileName);
ChangeNameExtension1(inputRefSarName);
}
_ftime( &timebuffer1);
int second=timebuffer1.time-timebuffer.time;
FILE *fp;
fp=fopen(outputtxtName,"a");
for (int i=0;i<dlg.m_num;i++)
{
fprintf(fp,"图片%d",i+1);
//fprintf(fp," local(%d,%d), match(%d,%d),%f",outorgresult[i].x,outorgresult[i].y,
// outorgresult[i].x-32,outorgresult[i].y-32,sqrt(pow(outorgresult[i].x-32,2)+
// pow(outorgresult[i].y-32,2)) );
fprintf(fp," 理论匹配点(%d,%d), 实际匹配结果 (%d,%d), 误差(%d,%d) ,相关cor=%f ,半径=%f\n",c[i],r[i]
,outresult[i].x,outresult[i].y,(outresult[i].x-c[i]),(outresult[i].y-r[i]),cor[i],
sqrt( (outresult[i].y-r[i])*(outresult[i].y-r[i])+(outresult[i].x-c[i])*(outresult[i].x-c[i]) ));
}
double averx=0,avery=0;
for (i=0;i<dlg.m_num;i++)
{
averx+=(outresult[i].x-c[i]);
avery+=(outresult[i].y-r[i]);
}
averx=averx/dlg.m_num;
avery=avery/dlg.m_num;
double faix=0,faiy=0;
for (i=0;i<dlg.m_num;i++)
{
faix+=pow(outresult[i].x-c[i]-averx,2);
faiy+=pow(outresult[i].y-r[i]-avery,2);
}
faix=sqrt(faix/49.0);
faiy=sqrt(faiy/49.0);
double averx1=0,avery1=0;
for (i=0;i<dlg.m_num;i++)
{
averx1+=(outorgresult[i].x-32);
avery1+=(outorgresult[i].y-32);
}
averx1=averx1/dlg.m_num;
avery1=avery1/dlg.m_num;
double faix1=0,faiy1=0;
for (i=0;i<dlg.m_num;i++)
{
faix1+=pow(outorgresult[i].x-32-averx1,2);
faiy1+=pow(outorgresult[i].y-32-avery1,2);
}
faix1=sqrt(faix1/49.0);
faiy1=sqrt(faiy1/49.0);
fprintf(fp,"\n\n");
fprintf(fp,"总运行时间为:%d 秒\n",second);
fprintf(fp,"均值为 (%f,%f)\n",averx,avery);
fprintf(fp,"方差为(%f,%f)\n",faix,faiy);
fprintf(fp,"\n\n");
for (i=0;i<dlg.m_num;i++)
{
fprintf(fp,"图片%d ",i+1);
fprintf(fp," local(%d,%d), match(%d,%d),%f\n",outorgresult[i].x,outorgresult[i].y,
outorgresult[i].x-32,outorgresult[i].y-32,sqrt(pow(outorgresult[i].x-32,2)+
pow(outorgresult[i].y-32,2)) );
}
fprintf(fp,"均值为 (%f,%f)\n",averx1,avery1);
fprintf(fp,"方差为(%f,%f)\n",faix1,faiy1);
fclose(fp);
::MessageBox(NULL,"FINISH","WARNING",MB_OK);
delete[] r;
delete[] c;
}
else
return;
}
void CMainFrame::OnOrgMatch()
{
int i,j,rect_length,rect_centre;
int Maskinner,Maskouter;
unsigned char **TempImg;
RadonResult res;
int true_theta;
POINT firstpos,endpos;
int num=0;
CMatchDlg dlg;
unsigned char **ref;
FILE *fp;
int *r,*c;
//=======================================================================
char inputFileName[512];
char inputRefSarName[512];
char outputtxtName[512];
Picture inputpic,inputref;
//=======================================================================
//::MessageBox(NULL,"BEGIN","WARNING",MB_OK);
//===================================初始化变量区========================
int result[8];
if(dlg.DoModal()==IDOK)
{
true_theta=dlg.m_truecorner;
Maskinner=dlg.m_mask_inner;
Maskouter=dlg.m_mask_outer;
rect_length=dlg.m_rect_length;
rect_centre=76;//(Maskouter-Maskinner)/2+Maskinner;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -