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

📄 display.h

📁 C语言版,机载SAR回波仿真程序
💻 H
字号:
#define MaxMig 20
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
#include "dos.h"
struct FileHeader
{
	int	bfSize;
	short bfReserved1;
	short bfReserved2;
	int bfOffBytes;
};

struct BitmapHeader
{
	int biSize;
	int biWidth;
	int biHeight;
	short biPlanes;
	short biBitCount;
	int bicompression;
	int biSizeImage;
	int biXPelsPerMeter;
	int biYPelsPerMeter;
	int	biClrUsed;
	int biClrColors;
};

struct ColorMap
{
	unsigned char bmiRed;
	unsigned char bmiGreen;
	unsigned char bmiBlue;
	unsigned char bmiReserved;
};
	
void display(char *infile,char *outfile,int m,int n,int l)
/**************************
input:
 infile : 输入文件名
 m      : 输入文件行点数
 n		: 输入文件行数
 l		: 输出文件行数,一般等于n
output:
 outfile: 输出bmp文件名
调用实例:
display("image.dat","image.bmp",2048,1024,1024);
**************************/
{
FILE *fp1,*fp2;
int     i=0,j=0,k=0;
//int     Azimuth_length=4096,Range_length=8192;//方位向和距离向点数
int     Azimuth_length,Range_length,Xsize,Ysize;//方位向和距离向点数
float amax;
int imax,jmax;
float a;
float sum,max=0;
int   num;
float a1,a2,aL,d,d1;

//int R_coordinate_min=0, R_coordinate_max=6144;            //距离向截取的数据起点和终点坐标值
int R_coordinate_min=0, R_coordinate_max;                  //距离向截取的数据起点和终点坐标值
int R_coordinate_margin;//截取数据所跨越的宽度
int A_compress_num=1;                                    //压缩率
int A_compress_num0;                                      //方位向数据和压缩率的比值

unsigned char **image;               
float *temp;
//char infile[50],outfile[50];
	struct FileHeader FileHead;
	struct BitmapHeader BMPHead;
	struct ColorMap ClrMap[256];
//printf("Enter the infile name:\n");
//scanf("%s",infile);
if((fp1=fopen(infile,"rb"))==NULL)
{
	printf("cannot open infile!\n");
	exit(1);
}
Xsize=m;
Ysize=n;
/*printf("方位向点数=?	距离向点数=?\n");
scanf("%d %d",&Azimuth_length,&Range_length);
printf("\n距离向截取点数=?\n");
scanf("%d",&R_coordinate_max);
*/
Azimuth_length=m;
Range_length=n;
R_coordinate_max=l;

R_coordinate_margin=R_coordinate_max-R_coordinate_min;
A_compress_num0=Azimuth_length/A_compress_num;
temp=(float  *)calloc(A_compress_num0,sizeof(float));
amax=0;
imax=0;
jmax=0;
sum=0;


for(i=0;i<R_coordinate_margin;i++)
{
    fread(temp,sizeof(float),A_compress_num0,fp1);
	for(j=0;j<A_compress_num0;j++)
	{
		a=temp[j];
    	  if(max<a) max=a;                              //峰值
		sum+=a;
		if(a>=amax)
		{
			amax=a;
			imax=i;
			jmax=j;
		}
	}
}
fclose(fp1);
printf("\n图像最大值=%e\n",amax);
sum=sum/(R_coordinate_margin*A_compress_num0);           //均值

image=(unsigned char  **)calloc(R_coordinate_margin,sizeof(unsigned char*));
for(i=0;i<R_coordinate_margin;i++)
	image[i]=(unsigned char  *)calloc(A_compress_num0,sizeof(unsigned char));


if((fp1=fopen(infile,"rb"))==NULL)
{
	printf("cannot open infile\n");
	exit(1);
}

d=0.0;

for(i=0;i<R_coordinate_margin;i++)
{
   fread(temp,sizeof(float),A_compress_num0,fp1);
   for(j=0;j<A_compress_num0;j++)
   {
      a=temp[j];
      a=a-sum; 
	  d+=a*a;
   }
}
fclose(fp1);

d=d/(R_coordinate_margin*A_compress_num0);          //方差
d=(float)(sqrt(d));                                          //均方根 
d1=(float)(sum-2.0*d);
if((fp1=fopen(infile,"rb"))==NULL)
{
	printf("cannot open infile\n");
	exit(1);
}

/*printf("Enter the outfile name:\n");
scanf("%s",outfile);*/
if((fp2=fopen(outfile,"wb"))==NULL)
{
	printf("cannot open outfile.dat\n");
	exit(1);
}
	// Define the File Header
	FileHead.bfSize=Xsize*Ysize+1024+54;
	FileHead.bfReserved1=0;
	FileHead.bfReserved2=0;
	FileHead.bfOffBytes=1024+54;

	// Define the Bitmap Header
	BMPHead.biSize=40;
	BMPHead.biWidth=Xsize;
	BMPHead.biHeight=Ysize;
	BMPHead.biPlanes=1;
	BMPHead.biBitCount=8;
	BMPHead.bicompression=0;
	BMPHead.biSizeImage=Xsize*Ysize;
	BMPHead.biXPelsPerMeter=0;
	BMPHead.biYPelsPerMeter=0;
	BMPHead.biClrUsed=0;
	BMPHead.biClrColors=0;

	// Define the Color Map
	for (i=0;i<256;i++)
	{
		ClrMap[i].bmiRed=i;
		ClrMap[i].bmiGreen=i;
		ClrMap[i].bmiBlue=i;
		ClrMap[i].bmiReserved=0;
	}

	fprintf(fp2,"%c",'B');
	fprintf(fp2,"%c",'M');
	fwrite(&FileHead,sizeof(struct FileHeader),1,fp2);
	fwrite(&BMPHead,sizeof(struct BitmapHeader),1,fp2);
	fwrite(&ClrMap,sizeof(struct ColorMap),256,fp2);

if(d1<=0.0)
//if(1)
{
    for(i=0;i<R_coordinate_margin;i++)
	{
       fread(temp,sizeof(float),A_compress_num0,fp1);
//	   aL=sum+2*d;     
	   aL=max/2;                             //衰减10
       for(j=0;j<A_compress_num0;j++)
	   {
	      a=temp[j];
		  if(a<=aL)
		  {
			if(a<=max/100000) num=0;            //衰减30分贝
			else  
			  num=(int)(sqrt(a/aL)*255.0);
		  }		  
		  else 
			  num=255;

			  image[i][j]=num;
		}
	    //fwrite(image,sizeof(unsigned char),A_compress_num0,fp2);
	}
}
else
{
	for(i=0;i<R_coordinate_margin;i++)
	{
	    fread(temp,sizeof(float),A_compress_num0,fp1);
		aL=(float)(4.0*d);
	    a1=(float)(sum-2.0*d);
	    a2=(float)(sum+2.0*d);
      	for(j=0;j<A_compress_num0;j++)
		{
		   a=temp[j];
		   if(a<=a1)                
		      num=0;
		   else if(a>=a2)
		      num=255;
		   else
	          num=(int)(sqrt((a-a1)/aL)*255.0);

		      image[i][j]=num;
		}
	    //fwrite(image,sizeof(unsigned char),A_compress_num0,fp2);
	}
}
for(i=0;i<R_coordinate_margin;i++)
//for(i=R_coordinate_margin-1;i>-1;i--)
fwrite(image[i],sizeof(unsigned char),A_compress_num0,fp2);

fclose(fp1);
fclose(fp2);
for(i=0;i<R_coordinate_margin;i++)
free(image[i]);
printf("\n%s位图文件生成完毕!\n",outfile);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -