Skip to content

Commit 7595e2c

Browse files
committed
adj support multiple TSL raster
1 parent 1de661d commit 7595e2c

File tree

3 files changed

+35
-27
lines changed

3 files changed

+35
-27
lines changed

MMVII/src/BundleAdjustment/BundleAdjustment.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,14 @@ private :
407407
};
408408

409409

410+
// record all data for each scan raster
411+
struct cStaticLidarBAData
412+
{
413+
std::string mName;
414+
cStaticLidar * mLidarRaster; //< raster representations of lidar
415+
std::list<std::set<cPt2di>> mLPatchesP; //< set of patches as px in raster, consituted by 3D points in a lidar scan
416+
};
417+
410418
class cBA_LidarPhotograRaster : public cBA_LidarPhotogra
411419
{
412420
public :
@@ -418,8 +426,7 @@ public :
418426
/// add observation
419427
virtual void AddObs() override;
420428
private :
421-
cStaticLidar * mLidarData; ///< Raster representations of lidar
422-
std::list<std::set<cPt2di>> mLPatchesP; ///< set of patches as px in raster, consituted by 3D points in a lidar scan
429+
std::vector<cStaticLidarBAData> mVLidarData; ///< vector of raster representations of lidar
423430
};
424431

425432

MMVII/src/BundleAdjustment/Bundle_LidarPhotogra.cpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -117,31 +117,30 @@ cBA_LidarPhotograTri::cBA_LidarPhotograTri(cPhotogrammetricProject * aPhProj,
117117
cBA_LidarPhotograRaster::cBA_LidarPhotograRaster(cPhotogrammetricProject * aPhProj,
118118
cMMVII_BundleAdj& aBA,
119119
const std::vector<std::string>& aParam) :
120-
cBA_LidarPhotogra(aPhProj, aBA, aParam), mLidarData(nullptr)
120+
cBA_LidarPhotogra(aPhProj, aBA, aParam)
121121
{
122122
//read all xml files from directory?
123123
mPhProj->DPStaticLidar().SetDirIn(aParam.at(1));
124124
std::string aPat2Sup = cStaticLidar::ScanPrefixName() + "(.*)-(.*)\\." + GlobTaggedNameDefSerial() ;
125125
std::string aFullPat2Sup = mPhProj->DPStaticLidar().FullDirIn() + aPat2Sup;
126126
tNameSet aSet = SetNameFromPat(aFullPat2Sup);
127127
std::vector<std::string> aVect = ToVect(aSet);
128-
MMVII_INTERNAL_ASSERT_User(aVect.size()==1,
129-
eTyUEr::eUnClassedError,"Only one scan per directory is supported for now.");
130128
for (const auto & aNameSens : aVect)
131129
{
132-
// TODO: make a vector of lidar data?
133-
if (mLidarData) delete mLidarData;
134-
mLidarData = mPhProj->ReadStaticLidar(mPhProj->DPStaticLidar(), aNameSens, true);
130+
cStaticLidar * aLidarData = mPhProj->ReadStaticLidar(mPhProj->DPStaticLidar(), aNameSens, true);
131+
MMVII_INTERNAL_ASSERT_User(aLidarData,
132+
eTyUEr::eUnClassedError,"Error opening static scans " + aNameSens);
133+
mVLidarData.push_back({aNameSens, aLidarData, {}});
135134
}
136135

137-
MMVII_INTERNAL_ASSERT_User(mLidarData,
138-
eTyUEr::eUnClassedError,"Error opening static scans " + aFullPat2Sup);
139-
140136
// Creation of the patches, choose a neigborhood around patch centers. TODO: adapt to images ground pixels size?
141137
if (mModeSim==eImatchCrit::eDifRad)
142138
mNbPointByPatch = 1;
143-
mLidarData->MakePatches(mLPatchesP,mVCam,mNbPointByPatch,5);
144-
StdOut() << "Nb patches: " << mLPatchesP.size() << "\n";
139+
for (auto & aLidarData: mVLidarData)
140+
{
141+
aLidarData.mLidarRaster->MakePatches(aLidarData.mLPatchesP,mVCam,mNbPointByPatch,5);
142+
StdOut() << "Nb patches for " << aLidarData.mName << ": " << aLidarData.mLPatchesP.size() << "\n";
143+
}
145144
}
146145

147146

@@ -199,20 +198,22 @@ void cBA_LidarPhotograRaster::AddObs()
199198
mNbUsedObs = 0;
200199
if (mModeSim==eImatchCrit::eDifRad)
201200
{
202-
for (const auto& aPatch : mLPatchesP)
203-
{
204-
Add1Patch(mWeight,{mLidarData->Image2Ground(*aPatch.begin())});
205-
}
201+
for (auto & aLidarData: mVLidarData)
202+
for (const auto& aPatch : aLidarData.mLPatchesP)
203+
{
204+
Add1Patch(mWeight,{aLidarData.mLidarRaster->Image2Ground(*aPatch.begin())});
205+
}
206206
}
207207
else
208208
{
209-
for (const auto& aPatch : mLPatchesP)
210-
{
211-
std::vector<cPt3dr> aVP;
212-
for (const auto aPt : aPatch)
213-
aVP.push_back(mLidarData->Image2Ground(aPt));
214-
Add1Patch(mWeight,aVP);
215-
}
209+
for (auto & aLidarData: mVLidarData)
210+
for (const auto& aPatch : aLidarData.mLPatchesP)
211+
{
212+
std::vector<cPt3dr> aVP;
213+
for (const auto aPt : aPatch)
214+
aVP.push_back(aLidarData.mLidarRaster->Image2Ground(aPt));
215+
Add1Patch(mWeight,aVP);
216+
}
216217
}
217218

218219
if (mLastResidual.SW() != 0)

MMVII/src/Mesh/cStaticLidar.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,10 +1127,10 @@ void TestRaster2Gnd2Raster(const std::vector<TYPE> &aVectPtsTest, cStaticLidar *
11271127
long i=0;
11281128
for (auto & aPIm: aVectPtsTest)
11291129
{
1130-
std::cout<<"Test " << i << ": "<<aPIm<<"\n";
1130+
//std::cout<<"Test " << i << ": "<<aPIm<<"\n";
11311131
auto aPgnd = aScan->Image2Ground(aPIm);
11321132
auto aPImtest = aScan->Ground2ImagePrecise(aPgnd);
1133-
std::cout<<"Result: "<<aPIm<<" -> "<<aPgnd<<" -> "<<aPImtest<<"\n";
1133+
//std::cout<<"Result: "<<aPIm<<" -> "<<aPgnd<<" -> "<<aPImtest<<"\n";
11341134
++i;
11351135
MMVII_INTERNAL_ASSERT_bench(Norm2(cPt2dr(aPIm.x(), aPIm.y())-aPImtest)<aPrecision ,"TestRaster2Gnd2Raster: " + std::to_string(i));
11361136
}
@@ -1141,7 +1141,7 @@ void TestPose(const std::string & aInPath, const std::string & aCalibName, const
11411141
{
11421142
cStaticLidar * aScan = cStaticLidar::FromFile(aInPath + aCalibName, aInPath + aScanName, aInPath);
11431143
auto aRasterPx = aScan->Ground2ImagePrecise({0,0,-8.66});
1144-
std::cout<<"Result: "<<aRasterPx<<" - theoritical "<<aSummitPx<<" -> error "<<Norm2(aRasterPx-aSummitPx)<<"\n";
1144+
//std::cout<<"Result: "<<aRasterPx<<" - theoritical "<<aSummitPx<<" -> error "<<Norm2(aRasterPx-aSummitPx)<<"\n";
11451145
MMVII_INTERNAL_ASSERT_bench(Norm2(aRasterPx-aSummitPx)<1e-3 ,"TestPose " + aScanName);
11461146
delete aScan;
11471147
}

0 commit comments

Comments
 (0)