void MakeFoncRepart(Im1D_REAL8 aH,int * aVMax=0) { double aNbP; ELISE_COPY(aH.all_pts(),aH.in(),sigma(aNbP)); REAL8 * aDH = aH.data(); for (int aK=1 ; aK<aNbH ; aK++) { if (aDH[aK] && aVMax) *aVMax = aK; aDH[aK] += aDH[aK-1]; } ELISE_COPY(aH.all_pts(),aH.in() * (255.0/aNbP),aH.out()); }
void cIncEnsembleCamera::OptimJacobi ( std::list<cIncSetLiaison *> * aListSL, const std::vector<cFonctrPond> & aFoncAux ) { mListSl = aListSL; mFoncsAux = aFoncAux; SetOpt(); ELISE_ASSERT(mL2Opt,"Need L2 Sys for OptimJacobi"); mSysL2->GetMatr(mMatrL2,mMatrtB); jacobi_diag(mMatrL2,mMatrValP,mMatrVecP); mtBVecP = mMatrtB * mMatrVecP; cElRanGen aR; Im1D_REAL8 P0 = CurVals(); Im1D_REAL8 mImBest = CurVals(); REAL aScInit = ScoreCur(false); REAL aScMin = aScInit; REAL aScAmMin = aScInit; for (INT aTest =0 ; aTest < 100 ; aTest ++) { SetPtCur(P0.data()); Im1D_REAL8 aDir( NbVal(),0.0); for (INT aK = 0 ; aK < NbVal() ; aK++) { ELISE_ASSERT(mMatrValP(aK,aK) != 0,"Jcobi "); REAL Val = (mtBVecP(aK,0) / ElAbs(mMatrValP(aK,aK))) ; REAL aRan = aR.cNRrandom3() ; if (aRan < 0.25) { Val = 0; } else if (aRan < 0.5) ; /* { Val = Val; } */ else Val *= 3 * aR.cNRrandom3() -1; for (INT aY =0 ; aY< NbVal() ; aY++) aDir.data()[aY] += mMatrVecP(aK,aY) * Val; } ELISE_COPY(aDir.all_pts(),P0.in() + aDir.in(),aDir.out()); SetPtCur(aDir.data()); REAL aSc = ScoreCur(false); if (aSc < aScMin) { ElSetMin(aScMin,aSc); for (INT aK= 0 ; aK< 10 ; aK++) OneItereDevL1( aK < 3); REAL aSc = ScoreCur(false); if (aSc < aScAmMin) { aScAmMin = aSc; ELISE_COPY(mImBest.all_pts(),CurVals().in(),mImBest.out()); } } cout << aScMin << " " << aScInit << " " << aSc << " " << aScAmMin << "\n"; } SetPtCur(mImBest.data()); }