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;
charminus_S="-S";//Silent
for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_S))break;
if (i0 EQ argc) Silent=0; else Silent=1;
charminus_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;
charminusIpath="-Ipath";// path to images
for(i0=0;i0<argc;i0++) if (strCompare(argv,minusIpath))break;
if(i0<argc-1) Ipath=argv; else Ipath="";
charDir;
charminusDir="-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 (!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)
charminus_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:
charminus_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)
charminus_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:
charminus_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)
charminus_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:
charminus_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)
charminus_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
charminus_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)
charminus_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)
charminus_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 charPeanoretina=new unsigned char;
intEnds=new int;int xSize0=0,ySize0=0;
{using namespace TRACE; stagetraceBegin();dlt=dt;make_oaKcorr();}
N2pi=4Nfi4; 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; charDirTrMatrs=concat(Dir,"TrMatrs/");
charDirCircuses=concat(Dir,"Circuses/");
charDirTriple=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 charretina=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>
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 ");
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
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=xSizeBN,
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_incCount1;//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+cfN2pi 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);
chartrMatrfileBare=//"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+cfN2pi);
if (wC) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//END__ writing down (plain) circuses.
//_______ Computing normalisors:
double dfi=2pi/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;<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);
charcircfile=concat(trMatrfileBare,buf);
if (wCPtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
if (wCP) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//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);
charcircfile=concat(trMatrfileBare,buf);
if (wCAtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
if (wCA) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//END______ writing down assoc. normalised circuses.
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?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 declarationintround(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)' wasdeclared
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 functionvoidmyprintCirc(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;
charminus_S="-S";//Silent
for(i0=0;i0<argc;i0++) if (strCompare(argv,minus_S))break;
if (i0 EQ argc) Silent=0; else Silent=1;
charminus_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;
charminusIpath="-Ipath";// path to images
for(i0=0;i0<argc;i0++) if (strCompare(argv,minusIpath))break;
if(i0<argc-1) Ipath=argv; else Ipath="";
charDir;
charminusDir="-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
{
charminusI="-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;
charminus_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)
charminus_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:
charminus_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)
charminus_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:
charminus_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)
charminus_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:
charminus_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)
charminus_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
charminus_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)
charminus_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)
charminus_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 charPeanoretina=new unsigned char;
intEnds=new int;int xSize0=0,ySize0=0;
{using namespace TRACE; stagetraceBegin();dlt=dt;make_oaKcorr();}
N2pi=4Nfi4; 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; charDirTrMatrs=concat(Dir,"TrMatrs/");
charDirCircuses=concat(Dir,"Circuses/");
charDirTriple=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 charretina=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=xSizey;
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=xSizeBN,
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_incCount1;//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+cfN2pi 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);
chartrMatrfileBare=//"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+cfN2pi);
if (wC) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//END__ writing down (plain) circuses.
//_______ Computing normalisors:
double dfi=2pi/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;<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);
charcircfile=concat(trMatrfileBare,buf);
if (wCPtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
if (wCP) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//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);
charcircfile=concat(trMatrfileBare,buf);
if (wCAtxt) writeMatrixDouble(concat(circfile,".txt"),N2pi,1,cW+cfN2pi);
if (wCA) writeMatrixSmall (concat(circfile,".sm"), N2pi,1,cW+cfN2pi);
}
}
//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?
Did you figure this out?