vector<GrpVodka> Make_Grp(std::string aDir, std::string InCal, std::vector<std::string> aSetIm) { vector<GrpVodka> aVectGrpVodka; //Read InCal if (InCal!=""){ //string aPatVignette="Foc[0-9]{1,6}Diaph[0-9]{1,6}-FlatField.tif"; string aPatVignette="Foc[0-9]{4}Diaph[0-9]{3}-FlatField.tif"; list<string> aSetVignette=RegexListFileMatch(aDir + InCal,aPatVignette,1,false); unsigned nbInCal=aSetVignette.size(); for(unsigned i=0;i<nbInCal;i++){ GrpVodka aGrpVodka(atof((aSetVignette.back().substr (12,3)).c_str())/10,atof((aSetVignette.back().substr (3,4)).c_str())/10, true); aVectGrpVodka.push_back(aGrpVodka); aSetVignette.pop_back(); } cout<<"Found "<<aVectGrpVodka.size()<<" input vignette file(s)"<<endl; } //Creating a new list of images for each combination of Diaph & Foc, and recording their ExpTime and ISO for future normalisation for (int j=0;j<(int)aSetIm.size();j++){ std::string aFullName=aSetIm[j]; const cMetaDataPhoto & infoIm = cMetaDataPhoto::CreateExiv2(aDir + aFullName); cout<<"Getting Diaph and Focal from "<<aFullName<<endl; if (aVectGrpVodka.size()==0){ GrpVodka aGrpVodka(infoIm.Diaph(),infoIm.FocMm(),false); aGrpVodka.aListIm.push_back(aFullName); aGrpVodka.ExpTime.push_back(infoIm.ExpTime()); aGrpVodka.ISO.push_back(infoIm.IsoSpeed()); aVectGrpVodka.push_back(aGrpVodka); }else{ for (int i=0;i<(int)aVectGrpVodka.size();i++){ if (infoIm.Diaph()==aVectGrpVodka[i].diaph && infoIm.FocMm()==aVectGrpVodka[i].foc){ aVectGrpVodka[i].aListIm.push_back(aFullName); aVectGrpVodka[i].ExpTime.push_back(infoIm.ExpTime()); aVectGrpVodka[i].ISO.push_back(infoIm.IsoSpeed()); break; }else{if(i==(int)aVectGrpVodka.size()-1){ GrpVodka aGrpVodka(infoIm.Diaph(),infoIm.FocMm(),false); aGrpVodka.aListIm.push_back(aFullName); aGrpVodka.ExpTime.push_back(infoIm.ExpTime()); aGrpVodka.ISO.push_back(infoIm.IsoSpeed()); aVectGrpVodka.push_back(aGrpVodka); break; }else{continue;}} } } } for (int aK=0 ; aK<int(aVectGrpVodka.size()) ; aK++) { const GrpVodka & aGrp = aVectGrpVodka[aK]; std::cout << "GrpVodka, Nb=" << aGrp.aListIm.size() << " Dia=" << aGrp.diaph << " Foc=" << aGrp.foc << "\n"; } return aVectGrpVodka; }
void UseRequirement(const std::string & aDir,const cTplValGesInit<cBatchRequirement> & aTplB) { if (! aTplB.IsInit()) return; const cBatchRequirement & aBR = aTplB.Val(); for ( std::list<cExeRequired>::const_iterator itE=aBR.ExeRequired().begin(); itE!=aBR.ExeRequired().end(); itE++ ) { //std::string aCom = string("\"")+(g_externalToolHandler.get( "make" ).callName())+"\" " + itE->Exe() + " -f \"" + itE->Make() + "\""; //System(aCom); launchMake( itE->Make(), itE->Exe() ); } for ( std::list<cFileRequired>::const_iterator itF=aBR.FileRequired().begin(); itF!=aBR.FileRequired().end(); itF++ ) { int aNbMin = itF->NbMin().Val(); int aNbMax = itF->NbMax().ValWithDef(aNbMin); for ( std::list<std::string>::const_iterator itP=itF->Pattern().begin(); itP!=itF->Pattern().end(); itP++ ) { std::string aDir2,aPat2; SplitDirAndFile(aDir2,aPat2,*itP); aDir2 = aDir + aDir2; std::list<std::string> aL=RegexListFileMatch(aDir2,aPat2,1,false); int aNb = aL.size(); if ((aNb<aNbMin) || (aNb>aNbMax)) { std::cout << "For Pattern {" << aPat2 << "} Number " << aNb << " Intervalle " << aNbMin << " / " << aNbMax << "\n"; ELISE_ASSERT(false,"File number required"); } } } }
QStringList getFilenames(string aDir, string aName) { list<string> aNamelist = RegexListFileMatch(aDir, aName, 1, false); QStringList filenames; for ( list<string>::iterator itS=aNamelist.begin(); itS!=aNamelist.end(); itS++ ) filenames.push_back( QString((aDir + *itS).c_str())); return filenames; }
void Apero2PMVS(string aFullPattern, string aOri) { string aPattern,aNameDir; SplitDirAndFile(aNameDir,aPattern,aFullPattern); //Bulding the output file system ELISE_fp::MkDirRec(aNameDir + "pmvs-"+ aOri +"/models/"); ELISE_fp::MkDir(aNameDir + "pmvs-"+ aOri +"/visualize/"); ELISE_fp::MkDir(aNameDir + "pmvs-"+ aOri +"/txt/"); //Reading the list of input files list<string> ListIm=RegexListFileMatch(aNameDir,aPattern,1,false); int nbIm=ListIm.size(); cout<<"Images to process: "<<nbIm<<endl; string cmdDRUNK,cmdConv; list<string> ListDrunk,ListConvert; cInterfChantierNameManipulateur * anICNM = cInterfChantierNameManipulateur::BasicAlloc(aNameDir); //Computing PMVS orientations and writing lists of DRUNK and Convert commands for(int i=0;i<nbIm;i++) { //Reading the images list string aFullName=ListIm.front(); cout<<aFullName<<" ("<<i+1<<" of "<<nbIm<<")"<<endl; ListIm.pop_front(); //Creating the numerical format for the output files names char nb[9]; sprintf(nb, "%08d", i); //Creating the lists of DRUNK and Convert commands cmdDRUNK=MMDir() + "bin/Drunk " + aNameDir + aFullName + " " + aOri + " Out=" + "pmvs-" + aOri + "/visualize/ Talk=0"; ListDrunk.push_back(cmdDRUNK); #if (ELISE_unix || ELISE_Cygwin || ELISE_MacOs) cmdConv="convert ephemeral:" + aNameDir + "pmvs-" + aOri + "/visualize/" + aFullName + ".tif " + aNameDir + "pmvs-"+ aOri +"/visualize/"+(string)nb + ".jpg"; #endif #if (ELISE_windows) cmdConv=MMDir() + "binaire-aux/convert ephemeral:" + aNameDir + "pmvs-" + aOri + "/visualize/" + aFullName + ".tif " + aNameDir + "pmvs-"+ aOri +"/visualize/"+(string)nb + ".jpg"; #endif ListConvert.push_back(cmdConv); //Formating the camera name string aNameCam="Ori-"+aOri+"/Orientation-"+aFullName+".xml"; //Loading the camera CamStenope * aCS = CamOrientGenFromFile(aNameCam,anICNM); //Compute the Computer Vision calibration matrix ElMatrix<double> P(4,3,0.0);//Orientation (int & ext) matrix in the CV system P=OriMatrixConvertion(aCS); //Write the matrix in the PMVS fashion string oriFileName=aNameDir + "pmvs-"+ aOri +"/txt/"+(string)nb+".txt"; FILE *f = fopen(oriFileName.c_str(), "w"); fprintf(f,"CONTOUR\n"); fprintf(f,"%0.6f %0.6f %0.6f %0.6f\n", P(0,0),P(1,0),P(2,0),P(3,0)); fprintf(f,"%0.6f %0.6f %0.6f %0.6f\n", P(0,1),P(1,1),P(2,1),P(3,1)); fprintf(f,"%0.6f %0.6f %0.6f %0.6f\n", P(0,2),P(1,2),P(2,2),P(3,2)); fclose(f); delete aCS; // delete anICNM; => OBJET A NE PAS DETRUIRE ... }//end of "for each image" //Undistorting the images with Drunk cout<<"Undistorting the images with Drunk"<<endl; cEl_GPAO::DoComInParal(ListDrunk,aNameDir + "MkDrunk"); //Converting into .jpg (pmvs can't use .tif) with Convert cout<<"Converting into .jpg"<<endl; cEl_GPAO::DoComInParal(ListConvert,aNameDir + "MkConvert"); // Write the options file with basic parameters cout<<"Writing the option file"<<endl; string optFileName=aNameDir + "pmvs-"+ aOri +"/pmvs_options.txt"; FILE *f_opt = fopen(optFileName.c_str(), "w"); fprintf(f_opt, "level 1\n"); fprintf(f_opt, "csize 2\n"); fprintf(f_opt, "threshold 0.7\n"); fprintf(f_opt, "wsize 7\n"); fprintf(f_opt, "minImageNum 3\n"); fprintf(f_opt, "CPU 4\n"); fprintf(f_opt, "setEdge 0\n"); fprintf(f_opt, "useBound 0\n"); fprintf(f_opt, "useVisData 0\n"); fprintf(f_opt, "sequence -1\n"); fprintf(f_opt, "timages -1 0 %d\n", nbIm); fprintf(f_opt, "oimages -3\n"); fclose(f_opt); Apero2PMVS_Banniere(); }
void Drunk(string aFullPattern,string aOri,string DirOut, bool Talk) { string aPattern,aNameDir; SplitDirAndFile(aNameDir,aPattern,aFullPattern); //Reading input files list<string> ListIm=RegexListFileMatch(aNameDir,aPattern,1,false); int nbIm=ListIm.size(); if (Talk){cout<<"Images to process: "<<nbIm<<endl;} //Paralelizing (an instance of Drunk is called for each image) string cmdDRUNK; list<string> ListDrunk; if(nbIm!=1) { for(int i=1;i<=nbIm;i++) { string aFullName=ListIm.front(); ListIm.pop_front(); cmdDRUNK=MMDir() + "bin/Drunk " + aNameDir + aFullName + " " + aOri + " Out=" + DirOut + " Talk=0"; ListDrunk.push_back(cmdDRUNK); } cEl_GPAO::DoComInParal(ListDrunk,aNameDir + "MkDrunk"); //Calling the banner at the end if (Talk){Drunk_Banniere();} }else{ //Bulding the output file system ELISE_fp::MkDirRec(aNameDir + DirOut); //Processing the image string aNameIm=ListIm.front(); string aNameOut=aNameDir + DirOut + aNameIm + ".tif"; //Loading the camera string aNameCam="Ori-"+aOri+"/Orientation-"+aNameIm+".xml"; cInterfChantierNameManipulateur * anICNM = cInterfChantierNameManipulateur::BasicAlloc(aNameDir); CamStenope * aCam = CamOrientGenFromFile(aNameCam,anICNM); //Reading the image and creating the objects to be manipulated Tiff_Im aTF= Tiff_Im::StdConvGen(aNameDir + aNameIm,3,false); Pt2di aSz = aTF.sz(); Im2D_U_INT1 aImR(aSz.x,aSz.y); Im2D_U_INT1 aImG(aSz.x,aSz.y); Im2D_U_INT1 aImB(aSz.x,aSz.y); Im2D_U_INT1 aImROut(aSz.x,aSz.y); Im2D_U_INT1 aImGOut(aSz.x,aSz.y); Im2D_U_INT1 aImBOut(aSz.x,aSz.y); ELISE_COPY ( aTF.all_pts(), aTF.in(), Virgule(aImR.out(),aImG.out(),aImB.out()) ); U_INT1 ** aDataR = aImR.data(); U_INT1 ** aDataG = aImG.data(); U_INT1 ** aDataB = aImB.data(); U_INT1 ** aDataROut = aImROut.data(); U_INT1 ** aDataGOut = aImGOut.data(); U_INT1 ** aDataBOut = aImBOut.data(); //Parcours des points de l'image de sortie et remplissage des valeurs Pt2dr ptOut; for (int aY=0 ; aY<aSz.y ; aY++) { for (int aX=0 ; aX<aSz.x ; aX++) { ptOut=aCam->DistDirecte(Pt2dr(aX,aY)); aDataROut[aY][aX] = Reechantillonnage::biline(aDataR, aSz.x, aSz.y, ptOut); aDataGOut[aY][aX] = Reechantillonnage::biline(aDataG, aSz.x, aSz.y, ptOut); aDataBOut[aY][aX] = Reechantillonnage::biline(aDataB, aSz.x, aSz.y, ptOut); } } Tiff_Im aTOut ( aNameOut.c_str(), aSz, GenIm::u_int1, Tiff_Im::No_Compr, Tiff_Im::RGB ); ELISE_COPY ( aTOut.all_pts(), Virgule(aImROut.in(),aImGOut.in(),aImBOut.in()), aTOut.out() ); } }