int  Luc_main_corner_crop(int argc,char ** argv){

    std::string aFullPattern, cornersTxt;
    //Reading the arguments
    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aFullPattern,"Images Pattern")
                    << EAMC(cornersTxt,"Corner txt File"),
        LArgMain()
    );

    std::string aDir,aPatIm;
    SplitDirAndFile(aDir,aPatIm,aFullPattern);

    ELISE_fp::MkDirRec(aDir + "Croped_images/");

    cInterfChantierNameManipulateur * aICNM = cInterfChantierNameManipulateur::BasicAlloc(aDir);
    const std::vector<std::string> * aSetIm = aICNM->Get(aPatIm);

    std::vector<std::string> aVectIm=*aSetIm;
    int nbIm=aVectIm.size();

    vector<vector<Pt2dr> > Pts;
    vector<int> SzX, SzY;
    std::ifstream file(cornersTxt.c_str(), ios::in);
    for(int i=0 ; i<nbIm ; i++)
    {
        vector<Pt2dr> PtsIm(3);
        string name;
        file >> name >> PtsIm[0].x >> PtsIm[0].y >> name >> PtsIm[1].x >> PtsIm[1].y >> name >> PtsIm[2].x >> PtsIm[2].y;
        Pts.push_back(PtsIm);
        SzX.push_back((int)euclid(PtsIm[0], PtsIm[1])); SzY.push_back((int)euclid(PtsIm[2], PtsIm[1]));
    }

    file.close();
    cout<<Pts<<endl;
    Pt2di aCrop; int border=10;
    aCrop.x=min(*min_element(SzX.begin(), SzX.end())-2*border,*min_element(SzY.begin(), SzY.end())-2*border);
    aCrop.y=aCrop.x;
    //aCrop.x=*min_element(std::begin(SzX), std::end(SzX))-2*border;
    //aCrop.y=*min_element(std::begin(SzY), std::end(SzY))-2*border;
    cout<<"Cropping to : "<<aCrop.x<<" "<<aCrop.y<<endl;

    for(int i=0 ; i<nbIm ; i++)
    {
        double alpha=(atan((Pts[i][0].y-Pts[i][1].y)/(Pts[i][0].x-Pts[i][1].x))+atan(-(Pts[i][2].x-Pts[i][1].x)/(Pts[i][2].y-Pts[i][1].y)))/2;
        cout<<"Alpha = "<<alpha<<endl;
        RotateImage(alpha, aCrop, Pts[i], aDir, aVectIm[i]);
    }

    //Pt2dr P1,P2,P3;
    //P1.x= 795 ; P1.y= 1064;
    //P2.x= 7401; P2.y= 926 ;
    //P3.x= 7518; P3.y= 7598;
    //cout<<(P1.y-P2.y)/(P1.x-P2.x)<<endl;
    //cout<<atan((P1.y-P2.y)/(P1.x-P2.x))<<endl;
    //cout<<(P3.x-P2.x)/(P3.y-P2.y)<<endl;
    //cout<<atan((P3.x-P2.x)/(P3.y-P2.y))<<endl;
    //double aT1=atan((P1.y-P2.y)/(P1.x-P2.x));
    //double aT2=atan(-(P3.x-P2.x)/(P3.y-P2.y));
    //cout<<aT1<<" + "<<aT2<< " = " <<(aT1+aT2)<<endl;


    return 0;
}
예제 #2
0
파일: Match1.cpp 프로젝트: jakexie/micmac
int  TD_Match1_main(int argc,char ** argv)
{
	bool ByCorrel = false;
    std::string aNameI1,aNameI2;
    int aDeltaPax=100;
    int aSzW = 5;
    
    
     ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aNameI1,"Name Im1")
					<< EAMC(aNameI2,"Name Im2"),
        LArgMain()  << EAM(aDeltaPax,"DPax",true,"Delta paralax")
                    << EAM(aSzW,"SzW",true,"Size of Window, Def=5")
                    << EAM(ByCorrel,"ByCorrel",true,"By correlation")
    );
    Pt2di aP;
    // on charger nos deux images
    // image 1
    cTD_Im aI1 = cTD_Im::FromString(aNameI1);
    Pt2di aSz = aI1.Sz();
    std::string aNameMasqIm1 = std::string("Masq_") + aNameI1;
    cTD_Im aIMasq(aSz.x,aSz.y); 
    if (ELISE_fp::exist_file(aNameMasqIm1))
    {
		aIMasq = cTD_Im::FromString(aNameMasqIm1);
	}
	else
	{
	  for (aP.x=0; aP.x < aSz.x ; aP.x++)
      {
		for (aP.y=0 ; aP.y < aSz.y ; aP.y++)
		{
			aIMasq.SetVal(aP.x,aP.y,1);
		}
	  }
	}    
    
   

    
    // image 2
    cTD_Im aI2 = cTD_Im::FromString(aNameI2);
    
   //aI1 = aI1.ImageMoy(aSzW,1);
   // aI2 = aI2.ImageMoy(aSzW,1);
    
    // on crée un image pour stocker le résultat de la corrélation 
    cTD_Im aICorelMin = cTD_Im(aSz.x, aSz.y);
     // on crée la carte de profondeur
    cTD_Im aIProf = cTD_Im(aSz.x, aSz.y);
    
    for (aP.x=0; aP.x < aSz.x ; aP.x++)
    {
		if ((aP.x%50)==0) std::cout << "Reste " << aSz.x-aP.x << "\n";
		for (aP.y=0 ; aP.y < aSz.y ; aP.y++)
		{
		    float aDiffMin = Beaucoup;
		    int aPaxOpt=0;
		    Pt2di aPPax(0,0);
		    if (aIMasq.GetVal(aP.x,aP.y))
		    {
				for ( aPPax.x = -aDeltaPax ; aPPax.x<=aDeltaPax ; aPPax.x++)
				{
					Pt2di aP2 = aP+aPPax;
					if (1)
					{
						float aDiff =  ByCorrel ?
									SimilByCorrel(aSzW,aI1,aP,aI2,aP2):			                
									SimilByDif(aSzW,aI1,aP,aI2,aP2);
									
						//float aDiff =	SimilMultiW(aI1,aP,aI2,aP2);
						if  (aDiff < aDiffMin)
						{
							aDiffMin = aDiff;
							aPaxOpt = aPPax.x;
						}
					}
				}
	    	} 
			aIProf.SetVal(aP.x,aP.y,aPaxOpt);
		}
	}
	
	std::string aNameRes = "CartePax";
	aNameRes += std::string("_SzW") + ToString(aSzW);
	aNameRes +=  ByCorrel ? "Correl" :  "Dif";
	aNameRes += ".tif";
		
    aIProf.Save(aNameRes );
    
    System("to8Bits " + aNameRes + " Circ=1 Dyn=10");
    
	return EXIT_SUCCESS;
}
예제 #3
0
파일: Match1.cpp 프로젝트: jakexie/micmac
int  TD_Match2_main(int argc,char ** argv)
{

    std::string aNameI1,aNameI2;
    int aDeltaPax=100;
    int aSzW = 5;
    
    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aNameI1,"Name Im1")
					<< EAMC(aNameI2,"Name Im2"),
        LArgMain()  << EAM(aDeltaPax,"DPax",true,"Delta paralax")
                    << EAM(aSzW,"SzW",true,"Size of Window, Def=5")
    );
    
       // image 1
    cTD_Im aI1 = cTD_Im::FromString(aNameI1);
    // image 2
    cTD_Im aI2 = cTD_Im::FromString(aNameI2);
    
    //dimension de nos images, sera utile pour nos boucles
    Pt2di aSz = aI1.Sz();
    
    cTD_Im aIBestScore(aSz.x,aSz.y);
    cTD_Im aIBestPax(aSz.x,aSz.y);
    Pt2di aP;    

    for (aP.x=0; aP.x < aSz.x ; aP.x++)
    {
		for (aP.y=0 ; aP.y < aSz.y ; aP.y++)
		{
		   aIBestScore.SetVal(aP.x,aP.y,Beaucoup);
		   aIBestPax.SetVal(aP.x,aP.y,sin((float)aP.x)*30*sin((float)aP.y));
		}
	}
    
    Pt2di aPPax;
    for ( aPPax.x = -aDeltaPax ; aPPax.x<=aDeltaPax ; aPPax.x++)
	{
		std::cout << "Pax= " << aPPax.x << "\n";
		
	// Calculer images des valeurs absolue des difference trans
		cTD_Im aImDif(aSz.x,aSz.y);

		for (aP.x=0; aP.x < aSz.x ; aP.x++)
		{
			for (aP.y=0 ; aP.y < aSz.y ; aP.y++)
			{
				Pt2di aPTr = aP + aPPax;
				float aDif = 256;
				if (aI2.Ok(aPTr.x,aPTr.y))
				{
					 aDif = aI1.GetVal(aP) - aI2.GetVal(aPTr);
				}
				aImDif.SetVal(aP.x,aP.y,std::fabs(aDif));
			}
		}
		

		 //  Calculer l'image moyenne
		 
		 cTD_Im aImDifMoy = aImDif.ImageMoy(aSzW,1);

		 // Mettre a jour aIBestScore et aIBestPax
		 
		 
		for (aP.x=0; aP.x < aSz.x ; aP.x++)
		{
			for (aP.y=0 ; aP.y < aSz.y ; aP.y++)
			{
				float aDif =aImDifMoy.GetVal(aP);
				if (aDif<aIBestScore.GetVal(aP))
				{
					 aIBestScore.SetVal(aP.x,aP.y,aDif);
					 aIBestPax.SetVal(aP.x,aP.y,aPPax.x);
				}
			}
		}
	}
	aIBestPax.Save("CartePax2.tif");
	
    return EXIT_SUCCESS;
}
int HomFilterMasq_main(int argc,char ** argv)
{
    // MemoArg(argc,argv);
    MMD_InitArgcArgv(argc,argv);
    std::string  aDir,aPat,aFullDir;
    bool ExpTxt=false;
    std::string PostPlan="_Masq";
    std::string KeyCalcMasq;
    std::string KeyEquivNoMasq;
    std::string MasqGlob;
    double  aResol=10;
    bool AcceptNoMask;
    std::string aPostIn= "";
    std::string aPostOut= "MasqFiltered";
    std::string aOriMasq3D,aNameMasq3D;
    cMasqBin3D * aMasq3D = 0;


    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aFullDir,"Full name (Dir+Pat)", eSAM_IsPatFile),
        LArgMain()
                    << EAM(PostPlan,"PostPlan",true,"Post to plan, Def : toto ->toto_Masq.tif like with SaisieMasq")
                    << EAM(MasqGlob,"GlobalMasq",true,"Global Masq to add to all image")
                    << EAM(KeyCalcMasq,"KeyCalculMasq",true,"For tuning masq per image")
                    << EAM(KeyEquivNoMasq,"KeyEquivNoMasq",true,"When given if KENM(i1)==KENM(i2), don't masq")
                    << EAM(aResol,"Resol",true,"Sub Resolution for masq storing, Def=10")
                    << EAM(AcceptNoMask,"ANM",true,"Accept no mask, def = true if MasqGlob and false else")
                    << EAM(ExpTxt,"ExpTxt",true,"Ascii format for in and out, def=false")
                    << EAM(aPostIn,"PostIn",true,"Post for Input dir Hom, Def=")
                    << EAM(aPostOut,"PostOut",true,"Post for Output dir Hom, Def=MasqFiltered")
                    << EAM(aOriMasq3D,"OriMasq3D",true,"Orientation for Masq 3D")
                    << EAM(aNameMasq3D,"Masq3D",true,"File of Masq3D, Def=AperiCloud_${OriMasq3D}.ply")
    );

    #if (ELISE_windows)
        replace( aFullDir.begin(), aFullDir.end(), '\\', '/' );
     #endif
    SplitDirAndFile(aDir,aPat,aFullDir);
    if (EAMIsInit(&PostPlan))
    {
        CorrecNameMasq(aDir,aPat,PostPlan);
    }

    if (!EAMIsInit(&AcceptNoMask))
       AcceptNoMask = EAMIsInit(&MasqGlob) || EAMIsInit(&aOriMasq3D);


    cInterfChantierNameManipulateur * anICNM = cInterfChantierNameManipulateur::BasicAlloc(aDir);

    std::string aKeyOri;
    if (EAMIsInit(&aOriMasq3D))
    {
        anICNM->CorrecNameOrient(aOriMasq3D);
        if (! EAMIsInit(&aNameMasq3D))
        {
              aNameMasq3D = aDir + "AperiCloud_" + aOriMasq3D + ".ply";
        }
        aMasq3D = cMasqBin3D::FromSaisieMasq3d(aDir+aNameMasq3D);
        aKeyOri = "NKS-Assoc-Im2Orient@" + aOriMasq3D;
    }

    Im2D_Bits<1>  aImMasqGlob(1,1);
    if (EAMIsInit(&MasqGlob))
       aImMasqGlob = GetMasqSubResol(aDir+MasqGlob,aResol);


    const std::vector<std::string> *  aVN = anICNM->Get(aPat);
    std::vector<Im2D_Bits<1> >  aVMasq;

     std::vector<CamStenope *> aVCam;


    for (int aKN = 0 ; aKN<int(aVN->size()) ; aKN++)
    {
        std::string aNameIm = (*aVN)[aKN];
        Tiff_Im aTF = Tiff_Im::StdConvGen(aNameIm,1,false);
        Pt2di aSzG = aTF.sz();
        Pt2di aSzR (round_ni(Pt2dr(aSzG)/aResol));
        Im2D_Bits<1> aImMasq(aSzR.x,aSzR.y,1);


        std::string aNameMasq = StdPrefix(aNameIm)+PostPlan + ".tif";
        if (EAMIsInit(&KeyCalcMasq))
        {
            aNameMasq = anICNM->Assoc1To1(KeyCalcMasq,aNameIm,true);
        }

        if (ELISE_fp::exist_file(aNameMasq))
        {
            Im2D_Bits<1> aImMasqLoc = GetMasqSubResol(aDir+aNameMasq,aResol);
            ELISE_COPY(aImMasq.all_pts(),aImMasq.in() && aImMasqLoc.in(0),aImMasq.out());
        }
        else
        {
             if (!AcceptNoMask)
             {
                 std::cout << "For Im " << aNameIm << " file " << aNameMasq << " does not exist\n";
                 ELISE_ASSERT(false,"Masq not found");
             }
        }

        if (EAMIsInit(&MasqGlob))
        {

            ELISE_COPY(aImMasq.all_pts(),aImMasq.in() && aImMasqGlob.in(0),aImMasq.out());
        }

        aVMasq.push_back(aImMasq);
        // Tiff_Im::CreateFromIm(aImMasq,"SousRes"+aNameMasq);
        if (aMasq3D!=0)
        {
            aVCam.push_back(anICNM->StdCamOfNames(aNameIm,aOriMasq3D));
        }
    }

    std::string anExt = ExpTxt ? "txt" : "dat";


    std::string aKHIn =   std::string("NKS-Assoc-CplIm2Hom@")
                       +  std::string(aPostIn)
                       +  std::string("@")
                       +  std::string(anExt);
    std::string aKHOut =   std::string("NKS-Assoc-CplIm2Hom@")
                        +  std::string(aPostOut)
                        +  std::string("@")
                       +  std::string(anExt);




    for (int aKN1 = 0 ; aKN1<int(aVN->size()) ; aKN1++)
    {
        for (int aKN2 = 0 ; aKN2<int(aVN->size()) ; aKN2++)
        {
             std::string aNameIm1 = (*aVN)[aKN1];
             std::string aNameIm2 = (*aVN)[aKN2];

             std::string aNameIn = aDir + anICNM->Assoc1To2(aKHIn,aNameIm1,aNameIm2,true);

             if (ELISE_fp::exist_file(aNameIn))
             {
                  bool UseMasq = true;
                  if (EAMIsInit(&KeyEquivNoMasq))
                  {
                       UseMasq =  (anICNM->Assoc1To1(KeyEquivNoMasq,aNameIm1,true) != anICNM->Assoc1To1(KeyEquivNoMasq,aNameIm2,true) );
                  }


                  TIm2DBits<1>  aMasq1 ( aVMasq[aKN1]);
                  TIm2DBits<1>  aMasq2 ( aVMasq[aKN2]);

                  ElPackHomologue aPackIn =  ElPackHomologue::FromFile(aNameIn);
                  ElPackHomologue aPackOut;
                  for (ElPackHomologue::const_iterator itP=aPackIn.begin(); itP!=aPackIn.end() ; itP++)
                  {
                      Pt2dr aP1 = itP->P1();
                      Pt2dr aP2 = itP->P2();
                      Pt2di aQ1 = round_ni(aP1/aResol);
                      Pt2di aQ2 = round_ni(aP2/aResol);

                      bool Ok = ((aMasq1.get(aQ1,0) && aMasq2.get(aQ2,0)) || (! UseMasq));

                      if (Ok &&  aMasq3D)
                      {
                          Pt3dr  aPTer= aVCam[aKN1]->PseudoInter(aP1,*(aVCam[aKN2]),aP2);
                          if (! aMasq3D->IsInMasq(aPTer))
                             Ok = false;
                      }  

                      if (Ok)
                      {
                          ElCplePtsHomologues aCple(aP1,aP2);
                          aPackOut.Cple_Add(aCple);
                      }
                  }
                  std::string aNameOut = aDir + anICNM->Assoc1To2(aKHOut,aNameIm1,aNameIm2,true);
                  aPackOut.StdPutInFile(aNameOut);
                  std::cout << "IN " << aNameIn << " " << aNameOut  << " UseM " << UseMasq << "\n";
             }
        }
    }
    // std::vector<cImFMasq *> mVIm;



   return 0;
}
예제 #5
0
void SaisieAppuisInit(int argc, char ** argv,
                      Pt2di &aSzW,
                      Pt2di &aNbFen,
                      std::string &aFullName,
                      std::string &aDir,
                      std::string &aName,
                      std::string &aNamePt,
                      std::string &anOri,
                      std::string &aModeOri,
                      std::string &anOut,
                      std::string &aNameAuto,
                      std::string &aPrefix2Add,
                      bool &aForceGray,
                      double &aZMoy,
                      double &aZInc)
{
    MMD_InitArgcArgv(argc,argv);

    ElInitArgMain
    (
          argc,argv,
          LArgMain()  << EAMC(aFullName,"Full name (Dir+Pattern)", eSAM_IsPatFile)
                      << EAMC(anOri,"Orientation ; NONE if not used",eSAM_IsExistDirOri)
                      << EAMC(aNamePt,"Point name, or point file name", eSAM_None)
                      << EAMC(anOut,"Output",eSAM_IsOutputFile),
          LArgMain()  << EAM(aSzW,"SzW",true,"Sz of window")
                      << EAM(aNbFen,"NbF",true,"Nb of sub window (Def depends of number of images with max of 2x2)")
                      << EAM(aNameAuto,"NameAuto",true," Prefix for automatic point creation")
                      << EAM(aPrefix2Add,"Pref2Add",true," Prefix to add during import (for bug correction ?)")
                      << EAM(aForceGray,"ForceGray",true," Force gray image, def =true")
                      << EAM(aModeOri,"OriMode", true, "Orientation type (GRID) (Def=Std)")
                      << EAM(aZMoy,"ZMoy",true,"Average Z, Mandatory in PB", eSAM_NoInit)
                      << EAM(aZInc,"ZInc",true,"Incertitude on Z, Mandatory in PB", eSAM_NoInit)
    );

    if (!MMVisualMode)
    {
        SplitDirAndFile(aDir,aName,aFullName);

        cInterfChantierNameManipulateur * aICNM = cInterfChantierNameManipulateur::BasicAlloc(aDir);
        if ((anOri!="NONE") && (aModeOri != "GRID"))
           aICNM->CorrecNameOrient(anOri);
        const cInterfChantierNameManipulateur::tSet  *  aSet = aICNM->Get(aName);

        //std::cout << "Nb Image =" << aSet->size() << "\n";
        ELISE_ASSERT(aSet->size()!=0,"No image found");

        if (aNbFen.x<0)
        {
            if (aSet->size() == 1)
            {
                aNbFen = Pt2di(1,2);
            }
            else if (aSet->size() == 2)
            {
                Tiff_Im aTF = Tiff_Im::StdConvGen(aDir+(*aSet)[0],1,false,true);
                Pt2di aSzIm = aTF.sz();
                aNbFen = (aSzIm.x>aSzIm.y) ? Pt2di(1,2) : Pt2di(2,1);
            }
            else
            {
                aNbFen = Pt2di(2,2);
            }
        }

        cResulMSO aRMSO = aICNM->MakeStdOrient(anOri,true);

        if (0)
        {
           std::cout  << "RMSO; Cam "  << aRMSO.Cam()
                      << " Nuage " <<  aRMSO.Nuage()
                      << " Ori " <<  aRMSO.IsKeyOri()
                      << "\n";
           getchar();
        }
    }
}
예제 #6
0
cAppliTarama::cAppliTarama(int argc,char ** argv) :
    cAppliWithSetImage(argc-1,argv+1,0)
{
    NoInit = "XXXXXXXXXX";

    // MemoArg(argc,argv);
    MMD_InitArgcArgv(argc,argv);
    std::string  aDir,aPat,aFullDir;
    std::string Aero;
    int  Zoom = 8;
    std::string  NOREP = "NO-REPERE";
    std::string Repere = NOREP;
    std::string DirOut = "TA";
    double   aZMoy = 0;
    int    aKNadir = -1;
    double aIncidMax = 1e5;
    bool   UnUseAXC = false;


    ElInitArgMain
    (
    argc,argv,
    LArgMain()  << EAMC(aFullDir,"Full Image (Dir+Pat)", eSAM_IsPatFile)
                    << EAMC(Aero,"Orientation", eSAM_IsExistDirOri),
    LArgMain()
                    << EAM(Zoom,"Zoom",true,"Resolution, (Def=8, must be pow of 2)")
                    << EAM(Repere,"Repere",true,"Local coordinate system as created with RepLocBascule")
                    << EAM(DirOut,"Out",true,"Directory for output (Deg=TA)")
                    << EAM(aZMoy,"ZMoy",true,"Average value of Z")
                    << EAM(aKNadir,"KNadir",true,"KBest image or Nadir (when exist)")
                    << EAM(aIncidMax,"IncMax",true,"Maximum incidence of image", eSAM_NoInit)
                    << EAM(UnUseAXC,"UnUseAXC",true,"Internal use for unamophosed ortho")
    );

    if (!MMVisualMode)
    {
#if (ELISE_windows)
        replace( aFullDir.begin(), aFullDir.end(), '\\', '/' );
#endif
        SplitDirAndFile(aDir,aPat,aFullDir);

        StdCorrecNameOrient(Aero,aDir);


        MMD_InitArgcArgv(argc,argv);

        std::string aCom =   MM3dBinFile( "MICMAC" )
                + MMDir() + std::string("include/XML_MicMac/MM-TA.xml ")
                + std::string(" WorkDir=") +aDir +  std::string(" ")
                + std::string(" +PatternAllIm=") + QUOTE(aPat) + std::string(" ")
                + std::string(" +Zoom=") + ToString(Zoom)
                + std::string(" +Aero=") + Aero
                + std::string(" +DirMEC=") + DirOut
                ;

        if (EAMIsInit(&aIncidMax))
        {
            aCom = aCom + " +DoIncid=true +IncidMax=" + ToString(aIncidMax) + " " + " +ZMoy=" + ToString(AltiMoy()) + " " ;
;
        }

        if (EAMIsInit(&aKNadir))
            aCom = aCom + " +KBestMasqNadir=" + ToString(aKNadir);

        if (EAMIsInit(&aZMoy))
        {
            aCom = aCom + " +FileZMoy=File-ZMoy.xml"
                    + " +ZMoy=" + ToString(aZMoy);
        }
        if (EAMIsInit(&UnUseAXC)) aCom = aCom + " +UnUseAXC=" + ToString(UnUseAXC);

        if (Repere!=NOREP)
        {
            bool IsOrthoXCste;
            bool IsAnamXsteOfCart;
            if (RepereIsAnam(aDir+Repere,IsOrthoXCste,IsAnamXsteOfCart))
            {
                aCom =    aCom
                        +  std::string(" +DoAnam=true ")
                        +  std::string(" +DoIncid=true ")
                        +  std::string(" +ParamAnam=") + Repere;
            }
            else
            {
                aCom =     aCom    + std::string(" +Repere=") + Repere ;
            }
        }

        std::cout << "Com = " << aCom << "\n";
        mResult = system_call(aCom.c_str());

    }
    else 
    {
       mResult = EXIT_SUCCESS;
    }
}
예제 #7
0
void SaisieAppuisPredic(int argc, char ** argv,
                      Pt2di &aSzW,
                      Pt2di &aNbFen,
                      std::string &aFullName,
                      std::string &aDir,
                      std::string &aName,
                      std::string &aNamePt,
                      std::string &anOri,
                      std::string &aModeOri,
                      std::string &aNameMesure,
                      std::string &aTypePts,
                      std::string &aMasq3D,
                      std::string &PIMsFilter,
                      double &aFlou,
                      bool &aForceGray,
                      double &aZMoy,
                      double &aZInc)
{
    MMD_InitArgcArgv(argc,argv);

    ElInitArgMain
            (
                argc,argv,
                LArgMain()  << EAMC(aFullName,"Full Name (Dir+Pattern)", eSAM_IsPatFile)
                            << EAMC(anOri,"Orientation", eSAM_IsExistDirOri)
                            << EAMC(aNamePt,"File for Ground Control Points", eSAM_IsExistFile)
                            << EAMC(aNameMesure,"File for Image Measurements", eSAM_IsExistFile),
                LArgMain()  << EAM(aSzW,"SzW",true,"Size of global window (Def 800 800)")
                            << EAM(aNbFen,"NbF",true,"Number of Sub Window (Def 2 2)")
                            << EAM(aFlou,"WBlur",true,"Size IN GROUND GEOMETRY of bluring for target")
                            << EAM(aTypePts,"Type",true,"in [MaxLoc,MinLoc,GeoCube]")
                            << EAM(aForceGray,"ForceGray",true,"Force gray image, def=true")
                            << EAM(aModeOri,"OriMode", true, "Orientation type (GRID) (Def=Std)")
                            << EAM(aZMoy,"ZMoy",true,"Average Z, Mandatory in PB", eSAM_NoInit)
                            << EAM(aZInc,"ZInc",true,"Incertitude on Z, Mandatory in PB", eSAM_NoInit)
                            << EAM(aMasq3D,"Masq3D",true,"3D Masq used for visibility", eSAM_NoInit)
                            << EAM(PIMsFilter,"PIMsF",true,"PIMs filter used for visibility", eSAM_NoInit)
                );

    if (!MMVisualMode)
    {
        aTypePts = "eNSM_" + aTypePts;

        SplitDirAndFile(aDir,aName,aFullName);


        cInterfChantierNameManipulateur * aCINM = cInterfChantierNameManipulateur::BasicAlloc(aDir);
        aCINM->CorrecNameOrient(anOri);
        const cInterfChantierNameManipulateur::tSet  *  aSet = aCINM->Get(aName);

        //std::cout << "Nb Image =" << aSet->size() << "\n";
        ELISE_ASSERT(aSet->size()!=0,"No image found");

        if (aNbFen.x<0)
        {
            if (aSet->size() == 1)
            {
                aNbFen = Pt2di(1,2);
            }
            else if (aSet->size() == 2)
            {
                Tiff_Im aTF = Tiff_Im::StdConvGen(aDir+(*aSet)[0],1,false,true);
                Pt2di aSzIm = aTF.sz();
                aNbFen = (aSzIm.x>aSzIm.y) ? Pt2di(1,2) : Pt2di(2,1);
            }
            else
            {
                aNbFen = Pt2di(2,2);
            }
        }

        aCINM->MakeStdOrient(anOri,false);
    }
}
예제 #8
0
int GCPBascule_main(int argc,char ** argv)
{
    // MemoArg(argc,argv);
    MMD_InitArgcArgv(argc,argv);
    std::string  aDir,aPat,aFullDir;


    std::string AeroOut;
    std::string AeroIn;
    std::string DicoPts;
    std::string MesureIm;
    bool        ModeL1 = false;
    bool        CPI = false;
    bool ShowUnused = true;
    bool ShowDetail = false;
    bool NLDShow = false;
    bool NLDFTR = true;

    std::string aPatNLD;
    std::vector<std::string> NLDDegX;  NLDDegX.push_back("1");  NLDDegX.push_back("X"); NLDDegX.push_back("Y");
    std::vector<std::string> NLDDegY;  NLDDegY.push_back("1");  NLDDegY.push_back("X"); NLDDegY.push_back("Y");
    std::vector<std::string> NLDDegZ;  NLDDegZ.push_back("1");  NLDDegZ.push_back("X"); NLDDegZ.push_back("X2");
/*
    Pt3di NLDDegX(1,1,1);
    Pt3di NLDDegY(1,1,1);
    Pt3di NLDDegZ(2,0,2);
*/


    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aFullDir,"Full name (Dir+Pat)", eSAM_IsPatFile)
                    << EAMC(AeroIn,"Orientation in", eSAM_IsExistDirOri)
                    << EAMC(AeroOut,"Orientation out", eSAM_IsOutputDirOri)
                    << EAMC(DicoPts,"Ground Control Points File", eSAM_IsExistFile)
                    << EAMC(MesureIm,"Image Measurements File", eSAM_IsExistFile),
        LArgMain()
                    <<  EAM(ModeL1,"L1",true,"L1 minimisation vs L2 (Def=false)", eSAM_IsBool)
                    <<  EAM(CPI,"CPI",true,"when Calib Per Image has to be used", eSAM_IsBool)
                    <<  EAM(ShowUnused,"ShowU",true,"Show unused point (def=true)", eSAM_IsBool)
                    <<  EAM(ShowDetail,"ShowD",true,"Show details (def=false)", eSAM_IsBool)
                    <<  EAM(aPatNLD,"PatNLD",true,"Pattern for Non linear deformation, with aerial like geometry (def,unused)")
                    <<  EAM(NLDDegX,"NLDegX",true,"Non Linear monoms for X, when PatNLD, (Def =[1,X,Y])")
                    <<  EAM(NLDDegY,"NLDegY",true,"Non Linear monoms for Y, when PatNLD, (Def =[1,X,Y])")
                    <<  EAM(NLDDegZ,"NLDegZ",true,"Non Linear monoms for Z, when PatNLD, (Def =[1,X,X2])")
                    <<  EAM(NLDFTR,"NLFR",true,"Non Linear : Force True Rot (Def=true)",eSAM_IsBool)
                    <<  EAM(NLDShow,"NLShow",true,"Non Linear : Show Details (Def=false)",eSAM_IsBool)
    );

    if (!MMVisualMode)
    {
    #if (ELISE_windows)
        replace( aFullDir.begin(), aFullDir.end(), '\\', '/' );
    #endif
    SplitDirAndFile(aDir,aPat,aFullDir);
    StdCorrecNameOrient(AeroIn,aDir);


    MMD_InitArgcArgv(argc,argv);

    std::string aCom =   MM3dBinFile_quotes( "Apero" )
                       + ToStrBlkCorr( MMDir()+"include/XML_MicMac/Apero-GCP-Bascule.xml" )+" "
                       + std::string(" DirectoryChantier=") +aDir +  std::string(" ")
                       + std::string(" +PatternAllIm=") + QUOTE(aPat) + std::string(" ")
                       + std::string(" +AeroIn=") + AeroIn
                       + std::string(" +AeroOut=") +  AeroOut
                       + std::string(" +DicoApp=") +  DicoPts
                       + std::string(" +SaisieIm=") +  MesureIm
                    ;

    if (EAMIsInit(&ShowUnused)) aCom = aCom + " +ShowUnused=" + ToString(ShowUnused);
    if (EAMIsInit(&ShowDetail)) aCom = aCom + " +ShowDetail=" + ToString(ShowDetail);

    if (ModeL1)
    {
        aCom = aCom+ std::string(" +L2Basc=") + ToString(!ModeL1);
    }

    if (CPI) aCom += " +CPI=true ";


    if (EAMIsInit(&aPatNLD))
    {
       aCom = aCom + " +UseNLD=true +PatNLD=" + QUOTE(aPatNLD)
                   + " +NLFlagX=" + ToString(FlagOfDeg(NLDDegX))
                   + " +NLFlagY=" + ToString(FlagOfDeg(NLDDegY))
                   + " +NLFlagZ=" + ToString(FlagOfDeg(NLDDegZ))
                   + " +NLDForceTR=" + ToString(NLDFTR)
                   + " +NLDShow=" + ToString(NLDShow)
              ;
    }


    std::cout << "Com = " << aCom << "\n";
    int aRes = System(aCom.c_str(),false,true,true);


    return aRes;

    }
    else return EXIT_SUCCESS;
}