Пример #1
0
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");
             }
          }

    }




}
Пример #3
0
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;
}
Пример #4
0
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();
}
Пример #5
0
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()
     );
    }
}