void cAppliMICMAC::DoMasqueAutoByTieP(const Box2di& aBoxLoc,const cMasqueAutoByTieP & aMATP) { std::cout << "cAppliMICMAC::DoMasqueAutoByTieP " << aBoxLoc << "\n"; // std::cout << "*-*-*-*-*-*- cAppliMICMAC::DoMasqueAutoByTieP "<< mImSzWCor.sz() << " " << aBox.sz() << mCurEtUseWAdapt << "\n"; ElTimer aChrono; mMMTP = new cMMTP(aBoxLoc,mBoxIn,mBoxOut,*this); // Si il faut repartir d'un masque initial calcule a un de zool anterieur if (aMATP.TiePMasqIm().IsInit()) { int aDZ = aMATP.TiePMasqIm().Val().DeZoomRel(); int aDil = aMATP.TiePMasqIm().Val().Dilate(); std::string aNameMasq = NameImageMasqOfResol(mCurEtape->DeZoomTer()*aDZ); Tiff_Im aTM(aNameMasq.c_str()); Pt2di aSZM = aTM.sz(); Im2D_Bits<1> aM(aSZM.x,aSZM.y); ELISE_COPY(aM.all_pts(),aTM.in(),aM.out()); Im2D_Bits<1> aNewM = mMMTP->ImMasquageInput(); ELISE_COPY ( aNewM.all_pts(), dilat_32(aM.in(0)[Virgule(FX,FY)/double(aDZ)],aDil*3), aNewM.out() ); } if (aMATP.mmtpFilterSky().IsInit()) { Im2D_REAL4 * anIm = mPDV1->LoadedIm().FirstFloatIm(); ELISE_ASSERT(anIm!=0,"Incohe in mmtpFilterSky"); // Pt2di aSz = anIm->sz(); Pt2di aSz = mMMTP->ImMasquageInput().sz(); const cmmtpFilterSky & aFS = aMATP.mmtpFilterSky().Val(); int aSeuilNbPts = round_ni(aSz.x*aSz.y*aFS.PropZonec().Val()); Im2D_U_INT1 aImLabel(aSz.x,aSz.y); TIm2D<U_INT1,INT> aTLab(aImLabel); Fonc_Num FHGlob = FoncHomog(*anIm,aFS.SzKernelHom().Val(),aFS.PertPerPix().Val()); ELISE_COPY(aImLabel.all_pts(),FHGlob,aImLabel.out()); FiltrageCardCC(true,aTLab,1,2,aSeuilNbPts); Im2D_Bits<1> aNewM = mMMTP->ImMasquageInput(); ELISE_COPY(select(aImLabel.all_pts(),aImLabel.in()==1),0,aNewM.out()); /* Video_Win * aW = Video_Win::PtrWStd(anIm->sz()); ELISE_COPY(anIm->all_pts(),aImLabel.in(), aW->odisc()); std::cout << "AAAAAAAAAAAAAAAAAaaaSkkkkkkYYyyyyy\n"; getchar(); */ } #ifdef ELISE_X11 if (aMATP.Visu().Val()) { Pt2dr aSzW = Pt2dr(aBoxLoc.sz()); TheScaleW = ElMin(1000.0,ElMin(TheMaxSzW.x/aSzW.x,TheMaxSzW.y/aSzW.y)); // Pour l'instant on accepts Zoom>1 , donc => 1000 // TheScaleW = 0.635; aSzW = aSzW * TheScaleW; TheWTiePCor= Video_Win::PtrWStd(round_ni(aSzW)); TheWTiePCor= TheWTiePCor->PtrChc(Pt2dr(0,0),Pt2dr(TheScaleW,TheScaleW),true); for (int aKS=0 ; aKS<mVLI[0]->NbScale() ; aKS++) { Im2D_REAL4 * anI = mVLI[0]->FloatIm(aKS); ELISE_COPY(anI->all_pts(),Max(0,Min(255,anI->in()/50)),TheWTiePCor->ogray()); } /* { ELISE_COPY(TheWTiePCor->all_pts(),mMMTP->ImMasquageInput().in(),TheWTiePCor->odisc()); std::cout << "HERISE THE MAKSE \n"; getchar(); } */ } #endif std::string aNamePts = mICNM->Assoc1To1 ( aMATP.KeyImFilePt3D(), PDV1()->Name(), true ); mTP3d = StdNuage3DFromFile(WorkDir()+aNamePts); cMasqBin3D * aMasq3D = 0; //#if (ELISE_QT_VERSION >= 4) if (aMATP.Masq3D().IsInit()) { aMasq3D = cMasqBin3D::FromSaisieMasq3d(WorkDir()+aMATP.Masq3D().Val()); std::vector<Pt3dr> aNewVec; for (int aK=0 ; aK<int(mTP3d->size()) ; aK++) { Pt3dr aP = (*mTP3d)[aK]; if (aMasq3D->IsInMasq(aP)) aNewVec.push_back(aP); } *mTP3d = aNewVec; } // #endif std::cout << "== cAppliMICMAC::DoMasqueAutoByTieP " << aBoxLoc._p0 << " " << aBoxLoc._p1 << " Nb=" << mTP3d->size() << "\n"; std::cout << " =NB Im " << mVLI.size() << "\n"; cXML_ParamNuage3DMaille aXmlN = mCurEtape->DoRemplitXML_MTD_Nuage(); { cElNuage3DMaille * aNuage = cElNuage3DMaille::FromParam(mPDV1->Name(),aXmlN,FullDirMEC()); if (aMasq3D) { mMMTP->SetMasq3D(aMasq3D,aNuage,Pt2dr(mBoxIn._p0)); mGLOBMasq3D = aMasq3D; mGLOBNuage = aNuage; } for (int aK=0 ; aK<int(mTP3d->size()) ; aK++) { Pt3dr aPE = (*mTP3d)[aK]; Pt3dr aPL2 = aNuage->Euclid2ProfPixelAndIndex(aPE); int aXIm = round_ni(aPL2.x) - mBoxIn._p0.x; int aYIm = round_ni(aPL2.y) - mBoxIn._p0.y; int aZIm = round_ni(aPL2.z) ; MakeDerivAllGLI(aXIm,aYIm,aZIm); CTPAddCell(aMATP,aXIm,aYIm,aZIm,false); ShowPoint(Pt2dr(aXIm,aYIm),P8COL::red,0); } } OneIterFinaleMATP(aMATP,false); mMMTP->ExportResultInit(); mMMTP->FreeCel(); #ifdef ELISE_X11 if (TheWTiePCor) { std::cout << "End croissance \n"; TheWTiePCor->clik_in(); } #endif const cComputeAndExportEnveloppe * aCAEE = aMATP.ComputeAndExportEnveloppe().PtrVal(); if (aMATP.ParamFiltreRegProf().IsInit()) mMMTP->MaskRegulMaj(aMATP.ParamFiltreRegProf().Val()); mMMTP->ContAndBoucheTrou(); if (aMATP.FilterPrgDyn().IsInit()) mMMTP->MaskProgDyn(aMATP.FilterPrgDyn().Val()); if (aCAEE) { mMMTP->ConputeEnveloppe(*aCAEE,aXmlN); if (aCAEE->EndAfter().Val()) return; } /* if (aMATP.ParamFiltreRegProf().IsInit()) mMMTP->MaskRegulMaj(aMATP.ParamFiltreRegProf().Val()); mMMTP->ContAndBoucheTrou(); if (aMATP.FilterPrgDyn().IsInit()) mMMTP->MaskProgDyn(aMATP.FilterPrgDyn().Val()); */ // A CONSERVER , SAUV FINAL ...: std::string aNameMasq = NameImageMasqOfResol(mCurEtape->DeZoomTer()); Im2D_Bits<1> aImMasq0 = mMMTP->ImMasqFinal(); ELISE_COPY(aImMasq0.all_pts(), aImMasq0.in(), Tiff_Im(aNameMasq.c_str()).out()); std::string aNameImage = FullDirMEC() +aXmlN.Image_Profondeur().Val().Image(); // Pour forcer le resultat flotant Tiff_Im::CreateFromIm(mMMTP->ImProfFinal(),aNameImage.c_str()); /* ELISE_COPY(aImProf.all_pts(), aImProf.in(), Tiff_Im(aNameImage.c_str()).out()); Im2D_REAL4 ImProfFinal() {return mContBT;} // image dequant et trous bouches */ }
void cAppliMICMAC::DoCorrelLeastQuare(const Box2di & aBoxOut,const Box2di & aBoxIn,const cCorrel2DLeastSquare & aClsq) { int aPer = aClsq.PeriodEch(); cOneTestLSQ aTest ( TheNbIterLine, PDV1()->LoadedIm().DataFloatIm()[0],PDV1()->LoadedIm().SzIm(), PDV2()->LoadedIm().DataFloatIm()[0],PDV2()->LoadedIm().SzIm(), CurEtape()->InterpFloat(), aClsq ); Pt2di aP0Red = round_up(Pt2dr(aBoxOut._p0) / double(aPer)); Pt2di aP1Red = round_up(Pt2dr(aBoxOut._p1) / double(aPer)); Pt2di aSzRed = aP1Red - aP0Red; Im2D_REAL8 aImDepX(aSzRed.x,aSzRed.y); Im2D_REAL8 aImDepY(aSzRed.x,aSzRed.y); Pt2di aPRed; const cOneNappePx & aPx1 = mLTer->KthNap(0); const cOneNappePx & aPx2 = mLTer->KthNap(1); for (aPRed.x=aP0Red.x ; aPRed.x<aP1Red.x ; aPRed.x++) { for (aPRed.y=aP0Red.y ; aPRed.y<aP1Red.y ; aPRed.y++) { // std::cout <<"REST " << aP1Red - aPRed << "\n"; Pt2di aP = aPRed * aPer; Pt2di aPLoc = aP-aBoxIn._p0; double aPx[2]; aPx[0] = aPx1.mTPxInit.get(aPLoc); aPx[1] = aPx2.mTPxInit.get(aPLoc); mCurEtape->GeomTer().PxDisc2PxReel(aPx,aPx); //aTest.SetPIm1(PDV1()->Geom().CurObj2Im(Pt2dr(aP),aPx)); //aTest.SetPIm2(PDV2()->Geom().CurObj2Im(Pt2dr(aP),aPx)); aTest.MinimByLSQandGolden ( PDV1()->Geom().CurObj2Im(Pt2dr(aP),aPx), PDV2()->Geom().CurObj2Im(Pt2dr(aP),aPx) ); double aPx0[2]={0,0}; Pt2dr aP20 = PDV2()->Geom().CurObj2Im(Pt2dr(aP),aPx0); Pt2dr aP2 = aTest.Im2().PImCur(); aImDepX.SetR(aPRed-aP0Red,aP2.x-aP20.x); aImDepY.SetR(aPRed-aP0Red,aP2.y-aP20.y); } } Tiff_Im aFileRX = mCurEtape->KPx(0).FileIm(); Tiff_Im aFileRY = mCurEtape->KPx(1).FileIm(); ELISE_COPY ( rectangle(aP0Red,aP1Red), trans(aImDepX.in(),-aP0Red), aFileRX.out() ); ELISE_COPY ( rectangle(aP0Red,aP1Red), trans(aImDepY.in(),-aP0Red), aFileRY.out() ); /* */ }