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));
}
Exemple #3
0
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;
}