void cDistorBilin::Diff(ElMatrix<REAL> & aM,Pt2dr aP) const { // InitEtatFromCorner(ToCoordGrid(aP)); Pt2dr aPds; GetParamCorner(mCurCorner,aPds,ToCoordGrid(aP)); const Pt2dr & aP00 = Dist(mCurCorner+CamBilinCorn[0] ) ; const Pt2dr & aP10 = Dist(mCurCorner+CamBilinCorn[1] ) ; const Pt2dr & aP01 = Dist(mCurCorner+CamBilinCorn[2] ) ; const Pt2dr & aP11 = Dist(mCurCorner+CamBilinCorn[3] ) ; Pt2dr aGx = ((aP10-aP00)*aPds.y + (aP11-aP01)*(1-aPds.y)) / mStep.x; Pt2dr aGy = ((aP01-aP00)*aPds.x + (aP11-aP10)*(1-aPds.x)) / mStep.y; aM.ResizeInside(2,2); SetCol(aM,0,aGx); SetCol(aM,1,aGy); // A conserver, verification par diff std if (0) { ElMatrix<REAL> aM2(2,2); DiffByDiffFinies(aM2,aP,euclid(mStep)/1e4); static double aDMax = 0; double aD = aM.L2(aM2); if (aD>aDMax) { aDMax = aD; std::cout << "DDDD " << aD << "\n"; } } // InitEtatFromCorner(ToCoordGrid(aP)); }
Fonc_Num Correl(Fonc_Num aF1,Fonc_Num aF2,int aNb) { Symb_FNum aM1 (Moy(aF1,aNb)); Symb_FNum aM2 (Moy(aF2,aNb)); Fonc_Num aEnct1 = Moy(Square(aF1),aNb) -Square(aM1); Fonc_Num aEnct2 = Moy(Square(aF2),aNb) -Square(aM2); return (Moy(aF1*aF2,aNb) -aM1*aM2) / sqrt(Max(1e-5,aEnct1*aEnct2)); }
std::vector<int> cAMD_Interf::DoRank(bool show) { Im2D_Bits<1> aM(1,1); if (show) aM = Im2D_Bits<1>(mNb,mNb,0); std::vector<int> Ap,Ai,P; Ap.push_back(0); for (int aK=0 ; aK<mNb ; aK++) { std::vector<int> & aVK = mV[aK]; std::sort(aVK.begin(),aVK.end()); aVK.erase(std::unique(aVK.begin(),aVK.end()),aVK.end()); for (int aI=0;aI<int(aVK.size()) ; aI++) { Ai.push_back(aVK[aI]); if (show) { aM.set(aK,aVK[aI],1); } // std::cout << " " << aVK[aI] ; } Ap.push_back(Ap.back()+aVK.size()); P.push_back(0); // std::cout << "\n"; } double Control [AMD_CONTROL] , Info [AMD_INFO] ; amd_defaults (Control) ; // amd_control (Control) ; int result; result = amd_order(mNb,VData(Ap),VData(Ai), VData(P),Control,Info); ELISE_ASSERT(result==0,"amd_order"); //std::cout << "RES = " << result << "\n"; std::vector<int> aRes(mNb,-1); for (int aK=0 ; aK<mNb ; aK++) { aRes[P[aK]] = aK; } if (show) { for (int aK=0 ; aK<mNb ; aK++) { } std::cout << "\n"; } // result = amd_order (n, Ap, Ai, P, Control, Info) ; if (show) { Im2D_Bits<1> aM2(mNb,mNb); for (int aX=0 ; aX<mNb ; aX++) { for (int aY=0 ; aY<mNb ; aY++) { aM2.set(aRes[aX],aRes[aY],aM.get(aX,aY)); // aM2.set(aX,aY,aM.get(P[aX],P[aY])); } } ShowMat(aM); std::cout << "\n"; ShowMat(aM2); } return aRes; }