void NewOri_Info1Cple ( const ElCamera & aCam1, const ElPackHomologue & aPack12, const ElCamera & aCam2,const ElPackHomologue & aPack21 ) { cStructMergeTieP< cFixedSizeMergeTieP<2,Pt2dr> > aMap2(2,false); NOMerge_AddPackHom(aMap2,aPack12,aCam1,0,aCam2,1); NOMerge_AddPackHom(aMap2,aPack21,aCam2,1,aCam1,0); aMap2.DoExport(); std::list<cFixedSizeMergeTieP<2,Pt2dr> *> aRes = aMap2.ListMerged(); int aNb1=0; int aNb2=0; for (std::list<cFixedSizeMergeTieP<2,Pt2dr> *>::const_iterator itR=aRes.begin() ; itR!=aRes.end() ; itR++) { if ((*itR)->NbArc() ==1) { aNb1++; } else if ((*itR)->NbArc() ==2) { aNb2++; } else { ELISE_ASSERT(false,"NO_MergeTO_Test2_0"); } } std::cout << "INPUT " << aPack12.size() << " " << aPack21.size() << " Exp " << aNb1 << " " << aNb2 << "\n"; }
cElHomographie cElHomographie::RansacInitH(const ElPackHomologue & aPack,int aNbRansac,int aNbMaxPts) { if ((aPack.size()<10) || (aNbMaxPts<4)) return cElHomographie(aPack,false); cRandNParmiQ aRand(aNbMaxPts,aPack.size()); std::vector<ElCplePtsHomologues> aVCH; for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { if (aRand.GetNext()) { aVCH.push_back(itH->ToCple()); } } double anEcMin = 1e30; cElHomographie aHMin = cElHomographie::Id(); while (aNbRansac) { int aK1 = NRrandom3(aVCH.size()); int aK2 = NRrandom3(aVCH.size()); int aK3 = NRrandom3(aVCH.size()); int aK4 = NRrandom3(aVCH.size()); if ( (aK1!=aK2) && (aK1!=aK3) && (aK1!=aK4) && (aK2!=aK3) && (aK2!=aK4) && (aK3!=aK4) ) { aNbRansac--; ElPackHomologue aP4; aP4.Cple_Add(aVCH[aK1]); aP4.Cple_Add(aVCH[aK2]); aP4.Cple_Add(aVCH[aK3]); aP4.Cple_Add(aVCH[aK4]); cElHomographie aSol = cElHomographie(aP4,true); double anEcart = 0; for (int aKP=0 ; aKP<int(aVCH.size()) ; aKP++) { anEcart += euclid(aSol.Direct(aVCH[aKP].P1()),aVCH[aKP].P2()); } anEcart /= aVCH.size(); if (anEcart<anEcMin) { anEcMin = anEcart; aHMin = aSol; } } } std::cout << "ECART H " << anEcMin << "\n"; return aHMin; }
double cLiaisORPO::Residu() { SetOrCam(); if (! mProfCalc) { mProfCalc = true; SetProf(); } // ElRotation3D aC1toM = mCam1.Orientation().inv(); // ElRotation3D aMtoC2 = mCam2.Orientation(); ElRotation3D aC1toC2 = mCam2.Orient() * mCam1.Orient().inv(); Pt3dr aBaseInC2 = aC1toC2.ImAff(Pt3dr(0,0,0)); ElMatrix<double> aMat = aC1toC2.Mat() ; Pt3dr aC0,aC1,aC2; aMat.GetCol(0,aC0); aMat.GetCol(1,aC1); aMat.GetCol(2,aC2); double sDist=0.0; int aK = 0; for (ElPackHomologue::const_iterator itP =mPack.begin() ; itP!=mPack.end(); itP++) { double aPds = itP->Pds(); double aLambda = mProfs.at(aK); Pt2dr aPIm1 = itP->P1(); Pt3dr aRay1 = aC0 * aPIm1.x + aC1 * aPIm1.y + aC2; Pt3dr aPTerA = aBaseInC2 + aRay1 * (aLambda *0.99); Pt3dr aPTerB = aBaseInC2 + aRay1 * (aLambda *1.01); Pt2dr aProjA(aPTerA.x/aPTerA.z,aPTerA.y/aPTerA.z); Pt2dr aProjB(aPTerB.x/aPTerB.z,aPTerB.y/aPTerB.z); Pt2dr aVAB (aProjB.y-aProjA.y,aProjA.x-aProjB.x); double aD2 = ElAbs(scal(aVAB,aProjA-itP->P2()) / euclid(aVAB)); sDist += aPds*aD2; aK++; } if (DEBUG_POWEL) { std::cout << sDist/mPack.size() << "\n"; // getchar(); } return sDist * mPPL->Pds().Val(); }
ElMatrix<REAL> GlobMepRelCocentrique(double & anEcartMin,const ElPackHomologue & aPack, int aNbRansac,int aNbMaxPts) { aNbMaxPts = ElMin(aNbMaxPts,aPack.size()); std::vector<Pt3dr> aVDir1; std::vector<Pt3dr> aVDir2; cRandNParmiQ aRand(aNbMaxPts,aPack.size()); for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { if (aRand.GetNext()) { aVDir1.push_back(vunit(PZ1(itH->P1()))); aVDir2.push_back(vunit(PZ1(itH->P2()))); } } ElMatrix<REAL> aRes(3,3); anEcartMin = 1e60; while (aNbRansac) { int aKA = NRrandom3(aVDir1.size()); int aKB = NRrandom3(aVDir2.size()); if (aKA!=aKB) { aNbRansac--; ElMatrix<REAL> aMat = ComplemRotation(aVDir1[aKA],aVDir1[aKB],aVDir2[aKA],aVDir2[aKB]); double anEc = SomEcartDist(aMat,aVDir1,aVDir2); if (anEc<anEcartMin) { anEcartMin = anEc; aRes = aMat; } } } return aRes; }
void cCameraTiepRed::SaveHom(cCameraTiepRed* aCam2,const std::list<int> & aLBox) { std::pair<CamStenope*,CamStenope*> aPC (0,0); if (mAppli.VerifNM())// (this != aCam2) { aPC = mAppli.NM().CamOriRel(NameIm(),aCam2->NameIm()); } CamStenope* aCS1 = aPC.first; CamStenope* aCS2 = aPC.second; ElPackHomologue aRes; for (std::list<int>::const_iterator itI=aLBox.begin(); itI!=aLBox.end() ; itI++) { std::string aName = mAppli.NameHomol(NameIm(),aCam2->NameIm(),*itI); if (ELISE_fp::exist_file(aName)) { ElPackHomologue aPack = ElPackHomologue::FromFile(aName); aRes.Add(aPack); // Verif if (aCS2) { std::vector<double> aVD; for (ElPackHomologue::const_iterator itP=aPack.begin(); itP!=aPack.end(); itP++) { double aDist; aCS1->PseudoInterPixPrec(itP->P1(),*aCS2,itP->P2(),aDist); aVD.push_back(aDist); } if (aVD.size()) std::cout << "Verif CamOriRel " << MedianeSup(aVD) << "\n"; } } } if (aRes.size()) { std::string aKeyH = "NKS-Assoc-CplIm2Hom@"+ mAppli.StrOut() + "@dat"; std::string aNameH = mAppli.ICNM()->Assoc1To2(aKeyH,NameIm(),aCam2->NameIm(),true); aRes.StdPutInFile(aNameH); // std::string aNameH = mAppli } }
void cOneRotPowelOptimize::InitPts() { for ( std::list<cPowPointLiaisons>::const_iterator itP=mOP->PowPointLiaisons().begin(); itP!=mOP->PowPointLiaisons().end(); itP++ ) { std::list<cPoseCam *> aLCam = mAppli->ListCamInitAvecPtCom(itP->Id(),mCam); // Pour l'insntant la selec se fait par simple tirage aleatoire int aNbPtsTot = 0; for (std::list<cPoseCam *>::iterator itC=aLCam.begin();itC!=aLCam.end();itC++) { ElPackHomologue aPack ; mAppli->InitPack(itP->Id(),aPack,mCam->Name(),(*itC)->Name()); aNbPtsTot += aPack.size(); } int aNbCible = itP->NbTot(); for (std::list<cPoseCam *>::iterator itC=aLCam.begin();itC!=aLCam.end();itC++) { mLIais.push_back(cLiaisORPO(*itP,mCam,*itC)); ElPackHomologue aPack ; mAppli->InitPackPhgrm ( itP->Id(),aPack, mCam->Name(),&mCam->Calib()->CamInit(), (*itC)->Name(),&(*itC)->Calib()->CamInit() ); for (ElPackHomologue::iterator itPt=aPack.begin(); itPt!=aPack.end() ; itPt++) { if (NRrandom3() < double(aNbCible)/aNbPtsTot) { mLIais.back().Pack().Cple_Add(itPt->ToCple()); mNbMes++; aNbCible--; } aNbPtsTot--; } } } }
cMEPCoCentrik::cMEPCoCentrik(const ElPackHomologue & aPack,double aFoc,bool aShow,const ElRotation3D * aRef,bool Quick) : mPack (aPack), mRef (aRef), mFoc (aFoc), mCostMin (1e9), mDoPly (true), mEcartCo (1e9), mMatRPur (1,1), mShow (aShow), mSolVraiR (ElRotation3D::Id), mCostVraiR (1e20), mQuick (Quick) { InitPackME(mVP1,mVP2,mVPds,aPack); ElTimer aChrono; mMatRPur = GlobMepRelCocentrique(mEcartCo,mPack,NbRanCoCInit,aPack.size()); mMatRPur = mMatRPur.transpose() ; // Retour aux convention 2 = > 1 // Car un peu optimiste comme estim init mEcartCo *= 1.5; if (0) // OK la descente est validee { double aNoise = 1e-2; ElMatrix<double> aMP = ElMatrix<double>::Rotation(aNoise*NRrandC(),aNoise*NRrandC(),aNoise*NRrandC()); mMatRPur = mMatRPur * aMP; } for (int aK=0 ; aK<10 ; aK++) { OneItereRotPur(mMatRPur,mEcartCo); } if (!mQuick) Test(aPack,mMatRPur,aRef,mEcartCo); }
int HomFusionPDVUnik_main(int argc,char ** argv) { MMD_InitArgcArgv(argc,argv); std::string aDir,aPat,aFullDir; std::string aPostIn= ""; std::string aPostOut= "MasqFusion"; bool ExpTxt=false; std::string aDir2; std::vector<std::string > aDirN; ElInitArgMain ( argc,argv, LArgMain() << EAMC(aFullDir,"Full name (Dir+Pat)", eSAM_IsPatFile) << EAMC(aDir2,"Dir of external point", eSAM_IsPatFile), LArgMain() << EAM(aPostIn,"PostIn",true,"Post for Input dir Hom, Def=") << EAM(aPostOut,"PostOut",true,"Post for Output dir Hom, Def=MasqFusion") << EAM(ExpTxt,"ExpTxt",true,"Ascii format for in and out, def=false") << EAM(aDirN,"DirN",true,"Supplementary dirs 2 merge") ); #if (ELISE_windows) replace( aFullDir.begin(), aFullDir.end(), '\\', '/' ); #endif cElemAppliSetFile anEASF(aFullDir); cInterfChantierNameManipulateur * anICNM = anEASF.mICNM; const std::vector<std::string> * aVN = anEASF.SetIm(); std::string anExt = ExpTxt ? "txt" : "dat"; std::string aKHIn = std::string("NKS-Assoc-CplIm2Hom@") + std::string(aPostIn) + std::string("@") + std::string(anExt); std::string aKHOut = std::string("NKS-Assoc-CplIm2Hom@") + std::string(aPostOut) + std::string("@") + std::string(anExt); aDirN.push_back(aDir); aDirN.push_back(aDir2); for (int aKN1 = 0 ; aKN1<int(aVN->size()) ; aKN1++) { for (int aKN2 = 0 ; aKN2<int(aVN->size()) ; aKN2++) { std::string aNameIm1 = (*aVN)[aKN1]; std::string aNameIm2 = (*aVN)[aKN2]; std::string aNameLocIn = aDir + anICNM->Assoc1To2(aKHIn,aNameIm1,aNameIm2,true); ElPackHomologue aPackOut; int aNbH=0; for (int aKP=0 ; aKP<int(aDirN.size()) ; aKP++) { std::string aNameIn= aDirN[aKP] + aNameLocIn; if (ELISE_fp::exist_file(aNameIn)) { ElPackHomologue aPackIn = ElPackHomologue::FromFile(aNameIn); aNbH++; for (ElPackHomologue::const_iterator itP=aPackIn.begin() ; itP!=aPackIn.end() ; itP++) { aPackOut.Cple_Add(itP->ToCple()); } } } if (aPackOut.size() !=0) { std::string aNameOut = aDir + anICNM->Assoc1To2(aKHOut,aNameIm1,aNameIm2,true); aPackOut.StdPutInFile(aNameOut); if (0) std::cout << "aNbH " << aNbH << "\n"; } } } return EXIT_SUCCESS; }
void cMA_AffineOrient::OneItere(bool isLast) { ElRotation3D aR1 = mCamF1->RF().CurRot(); ElRotation3D aR2 = mCamF2->RF().CurRot(); std::cout << "TR = " << (aR2.tr()-aR1.tr()) << "\n"; std::cout << "I = " << aR2.ImVect(Pt3dr(1,0,0)) << euclid(aR2.ImVect(Pt3dr(1,0,0))) << "\n"; std::cout << "J = " << aR2.ImVect(Pt3dr(0,1,0)) << euclid(aR2.ImVect(Pt3dr(0,1,0))) << "\n"; std::cout << "K = " << aR2.ImVect(Pt3dr(0,0,1)) << euclid(aR2.ImVect(Pt3dr(0,0,1))) << "\n"; mSetEq.AddContrainte(mPIF->StdContraintes(),true); mSetEq.AddContrainte(mCamF1->RF().StdContraintes(),true); mSetEq.AddContrainte(mCamF2->RF().StdContraintes(),true); double aSEc2 =0; double aSEc =0; double aSP =0; int aNbP=0; for ( ElPackHomologue::iterator iT = mPack.begin(); iT != mPack.end(); iT++ ) { // double aD = mCam1.EcartProj(iT->P1(),mCam2,iT->P2()); Pt2dr aQ1 = mCam1.F2toPtDirRayonL3(iT->P1()); Pt2dr aQ2 = mCam2.F2toPtDirRayonL3(iT->P2()); //double aL = mCpl12->ResiduSigneP1P2(aQ1,aQ2); double aL2 = mCpl12->AddLiaisonP1P2(aQ1,aQ2,iT->Pds(),false); aSEc2 += ElSquare(aL2)*iT->Pds(); aSEc += ElAbs(aL2)*iT->Pds(); aSP += iT->Pds(); Pt2dr aP1 = mGeoTer.R2ToRDisc(iT->P1()); Pt2di aI1 = round_down(aP1/mPas); mTImResidu.oset(aI1,aL2*mFocale); mTImPds.oset(aI1,iT->Pds()); if (iT->Pds() > 1e-5) aNbP++; } if (aNbP < mNbPtMin) { mAppli.MicMacErreur ( eErrNbPointInEqOriRel, "Pas assez de point pour equation d'orientation relative", "Zone de recouvrement trop faible" ); } mSetEq.SolveResetUpdate(); // if (isLast) { std::cout << aSEc2 << " " << aSP << " " << mPack.size() << " EQuad = " << (sqrt(aSEc2/aSP)*mFocale) << " EAbs = " << ((aSEc/aSP)*mFocale) << "\n"; } }
cElHomographie cElHomographie::RobustInit(double & aDMIn,double * aQuality,const ElPackHomologue & aPack,bool & Ok ,int aNbTestEstim, double aPerc,int aNbMaxPts) { cElHomographie aRes = cElHomographie::Id(); Ok = false; Pt2dr aCdg(0,0); for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { aCdg = aCdg + itH->P1(); } aCdg = aCdg / double(aPack.size()); std::vector<std::pair<Pt2dr,Pt2dr> > aV00; std::vector<std::pair<Pt2dr,Pt2dr> > aV01; std::vector<std::pair<Pt2dr,Pt2dr> > aV10; std::vector<std::pair<Pt2dr,Pt2dr> > aV11; std::vector<std::pair<Pt2dr,Pt2dr> > aVAll; int aNbPtsTot = aPack.size(); int aCpt = 0; for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { Pt2dr aP1 = itH->P1(); Pt2dr aP2 = itH->P2(); std::pair<Pt2dr,Pt2dr> aPair(aP1,aP2); if ( (((aCpt-1)*aNbMaxPts)/aNbPtsTot) != ((aCpt*aNbMaxPts)/aNbPtsTot)) { aVAll.push_back(aPair); } if (aP1.x < aCdg.x) { if (aP1.y < aCdg.y) aV00.push_back(aPair); else aV01.push_back(aPair); } else { if (aP1.y < aCdg.y) aV10.push_back(aPair); else aV11.push_back(aPair); } aCpt++; } if (aV00.empty() || aV01.empty() || aV10.empty() || aV11.empty() ) return aRes; aDMIn = 1e30; int aNbPts = aVAll.size(); int aNbKth = ElMax(1,ElMin(aNbPts-1,round_ni((aPerc/100.0) * aNbPts))); std::vector<double> aVDist; if (aNbMaxPts<aNbPtsTot) aNbTestEstim = (aNbTestEstim*aNbPtsTot) / aNbMaxPts; // int aKMIN = -1; std::vector<double> aVD; // For tuning and show in if(0) ... while (aNbTestEstim) { int aK00 = NRrandom3(aV00.size()); int aK01 = NRrandom3(aV01.size()); int aK10 = NRrandom3(aV10.size()); int aK11 = NRrandom3(aV11.size()); ElPackHomologue aP4; AddPair(aP4,aV00[aK00]); AddPair(aP4,aV01[aK01]); AddPair(aP4,aV10[aK10]); AddPair(aP4,aV11[aK11]); cElHomographie aSol = cElHomographie(aP4,true); aVDist.clear(); for (int aK=0 ; aK< aNbPts ; aK++) { Pt2dr aP1 = aVAll[aK].first; Pt2dr aP2 = aVAll[aK].second; /* Pt2dr aDif = aP2 -aSol.Direct(aP1); double aDx = ElAbs(aDif.x); double aDy = ElAbs(aDif.y); double aDist = (aDx+aDy + ElMax(aDx,aDy))/ 2.0; */ double aDist = QuickDist(aP2 -aSol.Direct(aP1)); aVDist.push_back(aDist); } double aSom = MoyKPPVal(aVDist,aNbKth); aVD.push_back(aSom); //std::cout << "Robust:Hom:SOM = " << aDMIn << " " << aSom << "\n"; if (aSom <aDMIn) { aRes = aSol; aDMIn = aSom; } aNbTestEstim--; } // double aDMinInit = aDMIn; ElPackHomologue aPckPds; for (int anIterL2 = 0 ; anIterL2 < 4 ; anIterL2++) { aPckPds = ElPackHomologue(); aVDist.clear(); int aCpt = 0; for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { Pt2dr aP1 = itH->P1(); Pt2dr aP2 = itH->P2(); double aDist = QuickDist(aP2 -aRes.Direct(aP1)); aVDist.push_back(aDist); double aPds = 1/ (1+ 4*ElSquare(aDist/aDMIn)); aPckPds.Cple_Add(ElCplePtsHomologues(aP1,aP2,aPds)); aCpt++; } ELISE_ASSERT(aNbPtsTot==aPack.size() ,"KKKKK ????"); int aKTh = round_ni(aNbPtsTot * (aPerc/100.0)); ELISE_ASSERT(int(aVDist.size())==aNbPtsTot,"Compat MoyKPPVal/SplitArrounKthValue"); aDMIn = MoyKPPVal(aVDist,aKTh); aRes = cElHomographie(aPckPds,true); } if (aQuality) { std::vector<double> aVEstim; int aNbTestValid = 71; for (int aKTest = 0 ; aKTest <aNbTestValid ; aKTest++) { ElPackHomologue aPckPdsA; ElPackHomologue aPckPdsB; cRandNParmiQ aSelec(aNbPtsTot/2,aNbPtsTot); for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { Pt2dr aP1 = itH->P1(); Pt2dr aP2 = itH->P2(); double aDist = QuickDist(aP2 -aRes.Direct(aP1)); aVDist.push_back(aDist); double aPds = 1/ sqrt(1+ ElSquare(aDist/aDMIn)); // if (NRrandom3() > 0.5) if (aSelec.GetNext()) aPckPdsA.Cple_Add(ElCplePtsHomologues(aP1,aP2,aPds)); else aPckPdsB.Cple_Add(ElCplePtsHomologues(aP1,aP2,aPds)); } cElHomographie aResA = cElHomographie(aPckPdsA,true); cElHomographie aResB = cElHomographie(aPckPdsB,true); double aSomDist = 0; for (ElPackHomologue::tCstIter itH=aPack.begin() ; itH!=aPack.end() ; itH++) { Pt2dr aP1 = itH->P1(); Pt2dr aQ = aRes.Direct(aP1); Pt2dr aQA = aResA.Direct(aP1); Pt2dr aQB = aResB.Direct(aP1); double aDist = (QuickDist(aQ-aQA) + QuickDist(aQ-aQB) + QuickDist(aQB-aQA)) / 3.0; aSomDist += aDist; } aSomDist /= aNbPtsTot; aVEstim.push_back(aSomDist); } *aQuality = MedianeSup(aVEstim); } Ok= true; return aRes; }
static cElComposHomographie ComputeHomFromHomologues ( const ElPackHomologue & aPack, bool aL2, cElComposHomographie& aHX, cElComposHomographie& aHY, cElComposHomographie& aHZ ) { ElPackHomologue::const_iterator anIt=aPack.begin(); // 0 Point : identite if (aPack.size() ==0) { aHX = cElComposHomographie(1,0,0); aHY = cElComposHomographie(0,1,0); aHZ = cElComposHomographie(0,0,1); return aHX; } // 1 Point : translation Pt2dr P1 = anIt->P1(); Pt2dr P2 = anIt->P2(); anIt++; if (aPack.size() ==1) { Pt2dr aTr = P2 - P1; aHX = cElComposHomographie(1,0,aTr.x); aHY = cElComposHomographie(0,1,aTr.y); aHZ = cElComposHomographie(0,0,1); return aHX; } // 2 Point : Similitude Pt2dr Q1 = anIt->P1(); Pt2dr Q2 = anIt->P2(); anIt++; if (aPack.size() ==2) { Pt2dr W = (Q2-P2) / (Q1-P1); Pt2dr aTr = P2 - W* P1; aHX = cElComposHomographie(W.x,-W.y,aTr.x); aHY = cElComposHomographie(W.y,W.x,aTr.y); aHZ = cElComposHomographie(0,0,1); return aHX; } // 3 Point : Affinite Pt2dr R1 = anIt->P1(); Pt2dr R2 = anIt->P2(); anIt++; if (aPack.size() ==3) { ElMatrix<REAL> M1(2,2); SetCol(M1,0,Q1-P1); SetCol(M1,1,R1-P1); ElMatrix<REAL> M2(2,2); SetCol(M2,0,Q2-P2); SetCol(M2,1,R2-P2); ElMatrix<REAL> M = M2 * gaussj(M1); Pt2dr aTr = P2 - M* P1; aHX = cElComposHomographie(M(0,0),M(1,0),aTr.x); aHY = cElComposHomographie(M(0,1),M(1,1),aTr.y); aHZ = cElComposHomographie(0,0,1); return aHX; } cGenSysSurResol * aSys = aL2 ? ( cGenSysSurResol *) new L2SysSurResol(8) : ( cGenSysSurResol *) new SystLinSurResolu(8,aPack.size()); aSys->SetPhaseEquation(0); for ( anIt=aPack.begin() ; anIt !=aPack.end(); anIt++) { AddCoeffSysHom(aSys,anIt->P1(),anIt->P2(),anIt->Pds(),true ); AddCoeffSysHom(aSys,anIt->P1(),anIt->P2(),anIt->Pds(),false); } Im1D_REAL8 aSol = aSys->GSSR_Solve((bool *)0); REAL * aS = aSol.data(); aHX = cElComposHomographie(aS[0],aS[1],aS[2]); aHY = cElComposHomographie(aS[3],aS[4],aS[5]); aHZ = cElComposHomographie(aS[6],aS[7], 1 ); delete aSys; return aHX; }
int Luc_test_ptshom_main(int argc,char ** argv) { //===================== PARAMETRES EN DUR ============== std::string aDir = "C:/Users/Luc Girod/Desktop/TFE/Vignettage/vignette_sift3/"; std::string aPatIm = ".*NEF"; std::string Prefix = ""; // std::string Prefix = "_SRes" ; std::string Extension = "dat"; //===================== // Permet de manipuler les ensemble de nom de fichier cInterfChantierNameManipulateur * aICNM = cInterfChantierNameManipulateur::BasicAlloc(aDir); const std::vector<std::string> * aSetIm = aICNM->Get(aPatIm); //On parcourt toutes les paires d'images différentes (->testé dans le if) for (int aK1=0 ; aK1<int(aSetIm->size()) ; aK1++) { cout<<(*aSetIm)[aK1]<<endl; for (int aK2=0 ; aK2<int(aSetIm->size()) ; aK2++) { if (aK1!=aK2) { std::string aNamePack = aDir + aICNM->Assoc1To2 ( "NKS-Assoc-CplIm2Hom@"+ Prefix + "@"+Extension, (*aSetIm)[aK1], (*aSetIm)[aK2], true ); if (aK1==0) { bool Exist = ELISE_fp::exist_file(aNamePack); if (Exist) { ElPackHomologue aPack = ElPackHomologue::FromFile(aNamePack); if (aK2==1) { int aNb=0; for ( ElPackHomologue::const_iterator itP=aPack.begin(); itP!=aPack.end(); itP++ ) { if (aNb<10) std::cout << itP->P1() << itP->P2() <<"\n"; aNb++; } } std::cout << aNamePack << " " << aPack.size() << "\n"; } else std::cout << " # NO PACK FOR : " << aNamePack << "\n"; } } } } return 0; }