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; } }
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; }
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 "; }
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(); }