Ejemplo n.º 1
0
cAppli_XifGps2Xml::cAppli_XifGps2Xml(const std::string & aFullName,double aDefZ) :
   cAppliListIm (aFullName),
   mDefZ        (aDefZ),
   mNbOk        (0)
{
    mOC0 = StdGetFromPCP(Basic_XML_MM_File("Template-OrCamAng.xml"),OrientationConique);
    Pt3dr aPMoy(0,0,0);
    for (int aKI=0 ; aKI<int(mSetIm->size()) ; aKI++)
    {
          mVIm.push_back(cIm_XifGp((*mSetIm)[aKI],*this));
          if (mVIm.back().mHasPT)
          {
              aPMoy = aPMoy + mVIm.back().mPGeoC;
              mNbOk ++;
          }
    }
    if (mNbOk)
    {
        mGeoCOriRTL = aPMoy / double(mNbOk);
        mWGS84DegreeRTL = cSysCoord::WGS84Degre()->FromGeoC(mGeoCOriRTL);
        mSysRTL = StdGetFromPCP(Basic_XML_MM_File("Pattron-SysCoRTL.xml"),SystemeCoord);

        mSysRTL.BSC()[0].AuxR()[0] = mWGS84DegreeRTL.x;
        mSysRTL.BSC()[0].AuxR()[1] = mWGS84DegreeRTL.y;
        mSysRTL.BSC()[0].AuxR()[2] = mWGS84DegreeRTL.z;
    }
}
Ejemplo n.º 2
0
int Campari_main(int argc,char ** argv)
{
    MMD_InitArgcArgv(argc,argv);

    std::string aFullDir= "";
    std::string AeroIn= "";
    std::string AeroOut="";

    bool  CPI1 = false;
    bool  CPI2 = false;
    bool  FocFree = false;
    bool  PPFree = false;
    bool  AffineFree = false;
    bool  AllFree = false;

    bool  PoseFigee = false;

    double aSigmaTieP = 1;
    double aFactResElimTieP = 5;

    std::vector<std::string> GCP;
    std::vector<std::string> EmGPS;
    bool DetailAppuis = false;
    double Viscos = 1.0;
    bool ExpTxt = false;
    std::vector<std::string> aImMinMax;

    Pt3dr aGpsLA;

    int aDegAdd = 0;
    int aDegFree = 0;
    int aDrMax = 0;

    ElInitArgMain
    (
    argc,argv,
    LArgMain()  << EAMC(aFullDir,"Full Directory (Dir+Pattern)", eSAM_IsPatFile)
                    << EAMC(AeroIn,"Input Orientation", eSAM_IsExistDirOri)
                    << EAMC(AeroOut,"Output Orientation", eSAM_IsOutputDirOri),
    LArgMain()  << EAM(GCP,"GCP",true,"[GrMes.xml,GrUncertainty,ImMes.xml,ImUnc]", eSAM_NoInit)
                    << EAM(EmGPS,"EmGPS",true,"Embedded GPS [Gps-Dir,GpsUnc, ?GpsAlti?], GpsAlti if != Plani", eSAM_NoInit)
                    << EAM(aGpsLA,"GpsLa",true,"Gps Lever Arm, in combination with EmGPS", eSAM_NoInit)
                    << EAM(aSigmaTieP,"SigmaTieP", true, "Sigma use for TieP weighting (Def=1)")
                    << EAM(aFactResElimTieP,"FactElimTieP", true, "Fact elimination of tie point (prop to SigmaTieP, Def=5)")
                    << EAM(CPI1,"CPI1",true,"Calib Per Im, Firt time", eSAM_IsBool)
                    << EAM(CPI2,"CPI2",true,"Calib Per Im, After first time, reUsing Calib Per Im As input", eSAM_IsBool)
                    << EAM(FocFree,"FocFree",true,"Foc Free (Def=false)", eSAM_IsBool)
                    << EAM(PPFree,"PPFree",true,"Principal Point Free (Def=false)", eSAM_IsBool)
                    << EAM(AffineFree,"AffineFree",true,"Affine Parameter (Def=false)", eSAM_IsBool)
                    << EAM(AllFree,"AllFree",true,"Affine Parameter (Def=false)", eSAM_IsBool)
                    << EAM(DetailAppuis,"DetGCP",true,"Detail on GCP (Def=false)", eSAM_IsBool)
                    << EAM(Viscos,"Visc",true,"Viscosity in Levenberg-Marquardt like resolution (Def=1.0)")
                    << EAM(ExpTxt,"ExpTxt",true, "Export in text format (Def=false)",eSAM_IsBool)
                    << EAM(aImMinMax,"ImMinMax",true, "Im max and min to avoid tricky pat")
                    << EAM(aDegAdd,"DegAdd",true, "When specified, degree of additionnal parameter")
                    << EAM(aDegFree,"DegFree",true, "When specified degree of freedom of parameters generiqs")
                    << EAM(aDrMax,"DRMax",true, "When specified degree of freedom of radial parameters")
 		    << EAM(PoseFigee,"PoseFigee",true,"Does the external orientation of the cameras are frozen or free (Def=false, i.e. camera poses are free)", eSAM_IsBool)

    );

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

        Pt2dr Focales(0,100000);
        std::string aParamPatFocSetIm = "@" + aPat + "@" + ToString(Focales.x) + "@" + ToString(Focales.y) ;
        std::string aSetIm = "NKS-Set-OfPatternAndFoc" + aParamPatFocSetIm;


        if (EAMIsInit(&aImMinMax))
        {
            ELISE_ASSERT(aImMinMax.size()==2,"Bad size in vect");
            aSetIm =  "NKS-Set-OfPatternAndFocAndInterv" + aParamPatFocSetIm + "@" + aImMinMax[0] + "@" + aImMinMax[1];
        }




       std::string aCom =     MM3dBinFile_quotes( "Apero" )
                           +  ToStrBlkCorr( Basic_XML_MM_File("Apero-Compense.xml") )
                           +  std::string(" DirectoryChantier=") + aDir + " "
                           +  std::string(" +SetIm=") + QUOTE(aSetIm) + " "
                           +  std::string(" +AeroIn=-") + AeroIn + " "
                           +  std::string(" +AeroOut=-") + AeroOut + " "
                          ;

        if (CPI1 || CPI2) aCom       += " +CPI=true ";
        if (CPI2) aCom       += " +CPIInput=true ";
        if (FocFree) aCom    += " +FocFree=true ";
        if (PPFree) aCom    += " +PPFree=true ";
        if (AffineFree) aCom += " +AffineFree=true ";
        if (AllFree) aCom    += " +AllFree=true ";
        if (ExpTxt) aCom += std::string(" +Ext=") + (ExpTxt?"txt ":"dat ")  ;

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

        if (EAMIsInit(&aFactResElimTieP))
           aCom =  aCom+ " +FactMaxRes=" + ToString(aFactResElimTieP);


       if (EAMIsInit(&Viscos)) aCom  +=  " +Viscos=" + ToString(Viscos) + " ";

       if (EAMIsInit(&DetailAppuis)) aCom += " +DetailAppuis=" + ToString(DetailAppuis) + " ";

        if (EAMIsInit(&GCP))
        {
            ELISE_ASSERT(GCP.size()==4,"Mandatory part of GCP requires 4 arguments");
            double aGcpGrU = RequireFromString<double>(GCP[1],"GCP-Ground uncertainty");
            double aGcpImU = RequireFromString<double>(GCP[3],"GCP-Image  uncertainty");

            std::cout << "THAT IS ::: " << aGcpGrU << " === " << aGcpImU << "\n";

            aCom =   aCom
                   + std::string("+WithGCP=true ")
                   + std::string("+FileGCP-Gr=") + GCP[0] + " "
                   + std::string("+FileGCP-Im=") + GCP[2] + " "
                   + std::string("+GrIncGr=") + ToString(aGcpGrU) + " "
                   + std::string("+GrIncIm=") + ToString(aGcpImU) + " ";
        }
        if (aDegAdd>0)  aCom = aCom + " +HasModeleAdd=true  +ModeleAdditionnel=eModelePolyDeg" +  ToString(aDegAdd);
        if (aDegFree>0)  aCom = aCom + " +DegGen=" +  ToString(aDegFree);
        if (aDrMax>0)   aCom = aCom + " +DRMax=" +  ToString(aDrMax);

        if (EAMIsInit(&EmGPS))
        {
            ELISE_ASSERT((EmGPS.size()>=2) && (EmGPS.size()<=3) ,"Mandatory part of EmGPS requires 2 arguments");
            StdCorrecNameOrient(EmGPS[0],aDir);
            double aGpsU = RequireFromString<double>(EmGPS[1],"GCP-Ground uncertainty");
            double aGpsAlti = aGpsU;
            if (EmGPS.size()>=3)
               aGpsAlti = RequireFromString<double>(EmGPS[2],"GCP-Ground Alti uncertainty");
            aCom = aCom +  " +BDDC=" + EmGPS[0]
                        +  " +SigmGPS=" + ToString(aGpsU)
                        +  " +SigmGPSAlti=" + ToString(aGpsAlti)
                        +  " +WithCenter=true";

            if (EAMIsInit(&aGpsLA))
            {
                aCom = aCom + " +WithLA=true +LaX="  + ToString(aGpsLA.x)
                                         + " +LaY=" + ToString(aGpsLA.y)
                                         + " +LaZ=" + ToString(aGpsLA.z)
                                         + " ";
            }
        }

        if (EAMIsInit(&aSigmaTieP)) aCom = aCom + " +SigmaTieP=" + ToString(aSigmaTieP);


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

        Campari_Banniere();
        BanniereMM3D();

        return aRes;
    }
    else
        return EXIT_SUCCESS;
}
Ejemplo n.º 3
0
cAppliMMTestOrient::cAppliMMTestOrient(int argc,char ** argv)
{
    MMD_InitArgcArgv(argc,argv);

    std::string anIm1,anIm2;
    std::string AeroIn= "";
    std::string AeroInSsMinus= "";
    std::string aDir="./";
    int Zoom0=32;
    int ZoomF=2;

    double LargMin=30.0;

    bool mModePB = false;
    std::string mModeOri;
    double aZMoy,aZInc;
    bool    ShowCom = false;
    bool ExportDepl = false;
    bool mModeGB = false;

    ElInitArgMain
    (
    argc,argv,
    LArgMain()  << EAMC(anIm1,"First Image", eSAM_IsExistFile)
                    << EAMC(anIm2,"Second Image", eSAM_IsExistFile)
                    << EAMC(AeroIn,"Orientation", eSAM_IsExistFile),
    LArgMain()  << EAM(aDir,"Dir",true,"Directory, Def=./")
                    << EAM(Zoom0,"Zoom0",true,"Zoom init, pow of 2  in [128,8], Def depend of size", eSAM_IsPowerOf2)
                    << EAM(ZoomF,"ZoomF",true,"Zoom init,  pow of 2  in [4,1], Def=2",eSAM_IsPowerOf2)
                    << EAM(mModePB,"PB",true,"Push broom sensor")
                    << EAM(mModeGB,"GB",true,"Gen Bundle Mode")
                    << EAM(mModeOri,"MOri",true,"Mode Orientation (GRID or RTO), Mandatory in PB", eSAM_NoInit)
                    << EAM(aZMoy,"ZMoy",true,"Average Z, Mandatory in PB", eSAM_NoInit)
                    << EAM(aZInc,"ZInc",true,"Incertitude on Z, Mandatory in PB", eSAM_NoInit)
                    << EAM(ShowCom,"ShowCom",true,"Show MicMac command (tuning purpose)")
                    << EAM(ExportDepl,"ExportDepl",true,"Export result as displacement maps")
    );

    // cInterfChantierNameManipulateur * aICNM = cInterfChantierNameManipulateur::BasicAlloc(DirOfFile(anIm1));

    mVIms.push_back(anIm1);
    mVIms.push_back(anIm2);

    mMMV = MMVisualMode;
    if (MMVisualMode) 
    {
        return;
    }

    if (!mModePB)
    {
        StdCorrecNameOrient(AeroIn,aDir);
    }


    if (!EAMIsInit(&mModePB))
        mModePB = EAMIsInit(&mModeOri);



    std::string aFullModeOri = "eGeomImageOri";
    if (mModePB)
    {
         ELISE_ASSERT(EAMIsInit(&mModeOri) , "MOri is Mandatory in PB");
         ELISE_ASSERT(EAMIsInit(&aZMoy)    , "ZMoy is Mandatory in PB");
         ELISE_ASSERT(EAMIsInit(&aZInc)    , "ZInc is Mandatory in PB");

         if (mModeOri=="GRID")     aFullModeOri= "eGeomImageGrille";
         else if (mModeOri=="RTO") aFullModeOri= "eGeomImageRTO";
         else  {ELISE_ASSERT(false,"Unknown mode ori");}
    }

    if (mModeGB)
    {
         ELISE_ASSERT(EAMIsInit(&aZMoy)    , "ZMoy is Mandatory in GB");
         ELISE_ASSERT(EAMIsInit(&aZInc)    , "ZInc is Mandatory in GB");
         aFullModeOri= "eGeomGen";

    }

// eGeomImageRTO
// eGeomImageGrille

    if (! EAMIsInit(&Zoom0))
    {
         Zoom0 = FixSizeImage(128,aDir+anIm1,LargMin,4);
    }

#if (ELISE_windows)
     replace( aDir.begin(), aDir.end(), '\\', '/' );
#endif




   mCom =     MM3dBinFile( "MICMAC" ) + " "
                       +  Basic_XML_MM_File("MM-PxTransv.xml")
                       +  std::string(" WorkDir=") + aDir + " "
                       +  std::string(" +Im1=") + QUOTE(anIm1) + " "
                       +  std::string(" +Im2=") + QUOTE(anIm2) + " "
                       +  std::string(" +AeroIn=-") + AeroIn + " "
                       +  std::string(" +AeroInSsMinus=") + AeroIn + " "
                       +  std::string(" +Zoom0=") + ToString(Zoom0) + " "
                       +  std::string(" +ZoomF=") + ToString(ZoomF) + " "
                      ;

    if (mModePB)
    {
         mCom = mCom + " +Conik=false "
                     +  " +ModeOriIm=" + aFullModeOri + std::string(" ")
                     + " +PostFixOri=" + AeroIn     + std::string(" ")
                     + " +Px1Inc=" + ToString(aZInc) + std::string(" ")
                     + " +Px1Moy=" + ToString(aZMoy) + std::string(" ") ;
    }
    if (mModeGB)
    {
         mCom = mCom + " +Conik=false "
                     + " +UseGenBundle=true"
                     + " +ModeOriIm=" + aFullModeOri + std::string(" ")
                     + " +Px1Inc=" + ToString(aZInc) + std::string(" ")
                     + " +Px1Moy=" + ToString(aZMoy) + std::string(" ") ;
    }

    if (ShowCom) std::cout << mCom << "\n";


   if (ExportDepl) mCom = mCom + " +ExporFieldsHom=true ";
}
Ejemplo n.º 4
0
void FiltreRemoveBorderHeter(Im2D_REAL4 anIm,Im2D_U_INT1 aImMasq,double aCostRegul,double aCostTrans)
{
    Pt2di aSz = anIm.sz();
    double aVMax,aVMin;

    ELISE_COPY(aImMasq.border(1),0,aImMasq.out());
    ELISE_COPY(aImMasq.all_pts(),aImMasq.in()!=0,aImMasq.out());
    ELISE_COPY(anIm.all_pts(),anIm.in(),VMax(aVMax)|VMin(aVMin));
    Video_Win * aW = Video_Win::PtrWStd(aSz);
    ELISE_COPY(anIm.all_pts(),(anIm.in()-aVMin) * (255.0/(aVMax-aVMin)),aW->ogray());
    std::cout << "VMAX " << aVMax << "\n";

    //ELISE_COPY(aW->all_pts(),aImMasq.in(),aW->odisc());
    //aW->clik_in();

    ELISE_COPY
    (
          aW->all_pts(),
          nflag_close_sym(flag_front8(aImMasq.in_proj()!=0)),
          aW->out_graph(Line_St(aW->pdisc()(P8COL::red)))
    );

    cParamFiltreDepthByPrgDyn aParam =  StdGetFromSI(Basic_XML_MM_File("DefFiltrPrgDyn.xml"),ParamFiltreDepthByPrgDyn);
    aParam.CostTrans() = aCostTrans;
    aParam.CostRegul() = aCostRegul;

    Im2D_Bits<1>  aNewMasq =  FiltrageDepthByProgDyn(anIm,aImMasq,aParam);
  
    ELISE_COPY
    (
         select(aNewMasq.all_pts(),aNewMasq.in()),
         2,
         aImMasq.out()
    );
    TIm2D<U_INT1,INT> aTMasq(aImMasq);
    FiltrageCardCC(false,aTMasq,2,0,100);

    Neighbourhood aNV4=Neighbourhood::v4();
    Neigh_Rel     aNrV4 (aNV4);

    ELISE_COPY
    (
           conc
           (
               select(select(aImMasq.all_pts(),aImMasq.in()==1),aNrV4.red_sum(aImMasq.in()==0)),
               aImMasq.neigh_test_and_set(aNV4,1,0,256)
           ),
           3,
           Output::onul()
    );



    ELISE_COPY
    (
         aNewMasq.all_pts(),
         aImMasq.in(),
         aW->odisc()
    );

/*
    ELISE_COPY
    (
          aW->all_pts(),
          nflag_close_sym(flag_front8(aNewMasq.in_proj())),
          aW->out_graph(Line_St(aW->pdisc()(P8COL::green)))
    );
*/


    aW->clik_in();

}