#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#define NUMIMG 11
using namespace std;
int main(int argc, char *argv[])
{
if( argc != 5 )
{
cerr << "使用说明: 启动windows控制台cmd, 从控制台中用 cd 命令进入程序所在的文件夹(程序需放置在.dat数据文件的上 一层目录文件夹内),接着在控制台中依次 输入: " << endl;
cerr << "cosi.exe" << endl;
cerr << "文件夹个数" << endl;
cerr << "每个文件夹中文件的个数" << endl;
cerr << "数据图片x轴方向大小" << endl;
cerr << "数据图片y轴方向大小" << endl;
cerr << "(注意!参数与参数之间以空格隔开,程序最后生成每个文件夹的平均结果:r##.dat; I1图像: Final_1_##.dat; I2 图像: Final_2_##.dat;) " << endl;
cerr << "Missing Parameters " << endl;
cerr << "Folder_Number File_Number File_Size_x File_Size_y " << endl;
return EXIT_FAILURE;
}
int Folder_Num = atoi(argv[1]);
int File_Num = atoi(argv[2]);
int File_x = atoi(argv[3]);
int File_y = atoi(argv[4]);
const double PI = 3.1415926535897932384626433832795;
clock_t start, finish;
double duration;
start = clock();
for (int n=1;n<=Folder_Num;n++)
{
for (int m=0;m<=File_Num-1;m++)
{
unsigned short *data[NUMIMG];
char name[50];
sprintf(name, "%d\\%d.dat", n, m);
FILE *file = fopen(name, "rb");
if(file==NULL)
{
printf("not find the files!\n");
return -1;
}
}
for (int i=0; i<=File_Num-1; i++)
{
unsigned short *data[i]=NULL;
data[i] = (unsigned short *)malloc(File_x*File_y*sizeof(unsigned short));
fread(data[i], File_x*File_y, sizeof(unsigned short), file);
}
fclose(file);
for (int i=File_Num; i<=File_Num+4; i++)
{
unsigned short *data[i]=NULL;
data[i] = (unsigned short *)malloc(File_x*File_y*sizeof(unsigned short));
memset(data[i], 0, File_x*File_y*sizeof(unsigned short));
}
for (int i=0; i<=9; i++)
{
for (int j=0; j<File_x*File_y; j++)
{
data[File_Num][j] += (unsigned short)(1.00*data[i][j]/File_Num);
}
}
for (int i=10; i<=19; i++)
{
for (int j=0; j<File_x*File_y; j++)
{
data[File_Num+1][j] += (unsigned short)(1.00*data[i][j]/File_Num);
}
}
for (int i=20; i<=29; i++)
{
for (int j=0; j<File_x*File_y; j++)
{
data[File_Num+2][j] += (unsigned short)(1.00*data[i][j]/File_Num);
}
}
for (int i=30; i<=39; i++)
{
for (int j=0; j<File_x*File_y; j++)
{
data[File_Num+3][j] += (unsigned short)(1.00*data[i][j]/File_Num);
}
}
for (int i=40; i<=49; i++)
{
for (int j=0; j<File_x*File_y; j++)
{
data[File_Num+4][j] += (unsigned short)(1.00*data[i][j]/File_Num);
}
}
unsigned short *ALL_data=NULL;
ALL_data=(unsigned short)malloc(File_x*File_y*5*sizeof(unsigned short));
for(int i=0;i<=4;i++)
{
for (int k=0; k<File_x*File_y; k++)
{
ALL_data[i*File_x*File_y+k]=data[File_Num+i][k];
}
}
for (i=0; i<=File_Num+4; i++)
{
free(data[i]);
}
double a=0;
double b=0;
double c=0;
double d=0;
double e=0;
unsigned short *Im=NULL;
Im=(unsigned short *)malloc(File_x*File_y*sizeof(unsigned short));
for (int p=0;p<File_x*File_y;p++)
{
a=ALL_data[0*File_x*File_y+p];
b=ALL_data[1*File_x*File_y+p];
c=ALL_data[2*File_x*File_y+p];
d=ALL_data[3*File_x*File_y+p];
e=ALL_data[4*File_x*File_y+p];
double Im_temp=4*pow((b-d),2)-pow((a-e),2)+pow((2*c-a-e),2);
if(Im_temp<0)
{
Im_temp=0;
}
Im[p]=(unsigned short)((sqrt(Im_temp)/2)/pow(0.92,2));
}
free(ALL_data);
char name4[50];
sprintf(name4, "final_2_%d.dat", m);
FILE *ofile4 = fopen(name4, "wb");
fwrite(Im, File_x*File_y, sizeof(unsigned short), ofile4);
fclose(ofile4);
free(Im);
}
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("ok!\n");
printf( "%2.1f seconds\n", duration );
return 0;
}
评论0