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(); }
void PdBump() { std::string aPref = "/home/mpd/MMM/culture3d/Documentation/OriRel-IMGP0492.JPG.xml"; cXml_Ori2Im aXmlOri = StdGetFromSI(aPref,Xml_Ori2Im); }
int command_correctPlanarPolygons( int argc, char **argv ) { if (argc < 1) ELISE_ERROR_EXIT("an XML filename is needed"); const string xmlFilename = argv[0]; cPolyg3D polygons = StdGetFromSI(xmlFilename, Polyg3D); correctPlanarPolygons(polygons.Item()); writePolygons(polygons, "corrected_polygons.xml"); return EXIT_SUCCESS; }
cXml_Ori2Im cNewO_NameManager::GetOri2Im(const std::string & aN1,const std::string & aN2) { return StdGetFromSI(mDir + NameXmlOri2Im(aN1,aN2,true),Xml_Ori2Im); }
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(); }
void cMMTP::ConputeEnveloppe(const cComputeAndExportEnveloppe & aCAEE,const cXML_ParamNuage3DMaille & aCurNuage) { mNameTargetEnv = mAppli.WorkDir() + TheDIRMergeEPI() + mAppli.PDV1()->Name() + "/NuageImProf_LeChantier_Etape_1.xml"; mNameTargetEnv = aCAEE.NuageExport().ValWithDef(mNameTargetEnv); cXML_ParamNuage3DMaille aTargetNuage = StdGetFromSI(mNameTargetEnv,XML_ParamNuage3DMaille); mZoomTargetEnv = aTargetNuage.SsResolRef().Val(); mSzTargetEnv = aTargetNuage.NbPixel(); double aZoomRel = mAppli.CurEtape()->DeZoomTer()/mZoomTargetEnv; mBoxOutEnv._p0 = round_ni(Pt2dr(mBoxOutGlob._p0) * aZoomRel); mBoxOutEnv._p1 = round_ni(Pt2dr(mBoxOutGlob._p1) * aZoomRel); mBoxInEnv._p0 = round_ni(Pt2dr(mBoxInGlob._p0) * aZoomRel); mBoxInEnv._p1 = round_ni(Pt2dr(mBoxInGlob._p1) * aZoomRel); ELISE_ASSERT(mP0Tiep==Pt2di(0,0),"Too lazy to handle box maping"); double aPasPx = mAppli.CurEtape()->GeomTer().PasPxRel0(); //=============== READ PARAMS ==================== double aStepSsEch = aCAEE.SsEchFilter().Val(); int aSzFiltrer = aCAEE.SzFilter().Val(); double aProp = aCAEE.ParamPropFilter().Val(); int aDistProl = round_up( ElMax(aCAEE.ProlResolCur().Val(),aCAEE.ProlResolCible().Val()/aZoomRel) /aStepSsEch); double aDistCum = (aCAEE.ProlDistAddMax().Val() / (aPasPx* aZoomRel)); double aDistAdd = (aCAEE.ProlDistAdd().Val()*aStepSsEch ) / (aPasPx); std::cout << "DIST CUM " << aDistCum << " DADD " << aDistAdd << "\n"; //=================================== ElTimer aChrono; int aSeuilNbV = 2 * (1+2*aSzFiltrer); // Au moins une bande de 2 pixel pour inferer qqch Pt2di aSzRed = round_up(Pt2dr(mSzTiep)/aStepSsEch); Im2D_Bits<1> aMasqRed(aSzRed.x,aSzRed.y,0); TIm2DBits<1> aTMR(aMasqRed); /* TIm2D<INT2,INT> aPMaxRed(aSzRed); TIm2D<INT2,INT> aPMinRed(aSzRed); */ TIm2D<REAL4,REAL> aPMaxRed(aSzRed); TIm2D<REAL4,REAL> aPMinRed(aSzRed); // Calcul du filtre de reduction Pt2di aPRed; for (aPRed.y = 0 ; aPRed.y<aSzRed.y ; aPRed.y++) { for (aPRed.x = 0 ; aPRed.x<aSzRed.x ; aPRed.x++) { Pt2di aPR1 = round_ni(Pt2dr(aPRed)*aStepSsEch); int anX0 = ElMax(0,aPR1.x-aSzFiltrer); int anX1 = ElMin(mSzTiep.x-1,aPR1.x+aSzFiltrer); int anY0 = ElMax(0,aPR1.y-aSzFiltrer); int anY1 = ElMin(mSzTiep.y-1,aPR1.y+aSzFiltrer); std::vector<REAL> aVVals; Pt2di aVoisR1; for (aVoisR1.x=anX0 ; aVoisR1.x<=anX1 ; aVoisR1.x++) { for (aVoisR1.y=anY0 ; aVoisR1.y<=anY1 ; aVoisR1.y++) { if (mTImMasqInit.get(aVoisR1)) aVVals.push_back( mTCBT.get(aVoisR1)); // aVVals.push_back( mTImProf.get(aVoisR1)); } } if (int(aVVals.size()) >= aSeuilNbV) { REAL4 aVMax = KthValProp(aVVals,aProp); REAL4 aVMin = KthValProp(aVVals,1-aProp); aPMaxRed.oset(aPRed,aVMax); aPMinRed.oset(aPRed,aVMin); aTMR.oset(aPRed,1); ELISE_ASSERT(aVMin<=aVMax,"Mic>Max !!!! in BasicMMTiep"); } else { aPMaxRed.oset(aPRed,-32000); aPMinRed.oset(aPRed, 32000); } } } //Tiff_Im::Create8BFromFonc("TDifInit.tif",aSzRed,Max(0,Min(255,Iconv(aPMaxRed._the_im.in()-aPMinRed._the_im.in())))); Im2D_Bits<1> aNewM(1,1); Im2D_REAL4 aNewMax = ProlongByCont (aNewM,aMasqRed,aPMaxRed._the_im,aDistProl,aDistAdd,aDistCum); Im2D_REAL4 aNewMin = ProlongByCont (aNewM,aMasqRed,aPMinRed._the_im,aDistProl,-aDistAdd,aDistCum); ELISE_COPY(select(aNewM.all_pts(),!aNewM.in()),0,aNewMax.out()|aNewMin.out()); // fChCo = Virgule(FX,FY)/ (aStepSsEch * aZoomRel); // fMasq = aNewM.in(0)[fChCo]; // fMasqBin = fMasq>0.5; mDilatPlani = ElMax(aCAEE.DilatPlaniCible().Val(),round_up(aCAEE.DilatPlaniCur().Val()*aZoomRel)); mDilatAlti = ElMax(aCAEE.DilatAltiCible ().Val(),round_up(aCAEE.DilatPlaniCur().Val()*aZoomRel)); DoOneEnv(aNewMax,aNewM,true ,aTargetNuage,aCurNuage,aStepSsEch * aZoomRel); DoOneEnv(aNewMin,aNewM,false,aTargetNuage,aCurNuage,aStepSsEch * aZoomRel); Fonc_Num aFMasqBin; Fonc_Num fChCo = Virgule(FX,FY)/ aZoomRel; std::cout << "ZRRRR " << aZoomRel << " 1/Z " << (1/aZoomRel) << " ;; " << mAppli.CurEtape()->DeZoomTer() << " , " << mZoomTargetEnv << "\n"; // Tiff_Im::CreateFromIm(mContBT,DirOfFile(mNameTargetEnv)+"CONTBT.tif"); Fonc_Num aFoncProf = FoncChCoordWithMasq(mContBT.in(0),mImMasqFinal.in(0),fChCo,0,aFMasqBin); aFoncProf = ::AdaptDynOut(aFoncProf,aTargetNuage,aCurNuage); Tiff_Im aFileProf = FileEnv("Depth",false); ELISE_COPY(rectangle(mBoxOutEnv._p0,mBoxOutEnv._p1),trans(aFoncProf,-mBoxInEnv._p0),aFileProf.out()); Tiff_Im aFileMasq = FileEnv("Masq",true); ELISE_COPY(rectangle(mBoxOutEnv._p0,mBoxOutEnv._p1),trans(aFMasqBin,-mBoxInEnv._p0),aFileMasq.out()); #ifdef ELISE_X11 if (0 && TheWTiePCor) { ELISE_COPY(TheWTiePCor->all_pts(),aFMasqBin,TheWTiePCor->odisc()); std::cout << "AAAAAAAAAAAAAAAAAAAAa\n"; TheWTiePCor->clik_in(); ELISE_COPY(TheWTiePCor->all_pts(),aFileMasq.in(),TheWTiePCor->odisc()); std::cout << "bbBBbbBBBBBBBbbb\n"; TheWTiePCor->clik_in(); } #endif }
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(); }