Exemplo n.º 1
0
void cAppli_MPI2Mnt::DoAll()
{
    if (mDoMnt  ) DoMTD();
    mParamTarget =  StdGetFromSI(mTargetGeom,XML_ParamNuage3DMaille);
    if (mDoMnt  ) DoBascule();
    if (mDoMnt ) DoMerge();


    //============== Generation d'un Ori

    cXML_ParamNuage3DMaille aN =   StdGetFromSI(mDirApp+mDirBasc +mNameMerge,XML_ParamNuage3DMaille);


    cFileOriMnt  aFOM = ToFOM(aN,true);
    MakeFileXML(aFOM,mDirApp+mDirBasc +mNameOriMasq);

    double aSR = aN.SsResolRef().Val();
    int aISR = round_ni(aSR);
    ELISE_ASSERT(ElAbs(aSR-aISR)<1e-7,"cAppli_MPI2Mnt::DoAll => ToFOM");
    aFOM.NombrePixels() =  aFOM.NombrePixels()* aISR;
    aFOM.ResolutionPlani() = aFOM.ResolutionPlani() / aISR;
    aFOM.ResolutionAlti() = aFOM.ResolutionAlti() / aISR;
    MakeFileXML(aFOM,mDirApp+mDirBasc +mNameOriMerge);
    //============== Generation d'un Ori

    if (mDoOrtho) DoOrtho();
}
Exemplo n.º 2
0
void cAppli_XifGps2Xml::ExportSys(cSysCoord * aSC,const std::string & anOri)
{
    std::string aKeyExport = "NKS-Assoc-Im2Orient@-" + anOri;
    for (int aKI=0 ; aKI<int(mVIm.size()) ; aKI++)
    {
        const cIm_XifGp & anIm = mVIm[aKI];
        if (anIm.mHasPT)
        {
            cOrientationConique   anOC =  mOC0;
            anOC.Externe().Centre() = aSC->FromGeoC(anIm.mPGeoC);

            MakeFileXML(anOC,mDir+mICNM->Assoc1To1(aKeyExport,anIm.mName,true));
        }
    }
}
int  LucasChCloud_main(int argc,char ** argv)
{
  //=====================  PARAMETRES EN DUR ==============


    std::string aNameNuage,aNameOut;
    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aNameNuage,"Name input "),
        LArgMain()  << EAM(aNameOut,"Out",true)
    );



    if (! EAMIsInit(&aNameOut))
       aNameOut = DirOfFile(aNameNuage) + "TestScale_" + NameWithoutDir(aNameNuage);


  cXML_ParamNuage3DMaille aXML =   StdGetObjFromFile<cXML_ParamNuage3DMaille>
                                         (
                                               aNameNuage,
                                               StdGetFileXMLSpec("SuperposImage.xml"),
                                               "XML_ParamNuage3DMaille",
                                               "XML_ParamNuage3DMaille"
                                         );


   double aScale = 2;
   cRepereCartesien aRep;

   aRep.Ori() = Pt3dr(0,0,0);
   aRep.Ox() = Pt3dr(aScale,0,0);
   aRep.Oy() = Pt3dr(0,aScale,0);
   aRep.Oz() = Pt3dr(0,0,aScale);

    aXML.RepereGlob().SetVal(aRep);
  
    

   MakeFileXML(aXML,aNameOut);

   return 0;
}
Exemplo n.º 4
0
void TestRandomSetOfMesureSegDr()
{
    std::string aInput="/media/data1/ExempleDoc/Test-CompDrAnalogik/MesureLineImageOri.xml";
    std::string aOut="/media/data1/ExempleDoc/Test-CompDrAnalogik/MesureLineImage.xml";


    cSetOfMesureSegDr aSMS = StdGetFromPCP(aInput,SetOfMesureSegDr);

   for
   (
       std::list<cMesureAppuiSegDr1Im>::iterator itIm=aSMS.MesureAppuiSegDr1Im().begin();
       itIm!=aSMS.MesureAppuiSegDr1Im().end();
       itIm++
   )
   {
      std::string aNameIm = itIm->NameIm();
      {

         for
         (
            std::list<cOneMesureSegDr>::iterator itMes=itIm->OneMesureSegDr().begin();
            itMes!=itIm->OneMesureSegDr().end();
            itMes++
         )
         {
             Pt2dr aP1 = itMes->Pt1Im();
             Pt2dr aP2 = itMes->Pt2Im();
             SegComp aSeg(aP1,aP2);
             itMes->Pt1Im() = aSeg.from_rep_loc(Pt2dr(0.6+NRrandC(),0));
             itMes->Pt2Im() = aSeg.from_rep_loc(Pt2dr(0.4-NRrandC(),0));
         }
      }
   }

    MakeFileXML(aSMS,aOut);

    exit(0);
}
Exemplo n.º 5
0
int XifGps2Xml_main(int argc,char ** argv)
{
    MMD_InitArgcArgv(argc,argv,2);
    std::string aFullName;
    std::string  anOri;
    bool  DoRTL = true;
    std::string  aNameRTL = "RTLFromExif.xml";
    std::string  aNameSys = aNameRTL;
    double aDefZ=0;

    ElInitArgMain
    (
           argc,argv,
           LArgMain() << EAMC(aFullName,"Full Name", eSAM_IsPatFile)
                      << EAMC(anOri,"Orientation", eSAM_IsExistDirOri),
           LArgMain() << EAM(DoRTL,"DoRTL",true,"Do Local Tangent RTL (def=true)")
                      << EAM(aNameRTL,"RTL", true,"Name RTL", eSAM_IsExistFileRP)
                      << EAM(aNameSys,"SysCo",true, "System of coordinates, by default RTL created (RTLFromExif.xml)", eSAM_IsExistFileRP)
                      << EAM(aDefZ,"DefZ","Default value for altitude (def 0)")
    );

    if (MMVisualMode) return EXIT_SUCCESS;

    cAppli_XifGps2Xml anAppli(aFullName,aDefZ);

    if (DoRTL)
    {
       ELISE_ASSERT(anAppli.mNbOk!=0,"No GPS data to compute RTL reference system");
       MakeFileXML(anAppli.mSysRTL,anAppli.mDir+aNameRTL);
    }

    cSysCoord * aSysCo = cSysCoord::FromFile(anAppli.mDir + aNameSys);
    anAppli.ExportSys(aSysCo,anOri);


    return 0;
}
void cImplemBlockCam::Export(const cExportBlockCamera & aEBC)
{
    MakeFileXML(mEstimSBC,mAppli.ICNM()->Dir()+aEBC.NameFile());
}
Exemplo n.º 7
0
void cAppliOptimTriplet::Execute()
{
   ElTimer aChrono;
   if (! EAMIsInit(&mNbMaxSel))
   {
        mNbMaxSel = mQuick ? QuickDefNbMaxSel : StdDefNbMaxSel;
   }

   if (mShow) 
      mQuitExist = false;


   mNbMaxInit = mQuick ? QuickNbMaxInit   : StdNbMaxInit ;


   if (! EAMIsInit(&mShow))
       mShow  = EAMIsInit(&mSzShow);


   if (MMVisualMode) return;
   

   cNewO_OneIm * mNoIm3 = new cNewO_OneIm(*mNM,m3S.mV2);

   std::string aNameSauveXml = mNM->NameOriOptimTriplet(false,mNoIm1,mNoIm2,mNoIm3,false);
   std::string aNameSauveBin = mNM->NameOriOptimTriplet(true ,mNoIm1,mNoIm2,mNoIm3,false);

   if (ELISE_fp::exist_file(aNameSauveXml) && ELISE_fp::exist_file(aNameSauveBin) && mQuitExist)
      return ;

   std::string  aName3R = mNM->NameOriInitTriplet(true,mNoIm1,mNoIm2,mNoIm3);
   cXml_Ori3ImInit aXml3Ori = StdGetFromSI(aName3R,Xml_Ori3ImInit);

   mIms.push_back(new  cImOfTriplet(0,*this,mNoIm1,ElRotation3D::Id));
   mIms.push_back(new  cImOfTriplet(1,*this,mNoIm2,Xml2El(aXml3Ori.Ori2On1())));
   mIms.push_back(new  cImOfTriplet(2,*this,mNoIm3,Xml2El(aXml3Ori.Ori3On1())));

   mIm1 = mIms[0];
   mIm2 = mIms[1];
   mIm3 = mIms[2];
   mFoc =  1/ (  (1.0/mIm1->Foc()+1.0/mIm2->Foc()+1.0/mIm3->Foc()) / 3.0 ) ;


   // mP12 = new cPairOfTriplet(mIm1,mIm2,mIm3);
   // mP13 = new cPairOfTriplet(mIm1,mIm3,mIm2);
   // mP23 = new cPairOfTriplet(mIm2,mIm3,mIm1);
   mPairs.push_back(new cPairOfTriplet(mIm1,mIm2,mIm3));
   mPairs.push_back(new cPairOfTriplet(mIm1,mIm3,mIm2));
   mPairs.push_back(new cPairOfTriplet(mIm2,mIm3,mIm1));
   mP12 = mPairs[0];
   mP13 = mPairs[1];
   mP23 = mPairs[2];

   mNM->LoadTriplet(mIm1->Im(),mIm2->Im(),mIm3->Im(),&mIm1->VFullPtOf3(),&mIm2->VFullPtOf3(),&mIm3->VFullPtOf3());


   if (EAMIsInit(&mSzShow) && (!EAMIsInit(&mNbMaxSel)))
   {
      mNbMaxSel = ModeShowNbMaxSel;
   }

   if (mShow) 
      std::cout << "Time load " << aChrono.uval() << "\n";
   int aNb3 = round_up(CoutAttenueTetaMax(mIm2->VFullPtOf3().size() ,mNbMaxSel));
   

   mNbMaxSel = aNb3;

  //  mSel3 = IndPackReduit(mIm2->VFullPtOf3(),mNbMaxInit,mNbMaxSel);

   mSel3 = IndPackReduit(mIm2->VFullPtOf3(),mNbMaxInit,mNbMaxSel);

   for (int aK=0 ; aK<3 ; aK++)
   {
        mIms[aK]->SetReduce(mSel3);
        mFullH123.push_back(&(mIms[aK]->VFullPtOf3()));
        mRedH123.push_back(&(mIms[aK]->VRedPtOf3()));
   }

   mP12->SetPackRed(false,mNbMaxInit,mNbMaxSel,mSel3,*mFullH123[1]);
   mP23->SetPackRed(true ,mNbMaxInit,mNbMaxSel,mSel3,*mFullH123[1]);
   mP13->SetPackRed(true ,mNbMaxInit,mNbMaxSel,mSel3,*mFullH123[0]);
   mPds3 = ElMin(MaxSurPond3,(mP12->NbR()+mP13->NbR()+mP23->NbR())/double(mIm1->NbR()));


   mBestResidu =  ResiduGlob();
/*
   TestOPA(*mP12);
*/

   if (mShow) 
   {
      std::cout << "Time reduc " << aChrono.uval()   << "  Pds3=" << mPds3 << "\n";
   }

   for (int aKP=0 ; aKP<int(mPairs.size()) ; aKP++)
   {
       TestOPA(*(mPairs[aKP]));
   }

   if (mShow) 
   {
      std::cout << "Time opa " << aChrono.uval()   << "\n";
   }



   if (mShow)
   {
      std::cout << "NB TRIPLE " << mIm2->VFullPtOf3().size()  << " Resi3: " <<  ResiduTriplet() << " F " << mFoc << "\n";
      std::cout << "RESIDU/PAIRES " << mP12->ResiduMoy() << " " << mP13->ResiduMoy() << " " << mP23->ResiduMoy() << " " << "\n";
      std::cout << "R Glob " << ResiduGlob() << "\n";
   }

#if (ELISE_X11)

   if (EAMIsInit(&mSzShow))
   {
      mIm2->InitW(mSzShow);
      ShowPoints(mIm2,mP12->FullVP2(),P8COL::cyan,2);
      ShowPoints(mIm2,mP23->FullVP1(),P8COL::yellow,2);

      ShowPointSel(mIm2,mP12->VRedP2(),P8COL::cyan);
      ShowPointSel(mIm2,mP23->VRedP1(),P8COL::yellow);
      std::cout << "NB 12 " << mP12->VRedP2().size() << "\n";
      // ShowPoints(mIm2,mIm2->VFullPtOf3(),P8COL::blue,4);
      // ShowPointSel(mSel3.mVSel,mIm2,mIm2->VFullPtOf3(),P8COL::red);

      // 
      ShowPoints(mIm2,mIm2->VFullPtOf3(),P8COL::blue,2);
      ShowPointSel(mIm2,mIm2->VRedPtOf3(),P8COL::blue);


      //==================================
      mIm1->InitW(mSzShow);
      ShowPoints(mIm1,mP13->FullVP1(),P8COL::cyan,2);
      ShowPointSel(mIm1,mP13->VRedP1(),P8COL::cyan);

      ShowPoints(mIm1,mIm1->VFullPtOf3(),P8COL::blue,2);
      ShowPointSel(mIm1,mIm1->VRedPtOf3(),P8COL::blue);

      mIm2->W()->clik_in();
   }

#endif

/*
   SolveBundle3Image
   (
        mFoc,
        mIm2->Rot(),
        mIm3->Rot(),
        mFullH123,
        mP12->FullHoms(),
        mP13->FullHoms(),
        mP23->FullHoms()
   );
*/
   int aNbIterBundle = mQuick ? QuickNbIterBundle : StdNbIterBundle;
   double aBOnH;
   Pt3dr aPMed;
   SolveBundle3Image
   (
        mFoc,
        mIm2->Ori(),
        mIm3->Ori(),
        aPMed,
        aBOnH,
        mRedH123,
        mP12->RedHoms(),
        mP13->RedHoms(),
        mP23->RedHoms(),
        mPds3,
        aNbIterBundle
   );


   cXml_Ori3ImInit aXml;
   aXml.Ori2On1() = El2Xml(mIm2->Ori());
   aXml.Ori3On1() = El2Xml(mIm3->Ori());
   aXml.ResiduTriplet() = ResiduGlob();
   aXml.NbTriplet() = (int)mRedH123[0]->size();
   aXml.BSurH() = aBOnH;
   aXml.PMed() = aPMed;

   MakeFileXML(aXml,aNameSauveXml);
   MakeFileXML(aXml,aNameSauveBin);



   if (mShow)
   {
      std::cout << "NB TRIPLE " << mIm2->VFullPtOf3().size()  << " Resi3: " <<  ResiduTriplet() << " F " << mFoc << "\n";
      std::cout << "RESIDU/PAIRES " << mP12->ResiduMoy() << " " << mP13->ResiduMoy() << " " << mP23->ResiduMoy() << " " << "\n";
      std::cout << "R Glob " << ResiduGlob() << "\n";
      std::cout << "Time bundle " << aChrono.uval() << "\n";
   }


    for (int aK=0 ; aK<3 ; aK++)
    {
        delete  mPairs[aK];
        delete  mIms[aK];
    }
    mPairs.clear();
    mIms.clear();
    mFullH123.clear();
    mRedH123.clear();
}
Exemplo n.º 8
0
int ConvertRtk_main(int argc,char ** argv)
{
	std::string aDir, aFile, aOut;
	bool addInc = false;
	
	ElInitArgMain
    (
          argc, argv,
          LArgMain() << EAMC(aDir, "Directory")
					 << EAMC(aFile, "Rtk output.txt file",  eSAM_IsExistFile),
          LArgMain() << EAM(aOut,"Out",false,"output txt file name : def=Output.txt")
					 << EAM(addInc,"addInc",false,"export also uncertainty values : def=flase",eSAM_IsBool)
    );
    
    std::string aFullName = aDir+aFile;
    
    //name output .xml file
    if (aOut=="")
    {
		aOut = StdPrefixGen(aFile) + ".xml";
    }
    
    std::vector<Pt3dr> aPosList;
    std::vector<Pt3dr> aIcList;
    
    //read rtk input file
    ifstream fichier(aFullName.c_str());  								//déclaration du flux et ouverture du fichier

    if(fichier)  														// si l'ouverture a réussi
    {

		std::string ligne; 												//Une variable pour stocker les lignes lues
        
        while(!fichier.eof())
        {
			getline(fichier,ligne);
            
            if(ligne.compare(0,1,"%") == 0)								//pour sauter l'entête (toute les lignes qui commencent par "%")
            {
				std::cout << " % Skip Header Line % " << std::endl;
				std::cout << "Ligne = "<< ligne << std::endl;				
            }
            
            else if(ligne.size() != 0)       							// problème de dernière ligne du fihier
            {
				std::string s = ligne;
                std::vector<string> coord;                 
                int lowmark=-1;
                int uppermark=-1;
                
                for(unsigned int i=0;i<s.size()+1;i++)     				// parser chaque ligne par l'espace
                {
					if(std::isspace(s[i]) && (lowmark!=-1))
                    {                             
						string token = s.substr(lowmark,uppermark);                             
                        coord.push_back(token);
                        
                        //nouveau mot
                        lowmark=-1;
                        uppermark=-1;
                    }
                    else
                        if(!(std::isspace(s[i])) && (lowmark==-1))
                        {
							lowmark=i;
                            uppermark=i+1;
                        }
                        else if(!(std::isspace(s[i])) && (lowmark!=-1))
                        {
                              uppermark++;
                        }
                        else
                        {
                              lowmark=-1;
                              uppermark=-1;
                        }
                }

                      Pt3dr Pt;											//position
                      Pt3dr Ic;
                      
                      Pt.x = atof(coord[2].c_str());
                      Pt.y = atof (coord[3].c_str());
                      Pt.z = atof (coord[4].c_str());
                      
                      Ic.x = atof(coord[7].c_str());
                      Ic.y = atof(coord[8].c_str());
                      Ic.z = atof(coord[9].c_str());
                      
                      aPosList.push_back(Pt);                      
                      aIcList.push_back(Ic);                      
            }
        }
      
        fichier.close();  												// fermeture fichier
    }
    
    else
    
		std::cout<< "Erreur à l'ouverture !" << '\n';
	
	//save coordinates in a .xml file
	
	cDicoAppuisFlottant  aDico;
    for (int aKP=0 ; aKP<int(aPosList.size()) ; aKP++)
    {
		cOneAppuisDAF aOAD;
        aOAD.Pt() = aPosList[aKP];
        aOAD.Incertitude() = aIcList[aKP];

        aDico.OneAppuisDAF().push_back(aOAD);
	}

    MakeFileXML(aDico,aOut);
    
   	return EXIT_SUCCESS;
}
Exemplo n.º 9
0
int TestCam_main(int argc,char ** argv)
{
    std::string aFullName;
    std::string aNameCam;
    std::string aNameDir;
    std::string aNameTag = "OrientationConique";
    bool ExtP = false;
    bool TOC = false;
    Pt2dr TDINV;

    double X,Y,Z;
    X = Y = Z = 0;
    bool aModeGrid = false;
    std::string Out;

    ElInitArgMain
    (
    argc,argv,
    LArgMain()  << EAMC(aFullName,"File name", eSAM_IsPatFile)
                << EAMC(X,"x")
                << EAMC(Y,"y")
                << EAMC(Z,"z"),
    LArgMain()
                    << EAM(aNameTag,"Tag",true,"Tag to get cam")
                    << EAM(aModeGrid,"Grid",true,"Test Grid Mode", eSAM_IsBool)
                    << EAM(Out,"Out",true,"To Regenerate an orientation file",eSAM_NoInit)
                    << EAM(ExtP,"ExtP",true,"Detail on external parameter", eSAM_IsBool)
                    << EAM(TOC,"TOC",true,"Test corners", eSAM_IsBool)
                    << EAM(TDINV,"TDINV",true,"Test Dist Inv",eSAM_NoInit)
    );

    SplitDirAndFile(aNameDir,aNameCam,aFullName);

    cInterfChantierNameManipulateur * anICNM = cInterfChantierNameManipulateur::BasicAlloc(aNameDir);
/*
    cTplValGesInit<std::string>  aTplFCND;
    cInterfChantierNameManipulateur * anICNM =
        cInterfChantierNameManipulateur::StdAlloc(0,0,aNameDir,aTplFCND);
*/


   ElCamera * aCam  = Gen_Cam_Gen_From_File(aModeGrid,aFullName,aNameTag,anICNM);

   CamStenope * aCS = aCam->CS();

   if (ExtP)
   {
       std::cout << "  ###########  EXTERNAL ##############\n";
       if (aCS)
       {
           std::cout << "Center " << aCS->VraiOpticalCenter() << "\n";
       }
       std::cout <<  "  I : " << aCS->L3toR3(Pt3dr(1,0,0)) - aCS->L3toR3(Pt3dr(0,0,0)) << "\n";
       std::cout <<  "  J : " << aCS->L3toR3(Pt3dr(0,1,0)) - aCS->L3toR3(Pt3dr(0,0,0))<< "\n";
       std::cout <<  "  K : " << aCS->L3toR3(Pt3dr(0,0,1)) - aCS->L3toR3(Pt3dr(0,0,0))<< "\n";
       std::cout << "\n";
   }

    if (TOC)
       TestOneCorner(aCam);

    if (EAMIsInit(&TDINV))
       TestDistInv(aCam,TDINV);



   if (aModeGrid)
   {
       std::cout << "Camera is grid " << aCam->IsGrid() << " " << aCam->Dist().Type() << "\n";
   }


   TestCamCHC(*aCam);

   TestDirect(aCam,Pt3dr(X,Y,Z));

   if (Out!="")
   {
         cOrientationConique aCO = aCam->StdExportCalibGlob();
         MakeFileXML(aCO,Out);
   }

    return EXIT_SUCCESS;
}
cMA_AffineOrient::cMA_AffineOrient
(
    cAppliMICMAC &               anAppli,
    cModeleAnalytiqueComp & aModele,
    const cGeomDiscFPx &    aGeoTer,
    bool                    L1,
    const Pt2di &               aSzM,
    const ElPackHomologue &     aPackHom
)  :
   mAppli     (anAppli),
   mSzM       (aSzM),
   mImResidu  (mSzM.x,mSzM.y),
   mTImResidu (mImResidu),
   mImPds     (mSzM.x,mSzM.y),
   mTImPds    (mImPds),
   mGeoTer (aGeoTer),
   mPas    (aModele.Modele().PasCalcul()),
   mOri1   (aModele.mGeom1.GetOriNN()),
   mOri2   (aModele.mGeom2.GetOriNN()),
   mOC1    (new cOrientationConique(mOri1->StdExportCalibGlob())),
   mOC2    (new cOrientationConique(mOri2->StdExportCalibGlob())),
   // OO mOC1    (mOri1->OC() ? new cOrientationConique(*(mOri1->OC())) : 0),
   // OO mOC2    (mOri2->OC() ? new cOrientationConique(*(mOri2->OC())) : 0),
   mNbPtMin  (aModele.Modele().NbPtMinValideEqOriRel().Val()),
   mNewOri1 (*(mOri1->Dupl())),
   mNewOri2 (*(mOri2->Dupl())),
   mCam1   (*mOri1),
   mCam2   (*mOri2),
   mPack   (aPackHom),
   mSetEq  (
              (L1 ? cNameSpaceEqF::eSysL1Barrodale : cNameSpaceEqF::eSysPlein),
              mPack.size()
           ),
   mChR    (Pt3dr(0,0,0),0,0,0),
   // mSetEq (cNameSpaceEqF::eSysL1Barrodale,mPack.size()),

             // On va donner des points corriges de  la dist :
   // mPIF    (mSetEq.NewParamIntrNoDist(1.0,Pt2dr(0,0))),
   mPIF    (mSetEq.NewParamIntrNoDist(true,new CamStenopeIdeale(true,1.0,Pt2dr(0,0),aNoPAF))),

   
   mCamF1  (mPIF->NewCam
                 (
                      cNameSpaceEqF::eRotFigee,
                      mChR * mCam1.Orient().inv()
                 )
            ),
    mCamF2  (mPIF->NewCam
                 (
                      cNameSpaceEqF::eRotBaseU,
                      mChR * mCam2.Orient().inv(),
                      mCamF1
                 )
             ),
    mCpl12   (mSetEq.NewCpleCam(*mCamF1,*mCamF2)),
    mFocale  (mOri1->Focale())
{


   mSetEq.SetClosed();
   mPIF->SetFocFree(false);
   mPIF->SetPPFree(false);

   int aNbEtape = 9;
   int aFlag = 0;
   for 
   (
      std::list<int>::const_iterator itB = aModele.Modele().NumsAngleFiges().begin();
      itB != aModele.Modele().NumsAngleFiges().end();
      itB++
   )
      aFlag  |= 1 << *itB;


   for (int aK=0 ; aK<aNbEtape ; aK++)
   {
      mCamF2->RF().SetFlagAnglFige(aFlag);
/*
       mCamF2->RF().SetModeRot
       (
            (aK<3) ?
            cNameSpaceEqF::eRotCOptFige :
            cNameSpaceEqF::eRotBaseU
       );
*/
       OneItere(aK==(aNbEtape-1)); 
   }
   std::string  aName =    mAppli.FullDirResult() 
                         + std::string("Residus_Dz")
                         +  ToString(round_ni(mGeoTer.DeZoom()))
                         + std::string("_")
                         + mAppli.NameChantier() 
                         + std::string(".tif");
    Tiff_Im aFileResidu
            (
                aName.c_str(),
                mSzM,
                GenIm::u_int1,
                Tiff_Im::No_Compr,
                Tiff_Im::RGB
            );


   mNewOri2.SetOrientation(mCamF2->RF().CurRot());
   Pt3dr  aPMoy = CalcPtMoy(mNewOri1,mNewOri2);
   mNewOri1.SetAltiSol(aPMoy.z);
   mNewOri2.SetAltiSol(aPMoy.z);

   
   std::string aNAu = aModele.Modele().AutomSelExportOri().Val();
   std::string aNEx1 = aModele.Modele().AutomNamesExportOri1().Val();
   std::string aNEx2 = aModele.Modele().AutomNamesExportOri2().Val();
   std::string aNI1 = mAppli.PDV1()->Name();
   std::string aNI2 = mAppli.PDV2()->Name();
   std::string aNOri1 =   mAppli.FullDirGeom()
                        + StdNameFromCple(aModele.AutomExport(),aNAu,aNEx1,"@",aNI1,aNI2);
   std::string aNOri2 =   mAppli.FullDirGeom()
                        + StdNameFromCple(aModele.AutomExport(),aNAu,aNEx2,"@",aNI1,aNI2);

   bool aXmlRes = false;

   if (StdPostfix(aNOri1)== "xml")
   {
       aXmlRes = true;
       ELISE_ASSERT
       (
              (StdPostfix(aNOri2)=="xml")
	   && (mOC1!=0) && (mOC2!=0),
	   "Incoherence in  XML export for cMA_AffineOrient"
       );
       // Les points de verifs, si ils existent n'ont pas de raison d'etre transposables
       mOC1->Verif().SetNoInit();
       mOC2->Verif().SetNoInit();

       ElRotation3D aR1 = mCamF1->RF().CurRot();
       ElRotation3D aR2 = mCamF2->RF().CurRot();
       mOC2->Externe()  = From_Std_RAff_C2M(aR2,mOC2->Externe().ParamRotation().CodageMatr().IsInit());

       mOC1->Externe().AltiSol().SetVal(aPMoy.z);
       mOC2->Externe().AltiSol().SetVal(aPMoy.z);

       mOC1->Externe().Profondeur().SetVal(ProfFromCam(aR1.inv(),aPMoy));
       mOC2->Externe().Profondeur().SetVal(ProfFromCam(aR2.inv(),aPMoy));

   }

   TestOri1Ori2(true,*mOri1,*mOri2);
   TestOri1Ori2(true,mNewOri1,mNewOri2);
   std::cout << "ZMoyen = " << aPMoy.z  << "\n";

   Fonc_Num aFoK = (mImPds.in()>0);
   Fonc_Num aFRes = Max(0,Min(255,128.0 +mImResidu.in()*20));
   ELISE_COPY
   (
        aFileResidu.all_pts(),
          aFoK*its_to_rgb(Virgule(aFRes,3.14,32*Abs(mImResidu.in()>0.5)))
        + (1-aFoK)*Virgule(255,0,0),
        aFileResidu.out()
   );

   bool Exp1 =  aModele.Modele().AutomNamesExportOri1().IsInit();
   bool Exp2 =  aModele.Modele().AutomNamesExportOri2().IsInit();
   ELISE_ASSERT(Exp1 == Exp2,"Incoherence in AutomNamesExportOri");
   if (Exp1)
   {
      std::cout << "EXPORT   OOOOOOOOOOOOOOORI\n";
      AssertAutomSelExportOriIsInit(aModele.Modele());

      if(aXmlRes)
      {
          MakeFileXML(*mOC1,aNOri1,"MicMacForAPERO");
          MakeFileXML(*mOC2,aNOri2,"MicMacForAPERO");
      }
      else
      {
          ELISE_ASSERT(false,"Cannot write ori ");
          // OO mNewOri1.write_txt(aNOri1.c_str());
          // OO mNewOri2.write_txt(aNOri2.c_str());
      }
   }


   
   if (aModele.Modele().SigmaPixPdsExport().ValWithDef(-1) > 0)
   {
      double aPds = aModele.Modele().SigmaPixPdsExport().Val();
      for 
      (
         ElPackHomologue::iterator iT = mPack.begin();
         iT != mPack.end();
         iT++
      )
      {
          Pt2dr aQ1  = mCam1.F2toPtDirRayonL3(iT->P1());
          Pt2dr aQ2  = mCam2.F2toPtDirRayonL3(iT->P2());
          double aL =  ElAbs(mCpl12->ResiduSigneP1P2(aQ1,aQ2))*mFocale;
          double aP = ElSquare(aPds)/(ElSquare(aPds)+ElSquare(aL));
          iT->Pds() *= aP;
      }
   }
}
Exemplo n.º 11
0
void cEtapeMecComp::OneBasculeMnt
(
    Pt2di aP0Sauv,
    Pt2di aP1Sauv,
    cBasculeRes & aBR,
    float ** aDataF,
    INT2 ** aDataI,
    Pt2di   aSzData
)
{
    ELISE_ASSERT
    (
        mIsOptimCont,
        "Basculement requiert une optimisation continue "
    );

    cFileOriMnt anOri;
    if (aBR.Explicite().IsInit())
    {
        anOri = aBR.Explicite().Val();
        std::string aNameXML =    mAppli.FullDirResult()
                                  + StdPrefixGen(anOri.NameFileMnt())
                                  + std::string(".xml");
        MakeFileXML(anOri,aNameXML);
    }
    else if (aBR.ByFileNomChantier().IsInit())
    {
        std::string aNameFile =
            mAppli.WorkDir()
            +   aBR.Prefixe()
            +   (aBR.NomChantier().Val() ? mAppli.NameChantier() :"")
            +   aBR.Postfixe();


        anOri = StdGetObjFromFile<cFileOriMnt>
                (
                    aNameFile,
                    mAppli.NameSpecXML(),
                    aBR.NameTag().Val(),
                    "FileOriMnt"

                );
    }
    else
    {
        ELISE_ASSERT(false,"Internal Error cEtapeMecComp::OneBasculeMnt");
    }
    // cFileOriMnt * aPtrOri=0;
    // cFileOriMnt * aPtrOri=0;

    // cFileOriMnt & anOri = aBR.Ori();

    // std::cout << "XML MADE \n"; getchar();

    const cGeomBasculement3D * aGeomB = 0;

    if (anOri.Geometrie() == eGeomMNTEuclid)
    {
        if (
            (mAppli.GeomMNT()==eGeomMNTFaisceauIm1ZTerrain_Px1D)
            || (mAppli.GeomMNT()==eGeomMNTFaisceauIm1ZTerrain_Px2D)
        )
        {
            aGeomB = (mAppli.PDV1()->Geom().GeoTerrainIntrinseque());
        }
        /*
         CE CAS PARTICULIER VIENT DE CE QUE cGeomImage_Faisceau redifinit la methode
        Bascule. A ete utilise avec Denis Feurer & Co pour basculer en terrain
        les reultat image.
        */
        else if (
            (mAppli.GeomMNT()==eGeomMNTFaisceauIm1PrCh_Px1D)
            || (mAppli.GeomMNT()==eGeomMNTFaisceauIm1PrCh_Px2D)
        )
        {
            aGeomB = &(mAppli.PDV2()->Geom());
        }
        else
        {
            ELISE_ASSERT(false,"Geometrie source non traitee dans le basculement");
        }
    }
    else
    {
        ELISE_ASSERT(false,"Geometrie destination non traitee dans le basculement");
    }

    Pt2dr  aP0 = mGeomTer.DiscToR2(Pt2di(0,0));
    Pt2dr  aP1 = mGeomTer.DiscToR2(Pt2di(1,1));


    cBasculeMNT   aBasc
    (
        mGeomTer,
        aP0,
        aP1-aP0,
        anOri.OriginePlani(),
        anOri.ResolutionPlani(),
        aGeomB,
        mIsOptimCont,
        aDataF,
        aDataI,
        aSzData
    );

    Pt2di anOffset;
    double aDef = -1e10;
    double aSousDef = -9e9;

    std::cout << "BEGIN BASCULE \n";
//Im2D_REAL4   aMnt=  aBasc.Basculer(anOffset,aP0Sauv,aP1Sauv,aDef);
    Im2D_REAL4   aMnt=  aBasc.BasculerAndInterpoleInverse(anOffset,aP0Sauv,aP1Sauv,(float)aDef);


    ELISE_COPY
    (
        select(aMnt.all_pts(),aMnt.in() > aSousDef),
        (aMnt.in()-anOri.OrigineAlti())/anOri.ResolutionAlti(),
        aMnt.out()
    );

    std::cout  << anOffset << " " << aMnt.sz();
    std::cout << "END  BASCULE \n";

    bool isNewFile;
    Tiff_Im aFileRes = Tiff_Im::CreateIfNeeded
                       (
                           isNewFile,
                           anOri.NameFileMnt(),
                           anOri.NombrePixels(),
                           GenIm::real4,
                           Tiff_Im::No_Compr,
                           Tiff_Im::BlackIsZero
                       );
    Tiff_Im * aFileMasq =0;
    if ( anOri.NameFileMasque().IsInit())
    {
        aFileMasq = new Tiff_Im(Tiff_Im::CreateIfNeeded
                                (
                                    isNewFile,
                                    anOri.NameFileMasque().Val(),
                                    anOri.NombrePixels(),
                                    GenIm::bits1_msbf,
                                    Tiff_Im::No_Compr,
                                    Tiff_Im::BlackIsZero
                                )
                               );
    }

    if (isNewFile)
    {
        ELISE_COPY
        (
            aFileRes.all_pts(),
            aBR.OutValue().Val(),
            aFileRes.out()
        );
        if (aFileMasq)
        {
            ELISE_COPY
            (
                aFileMasq->all_pts(),
                0,
                aFileMasq->out()
            );
        }
    }

    Im2D_REAL4 anOld(aMnt.sz().x,aMnt.sz().y);

    ELISE_COPY
    (
        anOld.all_pts(),
        trans(aFileRes.in(aBR.OutValue().Val()),anOffset),
        anOld.out()
    );
    ELISE_COPY
    (
        select(anOld.all_pts(),aMnt.in()>aSousDef),
        aMnt.in(),
        anOld.out()
    );
    ELISE_COPY
    (
        rectangle(anOffset,anOffset+aMnt.sz()),
        trans(anOld.in(),-anOffset),
        aFileRes.out()
    );

    if (aFileMasq)
    {
        ELISE_COPY
        (
            rectangle(anOffset,anOffset+aMnt.sz()),
            aFileMasq->in(0) || trans(aMnt.in()>aSousDef,-anOffset),
            aFileMasq->out()
        );
    }

    delete aFileMasq;
}
int Luc_main_XAlign(int argc,char ** argv)
{
    //MMD_InitArgcArgv(argc,argv,3);

    std::string aFilePtsIn;
    //Reading the arguments
    ElInitArgMain
    (
        argc,argv,
        LArgMain()  << EAMC(aFilePtsIn,"Input file"),
        LArgMain()
    );

    std::string aFilePtsOut="GCP_xAligned.xml";

    std::ifstream file(aFilePtsIn.c_str(), ios::in);
    int nbIm;
    file >> nbIm;
    std::vector<Pt3dr> aVPts(nbIm);
    std::vector<Pt3dr> aVInc(nbIm);
    std::vector<std::string> aVName(nbIm,"");
    for(int i=0 ; i<nbIm ; i++)
    {
        string name;
        file >> aVName[i] >> aVPts[i].x >> aVPts[i].y >> aVPts[i].z >> aVInc[i].x >> aVInc[i].y >> aVInc[i].z;
    }

    file.close();
    //Least Square

    // Create L2SysSurResol to solve least square equation with 3 unknown
    L2SysSurResol aSys(2);

    //For Each SIFT point
    double sumX=0, sumY=0;
    for(int i=0;i<int(aVPts.size());i++){
        double aPds[2]={aVPts[i].x,1};
        double poids=1;
        aSys.AddEquation(poids,aPds,aVPts[i].y);
        sumX=sumX+aVPts[i].x;
        sumY=sumY+aVPts[i].y;
    }

    Pt2dr aRotCenter; aRotCenter.x=sumX/aVPts.size();aRotCenter.y=sumY/aVPts.size();

    bool Ok;
    Im1D_REAL8 aSol = aSys.GSSR_Solve(&Ok);

    double aAngle;
    if (Ok)
    {
        double* aData = aSol.data();
        aAngle=atan(aData[0]);
        cout<<"Angle = "<<aAngle<<endl<<"Rot Center = "<<aRotCenter<<endl;

    for(int i=0;i<int(aVPts.size());i++){
        Pt2dr aPt; aPt.x=aVPts[i].x; aPt.y=aVPts[i].y;
        aPt=Rot2D(aAngle, aPt, aRotCenter);aVPts[i].x=aPt.x;aVPts[i].y=aPt.y;
    }
    }

//End Least Square

    cDicoAppuisFlottant  aDico;
    for (int aKP=0 ; aKP<int(aVPts.size()) ; aKP++)
    {
        cOneAppuisDAF aOAD;
        aOAD.Pt() = aVPts[aKP];
        aOAD.NamePt() = aVName[aKP];
        aOAD.Incertitude() = aVInc[aKP];

        aDico.OneAppuisDAF().push_back(aOAD);
    }


    MakeFileXML(aDico,aFilePtsOut);

    return 0;
}
Exemplo n.º 13
0
void ConvertOnePolygone
     (
          Pt3dr aNorm,
          std::string aNameIn,
          std::string aNameOut,
          std::string aNamePoly,
          std::string aNameMesure,
	  bool        isPonct,
	  int         aNbRelief,
	  double *    aProfRelief,
	  double *    aRayRelief,
	  bool        isSortant,
          bool        Permut
     )
{

    cPolygoneEtal * aPE = cPolygoneEtal::FromName(aNameIn,0);
    cPolygoneCalib  aPC;

    aPC.Name() = aNameMesure;




    for 
    (
         cPolygoneEtal::tContCible::const_iterator itC=aPE->ListeCible().begin();
	 itC != aPE->ListeCible().end();
	 itC++
    )
    {

       cCibleCalib aCC;
       aCC.Id() =  (*itC)->Ind() ;
       aCC.Position() = (*itC)->Pos();
       if (Permut)
       {
            Pt3dr aP = aCC.Position();
            aCC.Position() = Pt3dr(aP.z,aP.x,aP.y);
       }
       // Defaut , normale sortante IGN 
       aCC.Normale() = aNorm;
       aCC.Ponctuel() = isPonct;
       const cMirePolygonEtal & aMire  = (*itC)->Mire();

       for (int aK=0 ; aK<aMire.NbDiam() ; aK++)
           aCC.Rayons().push_back(aMire.KthDiam(aK));

       for (int aK=0 ; aK<aNbRelief; aK++)
       {
           cCercleRelief aCR;
	   aCR.Rayon() = aRayRelief[aK];
	   aCR.Profondeur() = aProfRelief[aK];
	   aCC.CercleRelief().push_back(aCR);
       }

       aCC.Negatif().SetVal(aMire.IsNegatif());
       aCC.ReliefIsSortant() = isSortant;
       aCC.NomType() = aMire.Name();
       aCC.Qualite() = (*itC)->Qual();
       aPC.Cibles().push_back(aCC);

    }

    if (aNamePoly=="CapriceDesDieux")
    {
        TraitementSpec_CdD(aPC.Cibles(),Cdd_NumCol);
    }   
    if (aNamePoly=="Clous_CDD")
    {
        TraitementSpec_CdD(aPC.Cibles(),Clous_NumCol);
    }   
    
    if (aNamePoly== "Mtd-Hall")
    {
        TraitementSpecHall(aPC.Cibles());
    }

    MakeFileXML(aPC,aNameOut);
}