3D->3D estimation refining: using 3x sqrt(variance) instead of sqrt(9x variance). GUI: added features cloud rendering option. CloudViewer: fixed slow updateCameraTargetPosition()

This commit is contained in:
matlabbe
2016-03-01 17:33:27 -05:00
parent a89b8cb4fe
commit b6fb947310
12 changed files with 354 additions and 102 deletions

View File

@@ -1777,7 +1777,6 @@ void DBDriverSqlite3::loadSignaturesQuery(const std::list<int> & ids, std::list<
UFATAL("Wrong format of the Data.calibration field (size=%d bytes)", dataSize);
}
UWARN("Set %d models to %d", models.size(), (*iter)->id());
(*iter)->sensorData().setCameraModels(models);
(*iter)->sensorData().setStereoCameraModel(stereoModel);
}

View File

@@ -335,6 +335,7 @@ Transform OdometryF2M::computeTransform(
{
info->wordMatches = regInfo.matchesIDs;
info->wordInliers = regInfo.inliersIDs;
info->localMap = uMultimapToMap(map_->getWords3());
}
}

View File

@@ -793,11 +793,14 @@ Transform RegistrationVis::computeTransformationImpl(
else if(descriptorsFrom.rows)
{
//just create fake words
UASSERT(int(kptsFrom.size()) == descriptorsFrom.rows);
UASSERT(words3From.empty() || kptsFrom.size() == words3From.size());
for(unsigned int i=0; i<kptsFrom.size(); ++i)
UASSERT(kptsFrom.empty() || int(kptsFrom.size()) == descriptorsFrom.rows);
UASSERT(kptsFrom3D.empty() || int(kptsFrom3D.size()) == descriptorsFrom.rows);
for(int i=0; i<descriptorsFrom.rows; ++i)
{
wordsFrom.insert(std::make_pair(i, kptsFrom[i]));
if(kptsFrom.size())
{
wordsFrom.insert(std::make_pair(i, kptsFrom[i]));
}
wordsDescFrom.insert(std::make_pair(i, descriptorsFrom.row(i)));
if(kptsFrom3D.size())
{

View File

@@ -112,9 +112,7 @@ Transform transformFromXYZCorrespondences(
if (refineIterations>0)
{
double inlier_distance_threshold_sqr = inlierThreshold * inlierThreshold;
double error_threshold = inlierThreshold;
double sigma_sqr = refineSigma * refineSigma;
int refine_iterations = 0;
bool inlier_changed = false, oscillating = false;
std::vector<int> new_inliers, prev_inliers = inliers;
@@ -143,7 +141,7 @@ Transform transformFromXYZCorrespondences(
// Estimate the variance and the new threshold
double variance = model->computeVariance ();
error_threshold = sqrt (std::min (inlier_distance_threshold_sqr, sigma_sqr * variance));
error_threshold = std::min (inlierThreshold, refineSigma * sqrt(variance));
UDEBUG ("RANSAC refineModel: New estimated error threshold: %f (variance=%f) on iteration %d out of %d.",
error_threshold, variance, refine_iterations, refineIterations);