cListeAppuis1Im El2Xml ( const std::list<Appar23> & aLAp, const std::list<int> & aLInd, const std::string &aNameImage ) { cListeAppuis1Im aRes = El2Xml(aLAp,aNameImage); ELISE_ASSERT ( aRes.Mesures().size() == aLInd.size(), "El2Xml Indexe-size != appuis-size " ); std::list<int>::const_iterator itN = aLInd.begin(); for ( std::list<cMesureAppuis>::iterator itM=aRes.Mesures().begin(); itM!=aRes.Mesures().end(); itM++,itN++ ) { itM->Num().SetVal(*itN); } return aRes; }
template <class TOut,class TIn> void TEl2Xml(TOut & aRes,const TIn & aLIn) { for ( typename TIn::const_iterator itIn = aLIn.begin(); itIn != aLIn.end(); itIn++ ) { aRes.push_back(El2Xml(*itIn)); } }
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(); }
cElNuage3DMaille * cElNuage3DMaille::FromParam ( const cXML_ParamNuage3DMaille & aParamOri, const std::string & aDir, const std::string & aMasqSpec, double ExagZ, const cParamModifGeomMTDNuage * aPMG, bool WithEmptyData ) { cXML_ParamNuage3DMaille aParam = aParamOri; Box2di aBox(Pt2di(0,0),aParam.NbPixel()); bool Dequant = false; if (aPMG) { double aScale = aPMG->mScale; if (aScale != 1.0) { std::string aMes = "Scale=" + ToString(aScale); cElWarning::ScaleInNuageFromP.AddWarn(aMes,__LINE__,__FILE__); } Pt2di aP0 = round_down(aPMG->mBox._p0/aScale); Pt2di aP1 = round_up(aPMG->mBox._p1/aScale); aBox = Inf(aBox,Box2di(aP0,aP1)); aParam.NbPixel() = aBox.sz(); ElAffin2D aAfM2C = Xml2EL(aParam.Orientation().OrIntImaM2C()); aAfM2C = ElAffin2D::trans(-Pt2dr(aBox._p0)) * aAfM2C; aParam.Orientation().OrIntImaM2C().SetVal(El2Xml(aAfM2C)); Dequant = aPMG->mDequant; } std::string aMasq = aDir+aParam.Image_Profondeur().Val().Masq(); if (aMasqSpec!="") aMasq = aMasqSpec; GenIm::type_el aTypeEl = GenIm::real4; Fonc_Num aFMasq = 0; Fonc_Num aFProf = 1; if (! WithEmptyData) { aFMasq = trans(Tiff_Im::BasicConvStd(aMasq).in(0),aBox._p0); Tiff_Im aTP = Tiff_Im::BasicConvStd(aDir+aParam.Image_Profondeur().Val().Image()); aFProf = trans(aTP.in_proj()*ExagZ,aBox._p0); aTypeEl = aTP.type_el(); } if (aParam.Image_Profondeur().IsInit()) { bool aFaiscClassik = ( (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTFaisceauIm1PrCh_Px1D) || (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTFaisceauIm1PrCh_Px2D) || (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTEuclid) || (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTFaisceauPrChSpherik) ); bool aProfIsZ = ( (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTFaisceauIm1ZTerrain_Px1D) || (aParam.Image_Profondeur().Val().GeomRestit()==eGeomMNTFaisceauIm1ZTerrain_Px2D) ); if (aFaiscClassik || aProfIsZ) { switch (aTypeEl) { case GenIm::int2 : if (Dequant) return new cElN3D_EpipGen<float,double>(aDir,aParam,aFMasq,aFProf,aProfIsZ,WithEmptyData,true); else return new cElN3D_EpipGen<INT2,INT>(aDir,aParam,aFMasq,aFProf,aProfIsZ,WithEmptyData,false); break; case GenIm::real4 : return new cElN3D_EpipGen<float,double>(aDir,aParam,aFMasq,aFProf,aProfIsZ,WithEmptyData,false); break; default : std::cout << "NAME " << aDir+aParam.Image_Profondeur().Val().Image() << "\n"; ELISE_ASSERT(false,"Type Image non gere dans cElNuage3DMaille::FromParam"); break; } } } ELISE_ASSERT(false,"cElNuage3DMaille::FromParam"); return 0; }