Menu

Image processing

2010-09-02
2012-09-26
  • Damia Edora

    Damia Edora - 2010-09-02

    Hi.Hi. What I need to do if my error like this :

    12 C:\Users\myza\Documents\MATLAB\trace4all\tt.cpp In file included from
    C:\Users\myza\Documents\MATLAB\trace4all\tt.cpp
    C:\Users\myza\Documents\MATLAB\trace4all\unit2.h In function int round(double)': 150 C:\Users\myza\Documents\MATLAB\trace4all\unit2.h new declarationint
    round(double)'
    672 C:\Dev-Cpp\include\math.h ambiguates old declaration double round(double)' 150 C:\Users\myza\Documents\MATLAB\trace4all\unit2.hint round(double)' was
    declared extern' and laterstatic'
    672 C:\Dev-Cpp\include\math.h previous declaration of double round(double)' C:\Users\myza\Documents\MATLAB\trace4all\unit2.h In functionvoid
    myprintCirc(char, double, int, int)':
    360 C:\Users\myza\Documents\MATLAB\trace4all\unit2.h passing double' for converting 1 ofint abs(int)'


    This is my coding :
    //Copyright(c)2004 Alexander Kadyrov

    define USEPEANO // this line can be commented

    // USEPEANO provides Peano indexing of images to speed up
    // the Trace Transform. For some (small?) sizes it is not helpful
    //#define ROTATING_BOX // this line can be commented
    //Rotating box provides tracing lines of the same length
    //It can be useful for affine texture recognition
    // and Trace Transform in windows (ie. filtering)
    // Until now (2004) no papers published using ROTATING_BOX

    include "unit2.h"

    //#include "Peano.h" //int const maxSize=512;///??? solve this later

    include "lines3h.h" // lines3h.h instead of lines2h.h due to Peano coding

    include "objects0.h"

    //#include <vector> </vector>

    include <algorithm></algorithm>

    double debug;
    // User defined list of images:
    int LimList=0;charimList;
    // User defined lists of functionals:
    int LtrList=0,
    trList,LdiList=0,
    diList,LcirList=0,*cirList;

    include "stages0.h"

    using namespace std;

    int Verbose,Silent;

    int main(int argc, char argv ){
    //////
    *** Sparse: Analysis of arguments
    int i,i0;
    char
    minus_S="-S";//Silent
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_S))break;
    if (i0 EQ argc) Silent=0; else Silent=1;
    char
    minus_V="-V";//Verbous
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_V))break;
    if (i0 EQ argc) Verbose=0; else Verbose=1;

    ifdef ROTATING_BOX

    if (!Silent) PS("ROTATING_BOX")

    endif

    ifdef USEPEANO

    if (!Silent) PS("USEPEANO")

    endif

    charIpath;
    char
    minusIpath="-Ipath";// path to images
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusIpath))break;
    if(i0<argc-1) Ipath=argv; else Ipath="";

    charDir;
    char
    minusDir="-Dir";// path to images
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusDir))break;
    if(i0<argc-1) Dir=argv; else Dir="Outinfo/";
    if (!Silent) PV(Dir);

    charminusIfile="-Ifile";// a list of names of images in a file
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusIfile))break;
    if(i0<argc-1)
    {
    i=i0+1; FILE
    Ifile,*imfile;
    LimList=0;
    char line;

    if( (Ifile = fopen( argv_, "r" )) == NULL )
    {printf("\n\7 ??? Ifile '%s' was not opened\n",argv_ );exit(1);}
    while(!feof(Ifile)) {
    //fgets(line,100,Ifile);
    fscanf(Ifile,"%\n",line);
    sscanf(line,"%s",line);
    LimList++;}
    fclose(Ifile);

    imList=new char;
    if( (Ifile = fopen( argv_, "r" )) == NULL )
    {printf("\n\7 ??? Ifile '%s' was not opened\n",argv_ );exit(1);}
    int j=0;
    while(!feof(Ifile)) {
    //fgets(line,100,Ifile);
    fscanf(Ifile,"%\n",line);
    sscanf(line,"%s",line);
    imList=concat("",line);
    if( (imfile = fopen(concat(Ipath,imList), "r" )) == NULL )
    {printf("\n\7 ??? image file '%s' listed in '%s' was not
    opened\n",imList,argv_);exit(1);}
    fclose(imfile); // to be sure that image files exist (before computations)
    j++;}
    fclose(Ifile);
    }
    else
    {
    char
    minusI="-I";
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusI))break;
    LimList=0;
    for(i=i0+1;i<argc;i++) if(argv_ != '-') LimList++; else break;
    imList=new char*;
    for(i=i0+1;i<=i0+LimList;i++) imList=argv_;
    }

    if (!Silent) NPV(LimList) if (!Silent) PV(Ipath) PN;
    if ((!Silent && LimList<6) || Verbose)
    for(i=0;i<LimList;i++)printf("image no.%d %s\n",i,imList_);

    char*minusT="-T";
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusT))break;
    LtrList=0;
    for(i=i0+1;i<argc;i++) if(argv_ != '-') LtrList++; else break;
    trList=new int;
    for(i=i0+1;i<=i0+LtrList;i++) trList=atoi(argv_);

    if (!Silent){PS(" -T : ")PV(LtrList)PA(trList,0,LtrList-1)}

    char*minusP="-P";
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusP))break;
    LdiList=0;
    for(i=i0+1;i<argc;i++) if(argv_ != '-') LdiList++; else break;
    diList=new int;
    for(i=i0+1;i<=i0+LdiList;i++) diList=atoi(argv_);

    if (!Silent){PS(" -P : ")PV(LdiList)PA(diList,0,LdiList-1)}

    char*minusF="-F";
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minusF))break;
    LcirList=0;
    for(i=i0+1;i<argc;i++) if(argv_ != '-') LcirList++; else break;
    cirList=new int;
    for(i=i0+1;i<=i0+LcirList;i++) cirList=atoi(argv_);

    if (!Silent){PS(" -F : ")PV(LcirList)PA(cirList,0,LcirList-1)}

    double dt,dp; //int ret2DCut=new int;
    char
    minus_dt="-dt";
    for(i0=0;i0<argc;i0++) if="" (strcompare(argv,minus_dt))break;<br="">if (i0 >= argc-1) dt=1.0; else dt=atof(argv);
    charminus_dp="-dp";
    for(i0=0;i0<argc;i0++) if="" (strcompare(argv,minus_dp))break;<br="">if (i0 >= argc-1) dp=1.0; else dp=atof(argv);
    char</argc;i0++)>
    minus_360="-360";
    int user360;
    for(i0=0;i0<argc;i0++) if="" (strcompare(argv,minus_360))break;<br="">if (i0 >= argc-1) user360=128; else user360=atoi(argv);
    int Nfi4= (user360+3) / 4; </argc;i0++)></argc;i0++)>

    if (!Silent) {PV(dt) PV(dp) PVN(Nfi4)}
    //// options for writing Trace matrices:
    charminus_wTtxt="-wTtxt";//write Trace Matrix in .txt double for matlab's
    textread.m
    int wTtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wTtxt))break;
    if (i0 EQ argc) wTtxt=0; else wTtxt=1;
    if (!Silent & wTtxt)PV(wTtxt)
    char
    minus_wTpgm="-wTpgm";//write Trace Matrix in .pgm for matlab's textread.m
    int wTpgm; unsigned char*Mpgm=NULL; int LMpgm=0;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wTpgm))break;
    if (i0 EQ argc) wTpgm=0; else wTpgm=1;
    if (!Silent & wTpgm)PV(wTpgm)

    charminus_wT="-wT";//write Trace Matrix in .sm ("small" format) for matlab's
    textread.m
    int wT;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wT))break;
    if (i0 EQ argc) wT=0; else wT=1;
    if (!Silent & wT)PV(wT)
    //// options for writing plain circuses:
    char
    minus_wCtxt="-wCtxt";//write circuses in files .txt for matlab's
    textread.m
    int wCtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wCtxt))break;
    if (i0 EQ argc) wCtxt=0; else wCtxt=1;
    if (!Silent & wCtxt)PV(wCtxt)

    charminus_iwCtxt="-iwCtxt";//write circuses in one .txt for matlab's
    textread.m
    int iwCtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwCtxt))break;
    if (i0 EQ argc) iwCtxt=0; else iwCtxt=1;
    if (!Silent & iwCtxt)PV(iwCtxt)
    char
    minus_wC="-wC";
    int wC;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wC))break;
    if (i0 EQ argc) wC=0; else wC=1;
    if (!Silent & wC)PV(wC)
    charminus_iwC="-iwC";
    int iwC;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwC))break;
    if (i0 EQ argc) iwC=0; else iwC=1;
    if (!Silent & iwC)PV(iwC)
    //// options for writing normalised associated circuses:
    char
    minus_wCAtxt="-wCAtxt";//write circuses in files .txt for matlab's
    textread.m
    int wCAtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wCAtxt))break;
    if (i0 EQ argc) wCAtxt=0; else wCAtxt=1;
    if (!Silent & wCAtxt)PV(wCAtxt)
    charminus_iwCAtxt="-iwCAtxt";//write circuses in one .txt for matlab's
    textread.m
    int iwCAtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwCAtxt))break;
    if (i0 EQ argc) iwCAtxt=0; else iwCAtxt=1;
    if (!Silent & iwCAtxt)PV(iwCAtxt)
    char
    minus_wCA="-wCA";
    int wCA;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wCA))break;
    if (i0 EQ argc) wCA=0; else wCA=1;
    if (!Silent & wCA)PV(wCA)
    charminus_iwCA="-iwCA";
    int iwCA;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwCA))break;
    if (i0 EQ argc) iwCA=0; else iwCA=1;
    if (!Silent & iwCA)PV(iwCA)
    //// options for writing normalised plain circuses:
    char
    minus_wCPtxt="-wCPtxt";//write circuses in files .txt for matlab's
    textread.m
    int wCPtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wCPtxt))break;
    if (i0 EQ argc) wCPtxt=0; else wCPtxt=1;
    if (!Silent & wCPtxt)PV(wCPtxt)
    charminus_iwCPtxt="-iwCPtxt";//write circuses in one .txt for matlab's
    textread.m
    int iwCPtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwCPtxt))break;
    if (i0 EQ argc) iwCPtxt=0; else iwCPtxt=1;
    if (!Silent & iwCPtxt)PV(iwCPtxt)
    char
    minus_wCP="-wCP";
    int wCP;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_wCP))break;
    if (i0 EQ argc) wCP=0; else wCP=1;
    if (!Silent & wCP)PV(wCP)
    charminus_iwCP="-iwCP";
    int iwCP;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwCP))break;
    if (i0 EQ argc) iwCP=0; else iwCP=1;
    if (!Silent & iwCP)PV(iwCP)
    //// options for writing triple features
    char
    minus_iwFtxt="-iwFtxt";
    int iwFtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwFtxt))break;
    if (i0 EQ argc) iwFtxt=0; else iwFtxt=1;
    if (!Silent & iwFtxt)PV(iwFtxt)
    charminus_iwF="-iwF";//currently is not used ????
    int iwF;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwF))break;
    if (i0 EQ argc) iwF=0; else iwF=1;
    if (!Silent & iwF)PV(iwF)
    char
    minus_iwFAtxt="-iwFAtxt";
    int iwFAtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwFAtxt))break;
    if (i0 EQ argc) iwFAtxt=0; else iwFAtxt=1;
    if (!Silent & iwFAtxt)PV(iwFAtxt)
    charminus_iwFA="-iwFA";//currently is not used ????
    int iwFA;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwFA))break;
    if (i0 EQ argc) iwFA=0; else iwFA=1;
    if (!Silent & iwFA)PV(iwFA)
    char
    minus_iwFPtxt="-iwFPtxt";
    int iwFPtxt;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwFPtxt))break;
    if (i0 EQ argc) iwFPtxt=0; else iwFPtxt=1;
    if (!Silent & iwFPtxt)PV(iwFPtxt)
    char*minus_iwFP="-iwFP";//currently is not used ????
    int iwFP;
    for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_iwFP))break;
    if (i0 EQ argc) iwFP=0; else iwFP=1;
    if (!Silent & iwFP)PV(iwFP)
    // to do : verbose
    /// text file for latest data of functionals : L lists

    /////{for(int i=0;i<argc;i++) {NPV(i) PV(argv_)};} //???
    //////****** Sparse END

    int computeNormalisedCircusesA=wCAtxt+iwCAtxt+ wCA+ iwCA +
    iwFAtxt+iwFA;
    int computeNormalisedCircusesP=
    wCPtxt+iwCPtxt+ wCP+ iwCP+
    iwFPtxt+iwFP;
    int computeNormalisors=computeNormalisedCircusesA+
    computeNormalisedCircusesP;

    attFill();
    {using namespace TRACE;
    UfVArrAssign();fillcomputedby();//attFill();fillcomputedby(); are filled
    forever
    } // - order!
    int rSize0=1; unsigned charretina=new unsigned char;
    int xSize,ySize,max2Size0=1;
    int
    dilute0=new int,dilute=new int;
    unsigned char
    Peanoretina=new unsigned char;
    intEnds=new int;int xSize0=0,ySize0=0;
    {using namespace TRACE; stagetraceBegin();dlt=dt;make_oaKcorr();}
    N2pi=4
    Nfi4; Npi=2*Nfi4;
    {using namespace DIAM; stagediam();dlt=dp;make_oaKcorr();}//-prepare room for
    circuses. This need N2pi
    {using namespace TRIPLE; stagetriple();dlt=pi2/N2pi;make_oaKcorr();}//-prepare
    room for triple features. This need N2pi

    int Lt=TRACE::LlistU,Ld=DIAM::LlistU,Lc= LtLd,Lf=TRIPLE::LlistU,Ltf=LtLd*Lf;

    int Stages=0; if(Lt){Stages++;if(Ld){Stages++;if(Lf)Stages++;}}//0,1,2,or 3
    stages
    if (!Silent) printf("\nThe program proceeds %d stage(s) from
    TRACE,DIAM,TRIPLE\n",Stages);
    /// writng file functionalsList.txt
    FILE fl;charfunctionalsList=concat(Dir,"functionalsList.txt");
    if( (fl = fopen(functionalsList,"w")) == NULL )
    {printf("\n\7 ???File '%s' was not opened for
    writing\n",functionalsList);exit(1);}
    fprintf(fl," %d %d %d %d %d",Stages,Lt,Ld,Lf,N2pi);
    //fprintf(fl," %s "," these are: Stages,Lt,Ld,Lf,N2pi");
    {int i;for(i=0;i<Lt;i++) fprintf(fl," %d",TRACE::listU_);
    for(i=0;i<Ld;i++) fprintf(fl," %d",DIAM::listU_);
    for(i=0;i<Lf;i++) fprintf(fl," %d",TRIPLE::listU_);
    //??????? UNCOMMENT THIS LATER !!!!!
    }
    fclose(fl);

    int circIsUomega;double circUomega;
    int *circAuthorNormalisor;//can it generate standard affine normalisor?
    if (Lc)
    { circIsUomega=new int;circUomega=new double;circAuthorNormalisor=new int;
    for(int nf=0;nf<Lt;nf++)
    { int tfnl=TRACE::listU;
    for (int cf=0;cf<DIAM::LlistU;cf++)
    { int cfnl=DIAM::listU; int rem=
    circIsUomega=attHasLambda && attHasKappa && attHasLambda;
    if(rem)
    {circUomega=attLambda * attKappa - attLambda;
    if (abs(circUomega)<0.00001)circUomega=0;
    }
    else circUomega=0;
    circAuthorNormalisor=
    (attKind EQ 1)&&(attKind EQ 1)&&circIsUomega;
    // both are invariant and uomega exist -
    // my current assumption
    }
    }
    }
    if(Verbose){PN;PA(circIsUomega,0,Lc-1);PA(circUomega,0,Lc-1);
    PA(circAuthorNormalisor,0,Lc-1);}

    double NormMaxAngle,NormBeta;
    if (computeNormalisors){ NormMaxAngle=new double;NormBeta=new double;}

    // working with a picture
    ///*****THE BIG IMAGE LOOP***///
    int imNo; char
    DirTrMatrs=concat(Dir,"TrMatrs/");
    char
    DirCircuses=concat(Dir,"Circuses/");
    char
    DirTriple=concat(Dir,"Triple/");

    {for (imNo=0;imNo<LimList;imNo++){ //THE BIG IMAGE LOOP
    if(Verbose){timer1start(); timer2start();}
    charfullname=imList; charnameNE=removeExtention(fullname);
    charnameNE_T=concat(nameNE,"T");
    if(Verbose)printf("\n
    ***Working with image no.%d '%s'\n",imNo,fullname);
    //unsigned char
    retina=pgmRead(concat(Ipath,fullname),&xSize,&ySize);
    retina=pgmRead0(rSize0,retina,concat(Ipath,fullname),&xSize,&ySize);

    int rSize=xSize*ySize;
    if(Verbose){PV(xSize)PV(ySize)}

    ifdef USEPEANO //////////////////////PEANO STARTS

    int maxSize=maxI(xSize,ySize);
    int deg=int(ceil(-0.0001+log(maxSize)/log(2))); //PVN(deg);
    int max2Size=1<<deg;<br>if (max2Size>max2Size0)
    {deletedilute0;dilute0=new int;
    deletedilute;dilute=new int;
    deletePeanoretina;Peanoretina=new unsigned char; </deg;<br>

    for(int i=0;i<max2Size;i++)
    {int iD=0;
    for(int d=0;d<deg;d++) iD+=((1<<d)&i)<<d;
    //dilute_=iD;dilute0_=( unsigned short)(iD<<1);
    dilute_=iD;dilute0_=iD<<1;
    }
    max2Size0=max2Size;
    }
    //unsigned char Peanoretina;
    //unsigned charPeanoretina=new unsigned char;
    {int x,y,l=0,d0y;
    for(y=0;y<ySize;y++)
    {d0y=dilute0;l=xSize
    y;
    for(x=0;x<xSize;x++)Peanoretina[dilute+d0y]=retina;
    }
    }

    endif ///////////////END PEANO

    //N2pi=4Nfi4; Npi=2Nfi4;
    if(Verbose)tic(7);
    int MaxInd_p,Enfi1,Ltr;

    ifdef ROTATING_BOX

    if ((xSize != xSize0) || (ySize != ySize0))
    {deleteEnds;Ends=allEndsRotatingBox (xSize,ySize,Nfi4,dp,dt,
    &MaxInd_p,&Enfi1,&Ltr);}
    if(Verbose)Toc(7,"allEndsRotatingBox ");

    else

    int Lrulelines,Llines;//these variables are udes in "alllines",
    //We do not use "alllines" as it seems does not speed up
    if ((xSize != xSize0) || (ySize != ySize0))
    {deleteEnds;
    Ends= allEnds(xSize,ySize,Nfi4,dp,dt,
    &MaxInd_p,&Lrulelines,&Llines,&Enfi1,&Ltr);}
    if(Verbose)Toc(7,"allEnds ");

    endif

    ////////////////ALLLINES IMITATION

    ifdef USEPEANO

    //PSN(" USEPEANO: Peano indexing")

    else

    //PSN(" Standard indexing")

    endif

    {using namespace TRACE; dimp=2*MaxInd_p+1;dlt=dt;//stagetrace();
    if(Verbose){NPV(dimp);PVN(MaxInd_p)}

    if (Ltr>ML)
    { deletetr;tr=new unsigned char; ML=Ltr;}
    stagetraceForAnImage();//it is after ML is renewed -- append room for trace
    matrices
    objectsMemoryConstructor();//it is after ML is renewed

    unsigned char*trC;//"tr" stands for track

    //void alllines(int Ends,int Nfi4,int xSize,
    // int
    rulelines,int *lines,int Enfi1)
    if(Verbose)tic(11);

    ifdef ROTATING_BOX

    int NP=2MaxInd_p+1;// - number of lines for ANY fi in the Box
    L=Ltr; lend= (L/2);lbeg= -lend;
    int E=0,rl=0,l=0,xB,yB,Count1,it,xSizeBN=xSize
    BN,
    xB_inc,yB_inc;
    for (nfi=0;nfi<=Nfi4;nfi++)
    {E++;//skip nfi
    npshift= MaxInd_p-((NP-1)>>1);//npshift here should be always=0
    xB_inc=Ends;yB_inc=Ends;
    for (np=0;np<NP;np++)
    {
    xB=Ends;
    yB=Ends;
    trC=tr;
    for (it=L;it--;) // line is traced:
    {

    else

    int E=0,EndsTemp=Ends,rl=0,l=0,NP,xB,yB,Count1,it,xSizeBN=xSizeBN,
    xB_inc,yB_inc;
    for (nfi=0;nfi<=Nfi4;nfi++)
    {E++;Ends++;//skip nfi
    NP=(Ends++);// - NP=2Np+1 - number of lines for given fi
    npshift= MaxInd_p-((NP-1)>>1);
    xB_inc=(Ends++);yB_inc=(Ends++);
    for (np=0;np<NP;np++)
    { lbeg=(Ends++);
    lend=(
    Ends++);
    xB=(Ends++);
    yB=(
    Ends++);
    L=lend-lbeg+1;trC=tr;
    for (int it=L;it;it--) // line is traced:
    {

    endif

    ifdef USEPEANO

    *trC++=Peanoretina[dilute+dilute0];

    else

    *trC++=retina;

    endif

    xB += xB_inc;
    yB += yB_inc;
    }
    computeObjects_giveBackAdj();//tr,lbeg,lend,L,dlt; - should be defined
    writeObjects();
    }//for (np
    }//for (nfi=

    ifdef ROTATING_BOX

    E=Enfi1;
    Count1=lend-lbeg;
    int Nfi=2Nfi4;
    for (nfi=Nfi-1;nfi>Nfi4;nfi--)//nfi is in reverse order
    {E++;//skip nfi
    npshift= MaxInd_p-((NP-1)>>1);
    xB_inc=Ends;yB_inc=-Ends;
    for (np=0;np<NP;np++)
    { xB=xSizeBN-Ends-xB_inc
    Count1;//take out??
    yB=Ends-yB_inc*Count1;
    trC=tr;
    for (it=L;it--;) // line is traced:
    {

    else

    E=Enfi1; Ends=EndsTemp+Enfi1;
    int Nfi=2Nfi4;
    for (nfi=Nfi-1;nfi>Nfi4;nfi--)//nfi is in reverse order
    {E++;Ends++;//skip nfi
    NP=(
    Ends++); // should be NP=2Np+1
    npshift= MaxInd_p-((NP-1)>>1);
    xB_inc=(
    Ends++);yB_inc=-(Ends++);
    for (np=0;np<NP;np++)
    { lend=-(
    Ends++);
    lbeg=-(Ends++);
    Count1=lend-lbeg;L=Count1+1;
    xB=xSizeBN-(
    Ends++)-xB_incCount1;
    yB=(
    Ends++)-yB_inc*Count1;
    trC=tr;
    for (it=L;it;it--) // line is traced:
    {

    endif

    ifdef USEPEANO

    *trC++=Peanoretina[dilute+dilute0];

    else

    *trC++=retina;

    endif

    xB += xB_inc;
    yB += yB_inc;
    }
    computeObjects_giveBackAdj();//tr,lbeg,lend,L,dlt; - should be defined
    writeObjects();
    }//for (np
    }//for (nfi=

    ifndef ROTATING_BOX

    Ends=EndsTemp;

    endif

    ////////////////END ALLLINES IMITATION
    if(Verbose)Toc(11,"Computations of all trace transforms ");//
    computeObjects_giveBackAdj();

    int nf; //write (ie. write to disk) trace matrice
    if (wTpgm || wTtxt || wT) for (nf=0;nf<LlistU;nf++)
    { int tfnl=listU; char buf;sprintf(buf,"%03i",tfnl);
    chartrMatrfile=concat(concat(DirTrMatrs,nameNE_T),buf);
    if (wTtxt) // write trace matrices in
    .txt, for matlab
    writeMatrixDouble(concat(trMatrfile,".txt"),dimp,N2pi,trMatr);
    if (wT) // write trace matrices in small format .sm
    writeMatrixSmall(concat(trMatrfile, ".sm"),dimp,N2pi,trMatr);
    if (wTpgm) // write trace matrices in small format
    .sm
    { int LTM=dimpN2pi,i; unsigned char uc;
    if(LMpgm<LTM){deleteMpgm;Mpgm=new unsigned char;LMpgm=LTM;}
    double
    TM=trMatr,t,delta,min=TM,max=TM;
    for (i=1;i<LTM;i++)
    {t=TM_;if(t<min)min=t;if(t>max)max=t;}
    delta=max-min; if (delta EQ 0) delta=1;
    for (i=0;i<LTM;i++)
    { uc=round((TM_-min)/delta*255);Mpgm_=uc;}
    pgmP5Write(concat(trMatrfile, ".pgm"),
    dimp,N2pi,Mpgm); </min)min=t;if(t>

    }

    }

    }//END: using namespace TRACE; dimp=2*MaxInd_p+1;dlt=dt;stagetrace();
    rSize0=rSize;xSize0=xSize;ySize0=ySize;
    if(Verbose){PN Timer1result("stage TRACE took including reading the image and
    writing");}
    //======== trace matrices are computed for image imNo.
    if (LdiList EQ 0) continue; //that is go to consider another image = another
    imNo

    {using namespace DIAM;
    if(Verbose)tic(321);
    L=dimp;dlt=dp;lbeg=-MaxInd_p;lend=MaxInd_p;
    ////the folowing two lines should be done for each image
    ML=dimp;//trace length = length of trace matrices along p-coordinate
    objectsMemoryConstructor();

    fillCircuses();//before calling this, fill DIAM::dlt=dp;
    if(Verbose){PN Toc(321,"plain circuses are filled:");} //exit(0);
    //======== Now plain circuses are ready, they are in double**circ

    //__ writing down (plain) circuses:
    double cW=circ;// - circuses to write down. Change 6 variables in if() only
    and extensions
    if(iwCtxt) writeAllCircDouble(concat(concat(DirCircuses,nameNE),"C.txt"),
    LtrList,LdiList,N2pi,cW);
    if(iwC) writeAllCircByParts(concat(concat(DirCircuses,nameNE),"C.sc"),
    LtrList,LdiList,N2pi,cW);
    // circus for trace functional No.No.nf
    // circus functional No.No. cf starts from
    // cW+cf
    N2pi and takes N2pi double elements:
    int nf;
    if (wCtxt || wC) for (nf=0;nf<TRACE::LlistU;nf++)//writes text for matlab
    { int tfnl=TRACE::listU; char buf;sprintf(buf,"%03i",tfnl);
    char
    trMatrfileBare=//"Bare" means it is without extention
    concat(concat(concat(DirCircuses,nameNE_T),buf),"C");
    for (int cf=0;cf<LlistU;cf++)
    { int cfnl=listU; sprintf(buf,"%03i",cfnl);
    charcircfile=concat(trMatrfileBare,buf);
    if (wCtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cf
    N2pi);
    if (wC) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
    }
    }
    //END__ writing down (plain) circuses.
    //
    _______ Computing normalisors:
    double dfi=2
    pi/N2pi;
    if (computeNormalisors)
    for (nf=0;nf<Lt;nf++)
    { int i,tfnl=TRACE::listU;
    for (int cf=0;cf<LlistU;cf++)//in this namespace "LlistU" is "Ld";
    { int cfnl=listU;
    if(circAuthorNormalisor)
    {double ci=circ+cfN2pi;//- pointer to a given circus NoNo=(nf,cf)
    double cA=circA+cfN2pi;//- pointer to a given assoc.circus NoNo=(nf,cf)
    //PA(ci,0,N2pi-1);PN; ???
    double uomega = circUomega;// uomega=lambdaPkappaT-kappaP;
    // compute associated circus circA:
    if (uomega)
    for(i=0;i<n2pi;i++)<br>{double absc=fabs(ci_);double sign=ci_>0?1.0:-1.0;
    cA_=0;
    if(absc)cA_= sign</n2pi;i++)<br>
    exp(uomegalog(absc));//associated circus, simplest case
    }
    else//ie. uomega EQ 0
    {
    cA=ci-ci;cA=ci-ci;
    for(i=1;i<n2pi-1;i++) ca_="ci-ci;&lt;br">double Co=2*dfi;
    for(i=0;i\<n2pi;i++) associated="" circus="" for="" uomega="" eq="" 0<br="">cA_=sqrt(Co*fabs(cA_))*(cA_>=0?1.0:-1.0);
    }
    // affinely normalising parameters of the associated circus circA:
    double a0=0,a2=0,b2=0,ciA4,fi;
    for(i=0;i\<n2pi;i++) find="" corresponding="" normalisor<br="">{ciA4=cA_*cA_;ciA4=ciA4*ciA4;//cA^4
    fi=i*dfi;
    a0+=ciA4; a2+=cos(2*fi)*ciA4;b2+=sin(2*fi)*ciA4;
    }
    a0=a0/8;a2=a2/8;b2=b2/8;
    double
    maxAngle = atan2(b2,a2)/2, minAngle=maxAngle+pi/2,
    maxValue = a0+a2*cos(2*maxAngle)+b2*sin(2*maxAngle),//=sigma1
    minValue = a0+a2*cos(2*minAngle)+b2*sin(2*minAngle),//=sigma2
    beta=0;
    if ( maxValue>0 && minValue>0 )beta = sqrt(sqrt(minValue/maxValue));
    //0<=beta<=1 // normalisor is ready
    /// normalisor is a pair (maxAngle,beta);
    /// normalisor is found
    NormMaxAngle=maxAngle; NormBeta=beta;
    }// if(circAuthorNormalisor)
    else// case when the circus is not the author: no normalisor:
    { double </n2pi;i++)></n2pi;i++)></n2pi-1;i++)>
    cA=circA+cf*N2pi;//- pointer to a given assoc.circus NoNo=(nf,cf)
    for(i=0;i<N2pi;i++)cA_=0;
    NormMaxAngle=1; NormBeta=0;}//
    }}// if (computeNormalisors) Result: if normalor does not exist, beta=0
    if (Verbose && computeNormalisors) {PN PA(NormMaxAngle,0,Lc-1);
    PA(NormBeta,0,Lc-1);}//???DEBUG
    //END______ Computing normalisors

    //___ Computing normalised circuses:
    if(computeNormalisedCircusesP || computeNormalisedCircusesA)
    for (nf=0;nf<Lt;nf++)
    for (int cf=0;cf<LlistU;cf++)//in this namespace "LlistU" is "Ld";
    { double uomegaNative=circUomega; double maxAngle,beta;
    double c=circ+cfN2pi,cA=circA+cfN2pi,
    ciPN=circPN+cfN2pi,ciAN=circAN+cfN2pi;

    //choose normalisor: ??????
    // if (circAuthorNormalisor)
    {maxAngle=NormMaxAngle,beta=NormBeta;}
    //????????????????????? this works only for invariant circuses

    if(computeNormalisedCircusesP)
    normalising(maxAngle,beta,N2pi,c,uomegaNative, //normalisation of plain circus
    ciPN);
    if(computeNormalisedCircusesA)
    normalising(maxAngle,beta,N2pi,cA,-1.0,//normalisation of assoc. circus
    ciAN);
    }//for (int cf=0;cf<LlistU;cf++)
    //END______ Computing normalised circuses

    //__ writing down plain normalised circuses:
    cW=circPN;// - circuses to write down. Change 6 variables in if() only and
    extensions
    if(iwCPtxt) writeAllCircDouble(concat(concat(DirCircuses,nameNE),"CP.txt"),
    LtrList,LdiList,N2pi,cW);
    if(iwCP) writeAllCircByParts(concat(concat(DirCircuses,nameNE),"CP.sc"),
    LtrList,LdiList,N2pi,cW);

    if (wCPtxt || wCP) for (nf=0;nf<TRACE::LlistU;nf++)//writes text for matlab
    { int tfnl=TRACE::listU; char buf;sprintf(buf,"%03i",tfnl);
    chartrMatrfileBare=//"Bare" means it is without extention
    concat(concat(concat(DirCircuses,nameNE_T),buf),"CP");
    for (int cf=0;cf<LlistU;cf++)
    { int cfnl=listU; sprintf(buf,"%03i",cfnl);
    char
    circfile=concat(trMatrfileBare,buf);
    if (wCPtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
    if (wCP) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cf
    N2pi);
    }
    }
    //END______ writing down plain normalised circuses.

    //__ writing down assoc. normalised circuses:
    cW=circAN;// - circuses to write down. Change 6 variables in if() only and
    extensions
    if(iwCAtxt) writeAllCircDouble(concat(concat(DirCircuses,nameNE),"CA.txt"),
    LtrList,LdiList,N2pi,cW);
    if(iwCA) writeAllCircByParts(concat(concat(DirCircuses,nameNE),"CA.sc"),
    LtrList,LdiList,N2pi,cW);

    if (wCAtxt || wCA) for (nf=0;nf<TRACE::LlistU;nf++)//writes text for matlab
    { int tfnl=TRACE::listU; char buf;sprintf(buf,"%03i",tfnl);
    chartrMatrfileBare=//"Bare" means it is without extention
    concat(concat(concat(DirCircuses,nameNE_T),buf),"CA");
    for (int cf=0;cf<LlistU;cf++)
    { int cfnl=listU; sprintf(buf,"%03i",cfnl);
    char
    circfile=concat(trMatrfileBare,buf);
    if (wCAtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
    if (wCA) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cf
    N2pi);
    }
    }
    //END______ writing down assoc. normalised circuses.

    if(Verbose){PN Toc(321,"overall stage DIAM took");}
    }//using namespace DIAM;

    if (Stages>2)
    {using namespace TRIPLE;
    if(Verbose)tic(333);
    L=N2pi;dlt=2*pi/N2pi;lbeg=0;lend=L-1;

    if (iwF+iwFtxt)
    {
    fillTriple(circ,triple);
    if(iwFtxt)writeMatrixDouble(concat(concat(DirTriple,nameNE),"F.txt"),Ltf,1,tri
    ple);
    //if(iwF) ???
    }
    if (iwFP+iwFPtxt)
    {
    fillTriple(circPN,triplePN);
    if(iwFPtxt)writeMatrixDouble(concat(concat(DirTriple,nameNE),"FP.txt"),Ltf,1,t
    riplePN);
    //if(iwFP) ???
    }
    if (iwFA+iwFAtxt)
    {
    fillTriple(circAN,tripleAN);
    if(iwFAtxt)writeMatrixDouble(concat(concat(DirTriple,nameNE),"FA.txt"),Ltf,1,t
    ripleAN);
    //if(iwFA) ???
    }
    if(Verbose)Toc(333,"overall stage TRIPLE took");
    }//{using namespace TRIPLE;

    if(Verbose){PN Timer2result("working with this image");}

    }}//{for (imNo=0;imNo<LimList;imNo++){ //THE BIG IMAGE LOOP

    return (0);
    }//int main(){


    This coding is about image processing. Did you ever heard of Trace Transform?
    This coding is about that. This is one of the coding file. There are a few
    more coding files to run. But must run this coding first. Can you help me on
    this?


     
  • DARC

    DARC - 2011-06-14

    Did you figure this out?

     

Log in to post a comment.