void cChangeCamFormat::DoAll() { mEq = mSet.NewEqCalibCroisee(mC2M,*mPIF); mSet.SetClosed(); for (int aKet=0 ; aKet< 30 ; aKet++) { if (mPIF_DR) { if (aKet== 1) mPIF_DR->SetFocFree(true); if (aKet >= 3) { int aDegre = ElMin(mDegRadOut,1+ (aKet-3)/3); mPIF_DR->SetDRFDegreFige(aDegre); } if (aKet >= 10) mPIF_DR->SetCDistPPLie(); if ((aKet >= 15) && (! mCDistPPLie)) mPIF_DR->SetLibertePPAndCDist(true,true); } else { ELISE_ASSERT(false,"Unknown Cam Modele"); } int aNBP = 20; mSet.AddContrainte(mPIF->StdContraintes(),true); mSet.AddContrainte(mEq->RotF().StdContraintes(),true); for (int aKx=0 ; aKx<= aNBP ; aKx++) { double aPdsX = aKx / double(aNBP); for (int aKy=0 ; aKy<= aNBP ; aKy++) { double aPdsY = aKy / double(aNBP); Pt2dr aP0 (mSz.x*aPdsX,mSz.y*aPdsY); Pt3dr aDir = mCamInput->F2toDirRayonL3(aP0); Pt2dr aPNew = ToNewCoord(aP0); mEq->AddObservation(aPNew,aDir); } } mSet.SolveResetUpdate(); } }
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"; } }