⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 图像处理软件,功能比较基础
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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 + -