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

📄 unit2.h

📁 it will work it is recogntion code only
💻 H
📖 第 1 页 / 共 3 页
字号:
     delete[] lattice;
     };
void myprintCirc(char *s,double* a,int dim,int h)
    {int i; double max=a[0], min=a[0];
     for(i=1;i<dim;i++) 
         {if (max<a[i]) max=a[i];
          if (a[i]<min) min=a[i];
         };//end for i
PC(a,0,dim-1);
     int j, **lattice=new int*[h];
     for (j=0;j<h;j++)
         {lattice[j]=new int[dim];
          for(i=0;i<dim;i++) (lattice[j])[i]=0;
         }//end for j
     double r=fabs(max-min);if(abs(r) < 1E-30)r=1; 
     for(i=0;i<dim;i++)
      (lattice[round((h-1)*(a[i]-min)/r)])[i]=1;
     printf("___________circus_%s___min=_%f__max=%f___dim=%d:_____\n",
                                        s,min,max,dim);
     for (j=h-1;j>=0;j--)
         {for(i=0;i<dim;i++) 
         if ((lattice[j])[i]) {printf("*");} else printf(" ");
            printf("\n");
         };//end for j
     printf("----it was circus %s   min= %f  max=%f   dim=%d ----- \n",
                                        s,min,max,dim);
     for (j=0;j<h;j++)  delete[] (lattice[j]);
     delete[] lattice;
     };
void myprintCirc(char *s,int* a,int dim,int h)
    {int i; int max=a[0], min=a[0];
     for(i=1;i<dim;i++) 
         {if (max<a[i]) max=a[i];
          if (a[i]<min) min=a[i];
         };//end for i

     int j, **lattice=new int*[h];
     for (j=0;j<h;j++)
         {lattice[j]=new int[dim];
          for(i=0;i<dim;i++) (lattice[j])[i]=0;
         }//end for j
     int r=abs(max-min);if(r EQ 0)r=1; 
     for(i=0;i<dim;i++)
      (lattice[round((h-1)*(a[i]-min)/r)])[i]=1;
     printf("___________circus_%s___min=_%d__max=%d___dim=%d:_____\n",
                                        s,min,max,dim);
     for (j=h-1;j>=0;j--)
         {for(i=0;i<dim;i++) 
         if ((lattice[j])[i]) {printf("*");} else printf(" ");
            printf("\n");
         };//end for j
     printf("----it was circus %s   min= %d  max=%d   dim=%d ----- \n",
                                        s,min,max,dim);
     for (j=0;j<h;j++)  delete[] (lattice[j]);
     delete[] lattice;
     };

void myprint(char *s,float* a,
             int xlength,int ylength,
             int spaceForElement)
    { int var;float fvar;
    int vol=xlength*ylength;int i; float max=float(0),min;
    printf(" arr2D float %s[lenx=%d,leny=%d]",
                          s,xlength,ylength); 
    
        { max=a[0]; for (i=1;i<vol;i++)
                        if (max<a[i]) max=a[i];
         printf("  max= %f",max);
        };if (max==0) max++;

        { min=a[0]; for (i=1;i<vol;i++)
                        if (min>a[i]) min=a[i];
         printf("  min= %f",min);  
        };
    printf("\n");   
    for (i=0;i<vol;i++)
        {if (spaceForElement==1) 
             var=int(floor(9.99*(a[i]-min)/(max-min)));
                else fvar=a[i];
         if (spaceForElement==1)    
         printf("%d",var); else 
         if (spaceForElement==2) 
         printf("% 3.1f",fvar); else 
         if (spaceForElement==3) 
         printf("% 4.1f",fvar); else
         if (spaceForElement==4)
         printf("% 5.1f",fvar); else
         if (spaceForElement==5)
         printf("% 6.1f",fvar); else printf(" %f",fvar);
         if (((i+1) % xlength)==0) printf("\n");
        }
    };

void viewCutter(unsigned char*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{NPS("viewCutter: ");PV(xSize);PV(ySize);
int xTimes= xSize/xScreen; 
int yTimes= ySize/yScreen,rTimes=xTimes*yTimes;
PV(xTimes);PV(yTimes);
int xSizeCut=xSize/xTimes,ySizeCut=ySize/yTimes; 
int *ret2DCut=new int[xSizeCut*ySizeCut]; 
int i,j; for(i=0;i<xSizeCut;i++)for(j=0;j<ySizeCut;j++)
{int sum=0; int ii,jj;
 for(ii=i*xTimes;ii<(i+1)*xTimes;ii++)
 for(jj=j*yTimes;jj<(j+1)*yTimes;jj++)sum+=retina2D[ii+jj*xSize];
 sum=round(sum/(rTimes+0.0));
 ret2DCut[i+j*xSizeCut]=sum;
};
P2D(ret2DCut,xSizeCut,ySizeCut,1);
PS("viewCutter END. ");//delete[] ret2DCut;
};// END viewCutter
double *ret2DCut;
void viewCutter(double*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{NPS("viewCutter: ");PV(xSize);PV(ySize);
int xTimes= xSize/xScreen;if (xTimes EQ 0) xTimes=1;  
int yTimes= ySize/yScreen;if (yTimes EQ 0) yTimes=1;int rTimes=xTimes*yTimes;
PV(xTimes);PV(yTimes);
int xSizeCut=xSize/xTimes,ySizeCut=ySize/yTimes; 
ret2DCut=new double[xSizeCut*ySizeCut]; 
int i,j; for(i=0;i<xSizeCut;i++)for(j=0;j<ySizeCut;j++)
{double sum=0; int ii,jj;
 for(ii=i*xTimes;ii<(i+1)*xTimes;ii++)
 for(jj=j*yTimes;jj<(j+1)*yTimes;jj++)sum+=retina2D[ii+jj*xSize];
 sum=sum/(rTimes+0.0);
 ret2DCut[i+j*xSizeCut]=sum;
};
P2D(ret2DCut,xSizeCut,ySizeCut,1);
PS("viewCutter END. ");//delete[] ret2DCut;
};// END viewCutter

double *retD;
void viewCutter(int*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{retD=new double [xSize*ySize];int i;
 for(i=0;i<xSize*ySize;i++) retD[i]=round(retina2D[i]);
 viewCutter(retD,xSize,ySize,xScreen,yScreen);
}//END.

//%%%%%%%%%%%%%%%%%%%%%%% Fast integer abs,min,max:
#define ABS(a) ((a>0)?a:-a)
#define ABSI(a) (a-((a+a)&(a>>31)));  
#define MINI(a,b) (b=a-b,a -= b & (b>>31))
static int int_max(int a, int b) {
       b = a-b;
       a -= b & (b>>31);
       return a;}
static int int_abs(int a) {
       return a - ((a+a) & (a>>31));}
static int int_min(int a, int b) {
       b = b-a;
       a += b & (b>>31);
       return a;}
//%%%%%%%%%%%%%%%%%%%%%%%  Write pgm "P2" from "int *", Ngray <=255
void pgmP2Write(char *fullname,
                  int xSize, int ySize,
                  unsigned char *retina2D)
{  FILE *pgmPict;
pgmPict=fopen(fullname,"w"); 
fprintf(pgmPict,"P2\n");fprintf(pgmPict,"%d %d\n%d\n",xSize,ySize,255);
int rSize=xSize*ySize;
int i;for(i=0;i<rSize;i++) {fprintf(pgmPict,"%d ",retina2D[i]);}
fclose(pgmPict);
};//END void pgmP2Write
//%%%%%%%%%%%%%%%%%%%%%%%  Write double matrix for reading by matlab's "textread"
void writeMatrixDouble(char*matrixfile,
                int xSize,int ySize,double*matrix)
{  FILE *fl;
  if( (fl  = fopen(matrixfile,"w")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}  

int i,j,k=0;//i goes along rows
for(j=0;j<ySize;j++)
 {fprintf(fl,"\n");//this pre-delimiter style is important!
  for(i=0;i<xSize;i++)     //fprintf(fl," %e",matrix[k++]);
                           fprintf(fl," %.3e",matrix[k++]); 
 }
fclose(fl);
};//END void writeMatrixDouble

void writeAllCircDouble(char*cfile,
                int LtrList, int LdiList, int N2pi, double **circ)
{  FILE *fl;
  if( (fl  = fopen(cfile,"w")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",cfile );exit(1);}  
int nf,cf,i;
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
 for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
  {double*c=circ[nf]+cf*N2pi; //a particular circus
   for(i=0;i<N2pi;i++)fprintf(fl," %.3e",c[i]);
  }
fclose(fl);
};//END void writeMatrixDouble

//%%%%%%%%%%%%%%%%%%%%%%%  Write pgm "P5" from "int *", Ngray=255
void pgmP5Write(char *fullname,
                  int xSize, int ySize,
                  unsigned char *retina2D)
{  FILE *pgmPict;
pgmPict=fopen(fullname,"wb"); 
fprintf(pgmPict,"P5\n");fprintf(pgmPict,"%d %d\n%d\n",xSize,ySize,255);
int rSize=xSize*ySize;
fwrite(retina2D,1,rSize,pgmPict);
//int i;for(i=0;i<rSize;i++)fputc((retina2D[i]),pgmPict);
fclose(pgmPict);
};//END void pgmP2Write
//%%%%%%%%%%%%%%%%%%%%%%%  Write in bytes
void writeMatrixSmall(char *matrixfile,
                  int xSize, int ySize, double *matrix)
{  FILE *fl;
  if( (fl  = fopen(matrixfile,"wb")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}  
int rSize=xSize*ySize;
double max=matrix[0],min=matrix[0],m;int r;
for(r=1;r<rSize;r++){m=matrix[r];if(m>max)max=m;if(m<min)min=m;}
double delta=max-min,Co; if (delta EQ 0) Co=1; else Co=255*1.0/delta;
unsigned char ss,k,u,v; packdouble(min,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
packdouble(delta,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
for(r=0;r<rSize;r++)
fputc(round(Co*(matrix[r]-min)),fl);
fclose(fl);
};//END 
void readMatrixSmall(char *matrixfile,
                  int xSize, int ySize, double *matrix)
// it is assumed that xSize and ySize are known
// and memory for matrix is allocated
{  FILE *fl;
  if( (fl  = fopen(matrixfile,"rb")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}  
int rSize=xSize*ySize; unsigned char *umat=new unsigned char[8+rSize];
fread (umat, 1, 8+rSize,fl);
double min=unpackdouble(umat[0],umat[1],umat[2],umat[3]);
double delta=unpackdouble(umat[4],umat[5],umat[6],umat[7]);
int r;
for(r=0;r<rSize;r++){matrix[r]=min+(umat[r+8]/255.0 * delta);}
fclose(fl);
delete[]umat;
};//END 
////-------------
void writeAllCircByParts(char *cfile, //"a part" has length N2pi
                  int LtrList, int LdiList, int N2pi, double **circ)
{  FILE *fl;
  if( (fl  = fopen(cfile,"wb")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",cfile);exit(1);} 
int nf,cf; 
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
 for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
   {double*c=circ[nf]+cf*N2pi; //a particular circus
    double max=c[0],min=c[0],m; int r;
    for(r=1;r<N2pi;r++){m=c[r];if(m>max)max=m;if(m<min)min=m;}
    double delta=max-min,Co; if (delta EQ 0) Co=1; else Co=255*1.0/delta;
    unsigned char ss,k,u,v; packdouble(min,&ss,&k,&u,&v);
    fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
    packdouble(delta,&ss,&k,&u,&v);
    fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
    for(r=0;r<N2pi;r++) fputc(round(Co*(c[r]-min)),fl);
   }
fclose(fl);
};//END 
void readAllCircByParts(char *cfile, //"a part" has length N2pi
                  int LtrList, int LdiList, int N2pi, double **circ)
// it is assumed that LtrList,LdiList,N2pi are known
// and memory for circ is allocated
{  FILE *fl;
  if( (fl  = fopen(cfile,"rb")) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",cfile );exit(1);} 
int nf,cf,r=0, rSize= LtrList*LdiList*(8+N2pi);
unsigned char *umat=new unsigned char[rSize];
fread (umat, 1, rSize,fl);
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
 for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
   {double*c=circ[nf]+cf*N2pi, //a particular circus
    min=unpackdouble(umat[r],umat[r+1],umat[r+2],umat[r+3]),
    delta=unpackdouble(umat[r+4],umat[r+5],umat[r+6],umat[r+7]);
    r=r+8;
    int i;for(i=0;i<N2pi;i++){c[i]=min+(umat[r++]/255.0 * delta);}
   }
fclose(fl);
delete[]umat;
};//END 

////-------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unsigned char *pgmRead(char *fullname, int *pxSize, int *pySize)
//reads pgm P2 (text) and P5 (char); Ngray<=255 only
{ 
  FILE *pgmFile; 
  if( (pgmFile  = fopen( fullname, "rb" )) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",fullname );exit(1);}  
  char line[100],shouldBeP25[2]; line[0]='#'; 
  int made,allmade=-1; int numbers[3];
  while(line[0]=='#') fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
  made=sscanf(line,"%2s %d %d %d",shouldBeP25,numbers,numbers+1,numbers+2);//matlab style of pgm
  allmade += made; int P=0;
  if(strCompare(shouldBeP25,"P2"))P=2;if(strCompare(shouldBeP25,"P5"))P=5;
  if (!((P EQ 2) || (P EQ 5))) 
        {printf(" image file %s is not P2 or P5 \n",fullname);PAU}

 
 while (allmade<3)  
  { fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
    if (line[0] EQ '#') continue;
    int num[3];
    int made1=sscanf(line,"%d %d %d",num,num+1,num+2); 
    int i=0; for(i=0;i<made1;i++) *(numbers+allmade+i)=*(num+i);
    allmade += made1;
  } 
  *pxSize=numbers[0];*pySize=numbers[1];int Ngray=numbers[2];
  if (Ngray>255) 
  {printf("\n\7 ???File '%s' is not 255 gray image\n",fullname);exit(1);}  

  int rSize=(*pxSize)*(*pySize);
  unsigned char *retina2D=new unsigned char [rSize]; 
  //unsigned char *ret=retina2D;
  int u;
  if(P EQ 2)for(int i=0;i<rSize;i++)
                {
                fscanf(pgmFile,"%d",&u);//fscanf(pgmFile,"%d",retina2D+i);
                retina2D[i]= (unsigned char) (u);
                }  
  if(P EQ 5) fread (retina2D, 1, rSize, pgmFile);        
  fclose(pgmFile); 
  return(retina2D); 
};//END.
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unsigned char*pgmRead0(int rSize0,unsigned char*retina2D,char *fullname, int *pxSize, int *pySize)
//reads pgm P2 (text) and P5 (char); Ngray<=255 only
//reads into existing array or creates bigger one
{ 
  FILE *pgmFile; 
  if( (pgmFile  = fopen( fullname, "rb" )) == NULL ) 
  {printf("\n\7 ???File '%s' was not opened\n",fullname );exit(1);}  
  char line[100],shouldBeP25[2]; line[0]='#'; 
  int made,allmade=-1; int numbers[3];
  while(line[0]=='#') fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
  made=sscanf(line,"%2s %d %d %d",shouldBeP25,numbers,numbers+1,numbers+2);//matlab style of pgm
  allmade += made; int P=0;
  if(strCompare(shouldBeP25,"P2"))P=2;if(strCompare(shouldBeP25,"P5"))P=5;
  if (!((P EQ 2) || (P EQ 5))) 
        {printf(" image file %s is not P2 or P5 \n",fullname);PAU}

 
 while (allmade<3)  
  { fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
    if (line[0] EQ '#') continue;
    int num[3];

⌨️ 快捷键说明

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