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

📄 objects0.h

📁 用于Pattern Recongnition的一个图像处理程序--Trace Transform。
💻 H
字号:
//Copyright(c)2004  Alexander Kadyrov
//**************  Modi operandi (f) and Objects (o) 
// Modus operandi is a procedure, it uses some objects whose indeces are 
//      listed in u[]
//    and computes other objects, their indeces are listed in c[].
// An object can be a number or more complicted object, 
//     like fft of a trace, inverted ("br") or sorted trace.
//    (a "trace" is an one-dimentional array tr)
// A special case of object is a functional ("fnl").  
// A set of functionals is the aim of all computations.
//    Oblects are just helping intermediate data.
// an index of modus operandi and an index of an object can be in [2..Amount-1] (0 is excluded)
//**************  The following text is not stage (ie trace,diam,circ) specific.
int const Amount=100;// index of (f) and (o) < Amount; 
//Atributes of Objects:
char *attName[Amount];
unsigned char attIsfnl[Amount];//0=non-scalar object,1=scalar object (can be fnl)
unsigned char attKind[Amount];//0=no info;1=invariant;2=sensitive
unsigned char attGray[Amount];//0=for binary trace only,1=for integer trace, 2=for double trace
unsigned char attBack[Amount];//computing along "br" back (ie reverse) trace:
// case 0 and 1 does not need a special modi operandi:
// 0 - gives the same result as conputing alolng initial trace 
// 1 - changing sign
// k>1 in object k - is computed by a separate modus and put in object k
unsigned char attSack[Amount];// computing "minus (signed) back trace"
// case 0 and 1 does not need a special modi operandi:
// 0 - gives the same result as initial trace 
// 1 - changing sign
// k>1 in object k - is computed by a separate modus and put in object k
unsigned char attHasKappa[Amount];//0 - has no Kappa, 1 - has Kappa
double           attKappa[Amount];
unsigned char attHasLambda[Amount];//0 - has no Lambda, 1 - has Lambda
double           attLambda[Amount];
double attBlank[Amount];//default value of zeros [0,0,..,0] and empty [] trace
unsigned char    attIsInteger[Amount];//0=double output,1=integer output for integer trace and dt=1


void attFill(void)//Filling attributes. Each object should be characterised here
{int k;// k must be >1
k=3;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="back (inverse) trace";
    //for non-functional these only two atts are needed
    //  (Really, they are even not needed for computations!)
k=5;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="signed back (inverse) trace";
k=6;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="abs trace";
k=33;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="Radon=integral f(t), also computes sumNeg and sumPos";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k 
    attSack[k]=1;//0=same,1=sign,k>1 in object k
    attHasKappa[k]=1;attKappa[k]=-1;
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1
k=34;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="t - median index dividing integral abs(f(t))";//out medindex;
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=1;//0=same,1=sign,k>1 in object k 
    attSack[k]=1;//0=same,1=sign,k>1 in object k
    attHasKappa[k]=1;attKappa[k]=-1;
    attHasLambda[k]=1;attLambda[k]=0;
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1

k=35;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="min";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0; //0=same,1=sign,k>1 in object k 
    attSack[k]=39;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=0;
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1

k=37;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="max";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=41;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=0;
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1
k=38;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="max abs(f(t))";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=0;
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1

k=39;//min for sr
k=41;//max for sr; 
k=43;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="(average) t-index of max abs(f(t))";
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=1;//0=same,1=sign,k>1 in object k  
    attSack[k]=1;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=-1;
    attHasLambda[k]=1;attLambda[k]=0;
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1
k=44;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="differences 1";
k=45;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="integral of |f'|   ";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=0; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output

k=46;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="integral of |f'| circular";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=0; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output

k=47;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="differences 2";
k=48;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="integral of |f''|   ";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=1; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output

k=49;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="integral of |f''| circular";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=1; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output

k=50;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="t - gravity center of abs(f(t))";
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=1;//0=same,1=sign,k>1 in object k  
    attSack[k]=1;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=-1; 
    attHasLambda[k]=1;attLambda[k]=0; 
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output
//--------------------
k=51;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="Lp quasi-norm (p=0.5) = (sumSqR)^2, where sumSqR=integral sqrt(abs(f(t))";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=0;//0=same,1=sign,k>1 in object k 
    attSack[k]=0;//0=same,1=sign,k>1 in object k
    attHasKappa[k]=1;attKappa[k]=-1;//check it later ???
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1

k=52;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="t median index dividing integral sqrt(abs(f(t)))";
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=1;//0=same,1=sign,k>1 in object k  
    attSack[k]=1;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=-1; 
    attHasLambda[k]=1;attLambda[k]=0; 
    attBlank[k]=0;
    attIsInteger[k]=0;//0=double output,1=integer output

k=53;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="Scaled trace";
k=54;
    attIsfnl[k]=0;//0=non-scalar; 1=scalar
    attName[k]="sorted sctr to the right and left of 34"; 

k=55;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="MedianW R+: f(x-c); c is median abscissa (34);\n   W=1";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=56;//0=same,1=sign,k>1 in object k 
    attSack[k]=57;//0=same,1=sign,k>1 in object k
    attHasKappa[k]=1;attKappa[k]=0;//check it later ???
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1
k=56;// see Back for the previous k
k=57;// see Sack for the previous k


k=58;
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="MedianW R+: f(t-c); c is median abscissa (34);\n   W=abs(f(t))(t-c)";
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=59;//0=same,1=sign,k>1 in object k 
    attSack[k]=60;//0=same,1=sign,k>1 in object k
    attHasKappa[k]=1;attKappa[k]=0;//check it later ???
    attHasLambda[k]=1;attLambda[k]=1;
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1
k=59;// see Back for the previous k
k=60;// see Sack for the previous k



/*
k=; // fnlG15.m
    attIsfnl[k]=1;//0=non-scalar; 1=scalar
    attName[k]="MedianW R+: |f(x-c)|; c is median abscissa (34);\n   W=sqrt(abs(f(t);"
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace
    attBack[k]=??;//0=same,1=sign,k>1 in object k  
    attSack[k]=??;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=1; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0;
    attIsInteger[k]=1;//0=double output,1=integer output
k=54; // see k=53;
*/

///////////////////////////////////////////////////////
}//END.
//Output:
double o[Amount],a[Amount];//values of scalar objects
void *po[Amount];//pointers to objects
int lbeg,lend,L;double dlt;//trace label points from,
                           //"lbeg" to "lend" (inclusive) with a gap "dlt"
                           // lbeg and lend can be negative                  
                           //then L=lend-lbeg+1 : number of used points
int start,fin,span,lstart,lfin;//start and fin are the first and the last non-zero elements of the track
                //span=fin-start+1;
                //lstart=start+lbeg;lfin=fin+lbeg=start+span-1+lbeg;

int computedby[Amount];//who computes an object? It is Modus which index is in the place of an object


⌨️ 快捷键说明

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