void BiScroller::MasqMakeOneLine ( U_INT1 * aDataImR, U_INT1 * aDataImG, U_INT1 * aDataImB, INT aY, INT anX0, INT anX1, U_INT1 * aLine1, U_INT1 * aLine2 ) { static U_INT1 * aLR=0; static U_INT1 * aLG=0; static U_INT1 * aLB=0; if (aLR==0) { aLR = new U_INT1 [256] ; aLG = new U_INT1 [256] ; aLB = new U_INT1 [256] ; // Pt3dr aP0(128,0,0); // Pt3dr aP1(255,128,255); // Pt3dr aP0(0,0,128); // Pt3dr aP1(255,128,255); Pt3dr aP0(0,80,0); Pt3dr aP1(255,255,128); for (int aK=0 ; aK< 256 ; aK++) { double aPds0 = 1- aK /255.0; double aPds1 = 1-aPds0; Pt3dr aCol = aP0 *aPds0 + aP1*aPds1; aLR[aK] = round_ni(aCol.x); aLG[aK] = round_ni(aCol.y); aLB[aK] = round_ni(aCol.z); } } TIm2D<U_INT1,INT> aTM(mImMasq); Pt2di aP(anX0,aY); Pt2dr aQ0 = mScrGray->to_user(Pt2dr(aP)); Pt2dr aQ1 = mScrGray->to_user(Pt2dr(aP)+Pt2dr(1,0)); double aDx = aQ1.x -aQ0.x; double aXQ0 = aQ0.x; int aYQ0 = round_ni(aQ0.y); for (; aP.x<anX1 ; aP.x++) { bool inM = (aTM.get(Pt2di(round_ni(aXQ0),aYQ0),0)!=0); int aCoul = aLine1[aP.x]; aDataImR[aP.x] = inM?aLR[aCoul]:aCoul ; aDataImG[aP.x] = inM?aLG[aCoul]:aCoul ; aDataImB[aP.x] = inM?aLB[aCoul]:aCoul ; aXQ0 +=aDx; } }
void BiScroller::LutMakeOneLine ( U_INT1 * aDataImR, U_INT1 * aDataImG, U_INT1 * aDataImB, INT aY, INT anX0, INT anX1, U_INT1 * aLineGr, U_INT1 * aLineCol ) { /* U_INT1 * aRGB; for (INT x= anX0; x<anX1 ; x++) { aRGB = RGBEntry(aLineGr[x],aLineCol[x]); aDataImR[x] = aRGB[eIndR]; aDataImG[x] = aRGB[eIndG]; aDataImB[x] = aRGB[eIndB]; } */ TIm2D<U_INT1,INT> aTM(mImMasq); Pt2di aP(anX0,aY); Pt2dr aQ0 = mScrGray->to_user(Pt2dr(aP)); Pt2dr aQ1 = mScrGray->to_user(Pt2dr(aP)+Pt2dr(1,0)); double aDx = aQ1.x -aQ0.x; double aXQ0 = aQ0.x; int aYQ0 = round_ni(aQ0.y); for (; aP.x<anX1 ; aP.x++) { int indCoul = aTM.get(Pt2di(round_ni(aXQ0),aYQ0),0); int aGray = aLineGr[aP.x]; U_INT1 * aRGB = RGBEntry(aGray,indCoul); aDataImR[aP.x] = aRGB[eIndR]; aDataImG[aP.x] = aRGB[eIndG]; aDataImB[aP.x] = aRGB[eIndB]; // aDataImR[aP.x] = inM?aLR[aCoul]:aCoul ; // aDataImG[aP.x] = inM?aLG[aCoul]:aCoul ; // aDataImB[aP.x] = inM?aLB[aCoul]:aCoul ; aXQ0 +=aDx; } }
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 */ }
cAppli_LumRas::cAppli_LumRas(int argc,char ** argv) : cAppliWithSetImage(argc-2,argv +2,TheFlagNoOri|TheFlagDev16BGray), // mTifBaseGr (0), mTifBaseCoul (0), mImGr (1,1), mImMasq (1,1) { std::vector<double> aPdsI; ElInitArgMain ( argc,argv, LArgMain() << EAM(mNameImBase, "Image name", true, "Image name", eSAM_IsExistFile) << EAM(mPatImRas, "Image pattern", true, "Pattern", eSAM_IsPatFile) , LArgMain() << EAM(mPostMasq,"Masq",true,"Mask for computation", eSAM_NoInit) << EAM(aPdsI,"PdsIn",true,"Pds on RGB Input, def=[1,1,1]", eSAM_NoInit) << EAM(mNameTargSh,"TargShade",true,"Targeted Shade", eSAM_NoInit) ); if (!MMVisualMode) { for (int aK=(int)aPdsI.size() ; aK<3 ; aK++) aPdsI.push_back(1); // mTifBaseGr = new Tiff_Im (Tiff_Im::StdConvGen(mNameImBase,1,true)); mTifBaseCoul = new Tiff_Im (Tiff_Im::StdConvGen(mNameImBase,3,true)); mSz = mTifBaseCoul->sz(); mImGr.Resize(mSz); Symb_FNum aFCoul(mTifBaseCoul->in()); Fonc_Num aFGr = (aPdsI[0]*aFCoul.v0()+aPdsI[1]*aFCoul.v1()+aPdsI[2]*aFCoul.v2())/(aPdsI[0]+aPdsI[1]+aPdsI[2]); ELISE_COPY(mImGr.all_pts(),aFGr,mImGr.out()); mImMasq = Im2D_Bits<1>(mSz.x,mSz.y,1); if (EAMIsInit(&mPostMasq)) { CorrecNameMasq(mEASF.mDir,NameWithoutDir(mNameImBase),mPostMasq); std::string aNameMasq = StdPrefix(mNameImBase)+mPostMasq+".tif"; Tiff_Im aTM(aNameMasq.c_str()); ELISE_COPY(mImMasq.all_pts(),aTM.in(0),mImMasq.out()); } ELISE_COPY(mImMasq.border(1),0,mImMasq.out()); mKeyHom = "NKS-Assoc-CplIm2Hom@@dat"; // mKeyHom = ""; Fonc_Num aGlobSh; for (int aK=0 ; aK<int(mVSoms.size()) ; aK++) { std::string aName = mVSoms[aK]->attr().mIma->mNameIm; mVIm.push_back(new cImage_LumRas(mEASF.mDir+aName,*this)); //Fonc_Num aFShade = mVIm.back()->mImShade.in(); // aGlobSh = (aK==0) ? aFShade : Virgule(aGlobSh,aFShade); } if (EAMIsInit(&mNameTargSh)) { DoShadeByLeastSquare(); } else { for (int aK=0 ; aK<int(mVIm.size()) ; aK++) mVIm[aK]->CalculShadeByDiff(); } /* // RGB std::string aNameOut = mEASF.mDir+ "LumRas_"+StdPrefix(mNameImBase) + ".tif"; Tiff_Im TifTest ( aNameOut.c_str(), mSz, GenIm::u_int1, Tiff_Im::No_Compr, Tiff_Im::RGB ); ELISE_COPY ( TifTest.all_pts(), // Max(0,Min(255,128 * (1 + 5*aGlobSh))), Max(0,Min(255,aFCoul+ 20*aGlobSh)), TifTest.out() ); */ } }