Skip to content

Commit e1e5640

Browse files
author
deseilligny
committed
Chg Ordi
1 parent 87e1b16 commit e1e5640

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

MMVII/src/BundleAdjustment/Adjust_InstrumentalBlock.cpp

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ class cBA_BlockInstr : public cMemCheck
5656
cIrbCal_Cam1 & mMasterCam; //< Master cam to fix Gauje
5757

5858
std::vector<std::string> mVParams; //< copy of parameters
59-
cCalculator<tREAL8> * mEqRigCam; //< Calculator for
59+
cCalculator<tREAL8> * mEqRigCam; //< Calculator for pair of camera
60+
cCalculator<tREAL8> * mEqRatRC; //< calculator for rattachment to calib of rig-cam
6061
tREAL8 mMulSigmaTr; //< Multiplier for sigma-trans
6162
tREAL8 mMulSigmaRot; //< Multiplier for sigma-rot
6263
tINT4 mModeSaveSigma;
@@ -68,8 +69,9 @@ class cBA_BlockInstr : public cMemCheck
6869
cWeightAv<tREAL8,tREAL8> mAvgRot;
6970
std::map<std::string,tPoseR> mPoseInit; //< Used in case of rattachment
7071
bool mUseRat2CurrBR; //< Is there rattachment to current
71-
tREAL8 mSigTrCurBR; //<
72-
tREAL8 mSigRotCurBR; //<
72+
tREAL8 mMulSigTrCurBR; //<
73+
tREAL8 mMulSigRotCurBR; //<
74+
int mNbEqPair;
7375

7476
};
7577

@@ -98,6 +100,7 @@ cBA_BlockInstr::cBA_BlockInstr
98100
mMasterCam (mCalCams->MasterCam()),
99101
mVParams (aVParamsPair),
100102
mEqRigCam (EqBlocRig(true,1,true)),
103+
mEqRatRC (EqBlocRig_RatE(true,1,true)),
101104
mMulSigmaTr (cStrIO<double>::FromStr(GetDef(aVParamsPair,1,std::string("1.0")))),
102105
mMulSigmaRot (cStrIO<double>::FromStr(GetDef(aVParamsPair,2,std::string("1.0")))),
103106
mModeSaveSigma (cStrIO<int>::FromStr(GetDef(aVParamsPair,3,std::string("1")))),
@@ -121,8 +124,8 @@ cBA_BlockInstr::cBA_BlockInstr
121124
if (mUseRat2CurrBR)
122125
{
123126
MMVII_INTERNAL_ASSERT_always(aVParamCur.size()==2,"Bad size for Block-Rat to Cur Block Rigid");
124-
mSigTrCurBR = cStrIO<double>::FromStr(aVParamCur.at(0));
125-
mSigRotCurBR = cStrIO<double>::FromStr(aVParamCur.at(1));
127+
mMulSigTrCurBR = cStrIO<double>::FromStr(aVParamCur.at(0));
128+
mMulSigRotCurBR = cStrIO<double>::FromStr(aVParamCur.at(1));
126129
}
127130
}
128131

@@ -138,20 +141,49 @@ cIrbCal_Block & cBA_BlockInstr::CalBl()
138141

139142
void cBA_BlockInstr::OneIter_Rattach1Cam(const cIrb_Desc1Intsr& aDesc)
140143
{
141-
142144
int aKCam = mCalCams->IndexCamFromNameCalib(aDesc.NameInstr());
143145

144146
if (aKCam<0) return;
145147

146148
cPoseWithUK & aPUK = mCalCams->KthCam(aKCam).PoseUKInBlock();
147149
tPoseR aP0 = *MapGet(mPoseInit,aDesc.NameInstr());
148150

151+
149152
StdOut() << "OneIter_Rattach1CamOneIter_Rattach1Cam "
150153
<< aDesc.NameInstr()
151154
<< " Tr=" << aPUK.Pose().Tr() -aP0.Tr()
152155
<< " Rot=" << (aPUK.Pose().Rot()*aP0.Rot().MapInverse()).ToWPK()
153156
<< "\n";
154157

158+
if (!mUseRat2CurrBR)
159+
return;
160+
161+
// weight multiplier to compense number of equation Pair-Times / Cam
162+
tREAL8 aMulNb = mNbEqPair / tREAL8(mPoseInit.size());
163+
std::vector<double> aWeight;
164+
for(int aK=0 ; aK<3 ; aK++)
165+
aWeight.push_back(aMulNb/Square(mMulSigTrCurBR * aDesc.Sigma().SigmaTr()));
166+
167+
for(int aK=0 ; aK<9 ; aK++)
168+
aWeight.push_back(aMulNb/Square(mMulSigRotCurBR * aDesc.Sigma().SigmaRot()));
169+
170+
// [2.1] the observation/context are the coeef of rotation-matrix for linearization ;:
171+
std::vector<double> aVObs;
172+
173+
aPUK.PushObs(aVObs,false);
174+
AppendIn(aVObs,aP0.Tr().ToStdVector());
175+
aP0.Rot().Mat().PushByLine(aVObs);
176+
177+
std::vector<int> aVInd;
178+
aPUK.PushIndexes(aVInd);
179+
180+
Sys().R_CalcAndAddObs
181+
(
182+
mEqRatRC, // the equation itself
183+
aVInd,
184+
aVObs,
185+
cResidualWeighterExplicit<tREAL8>(false,aWeight)
186+
);
155187
}
156188

157189

@@ -163,6 +195,7 @@ void cBA_BlockInstr::OneItere_1PairCam
163195

164196
)
165197
{
198+
166199
// [0] ============== Extract unkonwns (for bloc & poses) ========
167200

168201
// [0.1] Extract indexes of camera-calib in bloc
@@ -237,6 +270,8 @@ void cBA_BlockInstr::OneItere_1PairCam
237270
mAvgRot.Add(1.0,aSumRot);
238271

239272
mSigmaPair[aPair].AddNewSigma(cIrb_SigmaInstr(1.0,1.0,std::sqrt(aSumTr),std::sqrt(aSumRot)));
273+
mNbEqPair++;
274+
240275
}
241276

242277

@@ -261,6 +296,7 @@ void cBA_BlockInstr::OneItere_1TS(cIrbComp_TimeS& aDataS)
261296

262297
void cBA_BlockInstr::OneItere()
263298
{
299+
mNbEqPair =0;
264300
mAvgTr.Reset();
265301
mAvgRot.Reset();
266302

0 commit comments

Comments
 (0)