📄 main.c
字号:
for(destCam=0; destCam<ANGLE; destCam++) // each dest angle
for(j=0; j<60; j++) // each align
{
// err = 0;
// for(m=0; m<CAMNUM; m++) // each vertex
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// un-loop to speed-up
m=0;
err = cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
// err += cost_q8[srcCam][destCam][align10[j][m]][align10[0][m++]];
if( err < MinErr )
MinErr = err;
}
return MinErr;
}
void main(int argc, char *argv[]){ // for region shape descriptor int i, j, k, n, m, Count, TopNum, ClassNum, AllClassNum; pMatRes pmr, pTop;
int SIM;
// double SIM;// clock_t start, finish;
FILE *fpt, *fpt1, *fpt2, *fpt4;
char filename[200], cmpfn[200], srcfn[2000][200], destfn[200], c1[200];
float PreciseRecall[RESAM], OneClassPreciseRecall[RESAM], AllClassPreciseRecall[RESAM];
float locate, interpol_1, interpol_2;
double dtmp;
clock_t start, finish;
// initialize: read camera pair
fpt = fopen("q8_table", "rb");
fread(q8_table, sizeof(unsigned char), 65536, fpt);
fclose(fpt);
// initialize: read camera pair
fpt = fopen("align10.txt", "rb");
fread(align10, sizeof(unsigned char), 60*CAMNUM_2, fpt);
fclose(fpt);
// read feature of all models
fpt1 = fopen("list.txt", "r");
Count = 0;
while( fgets(destfn, 200, fpt1) )
{
// read coefficient from model 2
destfn[strlen(destfn)-1] = 0x00;
// #1
sprintf(filename, "%s_q8_v1.8.art", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
fread(dest_ArtCoeff[Count], ANGLE * CAMNUM * ART_COEF, sizeof(unsigned char), fpt);
fclose(fpt);
sprintf(filename, "%s_q8_v1.8.fd", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
fread(dest_FdCoeff_q8[Count], sizeof(unsigned char), ANGLE * CAMNUM * FD_COEF, fpt);
fclose(fpt);
sprintf(filename, "%s_q8_v1.8.cir", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
fread(dest_CirCoeff_q8[Count], sizeof(unsigned char), ANGLE * CAMNUM, fpt);
fclose(fpt);
sprintf(filename, "%s_q8_v1.8.ecc", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
fread(dest_EccCoeff_q8[Count], sizeof(unsigned char), ANGLE * CAMNUM, fpt);
fclose(fpt);
/* // #2
sprintf(filename, "%s.sh", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
for(i=0, k=0; i<SPHERE_NUM; i++)
{
fscanf(fpt, "%s", c1);
for(j=0 ;j<HAMONIC_NUM; j++, k++)
{
fscanf(fpt, "%lf", &dtmp);
SHdest_Coeff[Count][k] = dtmp;
}
}
fclose(fpt);
// #3
sprintf(filename, "%s.s3d", destfn);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); continue; }
for(i=0; i<S3D_KEY_NUM; i++)
{
fscanf(fpt, "%lf", &dtmp);
S3Ddest_Coeff[Count][i] = dtmp;
}
fclose(fpt);
*/
Count ++;
}
fclose(fpt1);
if( Count != ModelNum )
{ printf("Error!!\n"); return ; }
// ****************
// NNNNOOOOTTTTEEEE: the ModelNum should be the same as the number of all models
// ModelNum = 1833;
TopNum = ModelNum; // show top 10
pmr = (pMatRes) malloc (ModelNum * sizeof(MatRes));
pTop = (pMatRes) malloc ( TopNum * sizeof(MatRes) );
// initialize
for(i=0; i<RESAM; i++)
AllClassPreciseRecall[i] = 0;
AllClassNum = 0;
// read filename of two models
fpt4 = fopen("compare.txt", "r");
while( fscanf(fpt4, "%s", cmpfn) != EOF )
{
sprintf(filename, "%s.txt", cmpfn);
fpt2 = fopen(filename, "r");
ClassNum = 0;
while( fgets(srcfn[ClassNum], 200, fpt2) )
{
srcfn[ClassNum][strlen(srcfn[ClassNum])-1] = 0x00;
ClassNum++;
}
fclose(fpt2);
AllClassNum += ClassNum;
// initialize
for(i=0; i<RESAM; i++)
OneClassPreciseRecall[i] = 0;
for(n=0; n<ClassNum; n++)
{
// read coefficient from model
// #1
// ART
sprintf(filename, "%s_q8_v1.8.art", srcfn[n]);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); return; }
fread(src_ArtCoeff, SRC_ANGLE * CAMNUM * ART_COEF, sizeof(unsigned char), fpt);
fclose(fpt);
// FD
sprintf(filename, "%s_q8_v1.8.fd", srcfn[n]);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); return; }
fread(src_FdCoeff_q8, sizeof(unsigned char), ANGLE * CAMNUM * FD_COEF, fpt);
fclose(fpt);
// CIR
sprintf(filename, "%s_q8_v1.8.cir", srcfn[n]);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); return; }
fread(src_CirCoeff_q8, sizeof(unsigned char), ANGLE * CAMNUM, fpt);
fclose(fpt);
// ECC
sprintf(filename, "%s_q8_v1.8.ecc", srcfn[n]);
if( (fpt = fopen(filename, "rb")) == NULL ) { printf("%s does not exist.\n", filename); return; }
fread(src_EccCoeff_q8, sizeof(unsigned char), ANGLE * CAMNUM, fpt);
fclose(fpt);
// #2
//SH
/* sprintf(filename, "%s.sh", srcfn[n]);
if( (fpt = fopen(filename, "r")) == NULL ) { printf("%s does not exist.\n", filename); return; }
for(i=0, k=0; i<SPHERE_NUM; i++)
{
fscanf(fpt, "%s", c1);
for(j=0 ;j<HAMONIC_NUM; j++, k++)
{
fscanf(fpt, "%lf", &dtmp);
SHsrc_Coeff[k] = dtmp;
}
}
fclose(fpt);
// #3
//S3D
sprintf(filename, "%s.s3d", srcfn[n]);
if( (fpt = fopen(filename, "r")) == NULL ) { printf("%s does not exist.\n", filename); return; }
for(i=0; i<S3D_KEY_NUM; i++)
{
fscanf(fpt, "%lf", &dtmp);
S3Dsrc_Coeff[i] = dtmp;
}
fclose(fpt);
*/
// record execute time --- start
start = clock();
// FIRST MATCH
fpt1 = fopen("list.txt", "r");
Count = 0;
while( fgets(destfn, 200, fpt1) )
{
destfn[strlen(destfn)-1] = 0x00;
// Matching
// to be 1.0 : 0.55 : 0.48
// SIM = (double)MatchART_q8(dest_ArtCoeff[Count]) +
// (double)MatchFD_q8(dest_FdCoeff_q8[Count]) +
// 16 * MatchSH(SHdest_Coeff[Count]) +
// 2048 * MatchS3D(S3Ddest_Coeff[Count]);
// SIM = MatchART_q8(dest_ArtCoeff[Count]) + MatchFD_q8(dest_FdCoeff_q8[Count]);
SIM = MatchLF(dest_ArtCoeff[Count], dest_FdCoeff_q8[Count], dest_CirCoeff_q8[Count], dest_EccCoeff_q8[Count]);
// add to a list
strcpy(pmr[Count].name, destfn);
pmr[Count].sim = SIM;
pmr[Count].index = Count;
Count ++;
}
fclose(fpt1);
// sort
for(i=0; i<TopNum; i++)
{
pTop[i].sim = INT_MAX;
strcpy(pTop[i].name, "");
}
for(k=0; k<ModelNum; k++)
for(i=0; i<TopNum; i++)
if( pmr[k].sim < pTop[i].sim )
{
for(j=TopNum-2; j>=i; j--)
{
strcpy(pTop[j+1].name, pTop[j].name);
pTop[j+1].sim = pTop[j].sim;
pTop[j+1].index = pTop[j].index;
}
strcpy(pTop[i].name, pmr[k].name);
pTop[i].sim = pmr[k].sim;
pTop[i].index = pmr[k].index;
break;
}
// record execute time --- end
finish = clock();
fpt = fopen("compare_time.txt", "a");
fprintf(fpt, "%s: %f sec\n", srcfn[n], (double)(finish - start) / CLOCKS_PER_SEC );
fclose(fpt);
// check if each item is in this same class
for(k=0; k<TopNum; k++)
{
pTop[k].Recall = 0;
for(m=0; m<ClassNum; m++)
if( strcmp(pTop[k].name, srcfn[m]) == 0 )
{
pTop[k].Recall = 1;
break;
}
}
// 1 1 0 0 1 0 1 0 0 0 1 ...
// 1 2 2 2 3 3 4 4 4 4 5 ...
for(k=1; k<TopNum; k++)
pTop[k].Recall += pTop[k-1].Recall;
// 1 2 2 2 3 3 4 4 4 4 5 ... r
// - - - - - - - - - - - ... - = precise ratio
// 1 2 3 4 5 6 7 8 9 10 11 ... K
for(k=0; k<TopNum; k++)
{
if( pTop[k].Recall < ClassNum )
pTop[k].Precise = (float)pTop[k].Recall / (float)(k+1);
else if( pTop[k].Recall == ClassNum )
{
pTop[k].Precise = (float)pTop[k].Recall / (float)(k+1);
//Recall = k+1;
break;
}
}
// ******************************************************************************
// copy pTop[k].Precise according to the order of Recall
// check if each item is in this same class
i = 0;
for(k=0; k<TopNum && i<ClassNum; k++)
{
for(m=0; m<ClassNum; m++)
if( strcmp(pTop[k].name, srcfn[m]) == 0 )
{
pTop[i++].Precise = pTop[k].Precise;
break;
}
}
// normaliza K (recall all) to 1000
for(i=0; i<RESAM; i++)
{
locate = (float) (i * (ClassNum-1)) / (float) (RESAM-1);
interpol_1 = locate - (int)locate;
interpol_2 = 1.0f - interpol_1;
PreciseRecall[i] = interpol_2 * pTop[(int)locate].Precise +
interpol_1 * pTop[(int)locate+1].Precise;
// in average
OneClassPreciseRecall[i] += PreciseRecall[i];
// all class in average
AllClassPreciseRecall[i] += PreciseRecall[i];
}
// sprintf(filename, "Results\\%s\\%s_%03d__LightField_v1.7.txt", cmpfn, cmpfn, n);
// fpt = fopen(filename, "w");
// fprintf(fpt, "%s - Recall: %d/%d\n", srcfn[n], ClassNum, Recall);
// for(i=0; i<RESAM; i++)
// fprintf(fpt, "%f\n", PreciseRecall[i]);
// fprintf(fpt, "\n");
// fclose(fpt);
printf("%s_%03d\n", cmpfn, n);
//Show results
sprintf(filename, "Results\\%s\\%s_%03d_v1.8.html", cmpfn, cmpfn, n);
ShowResults(filename, pTop, ClassNum);
}
// in average
sprintf(filename, "Results\\%s\\%s_v1.8.txt", cmpfn, cmpfn);
fpt = fopen(filename, "w");
// fprintf(fpt, "%s - Recall: %d/%d\n", srcfn[n], ClassNum, Recall);
for(i=0; i<RESAM; i++)
fprintf(fpt, "%f\n", OneClassPreciseRecall[i] / ClassNum );
fprintf(fpt, "\n");
fclose(fpt);
printf("\"%s\" OK.\n", cmpfn);
}
// all class in average
sprintf(filename, "Results\\total_v1.8.txt");
fpt = fopen(filename, "w");
// fprintf(fpt, "%s - Recall: %d/%d\n", srcfn[n], ClassNum, Recall);
for(i=0; i<RESAM; i++)
fprintf(fpt, "%f\n", AllClassPreciseRecall[i] / AllClassNum );
fprintf(fpt, "\n");
fclose(fpt);
printf("\"%s\" OK.\n", cmpfn);
fclose(fpt4);
free(pmr);
free(pTop);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -