mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-01 17:10:26 +08:00
Retrieval margin spreading +2
Rollback change about last location in WM not used in posterior (now it is) In consoleApp, surf extraction is done outside the rtabmap processing git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@295 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
@@ -454,30 +454,26 @@ std::map<int, float> KeypointMemory::computeLikelihood(const Signature * signatu
|
||||
const std::map<int, int> & wm = this->getWorkingMem();
|
||||
for(std::map<int, int>::const_iterator iter = wm.begin(); iter!=wm.end(); ++iter)
|
||||
{
|
||||
//ignore the last in WM
|
||||
if(iter->first != wm.rbegin()->first)
|
||||
likelihood.insert(likelihood.end(), std::pair<int, float>(iter->first, 0));
|
||||
if(_tfIdfNormalized)
|
||||
{
|
||||
likelihood.insert(likelihood.end(), std::pair<int, float>(iter->first, 0));
|
||||
if(_tfIdfNormalized)
|
||||
const KeypointSignature * s = dynamic_cast<const KeypointSignature *>(this->getSignature(iter->first));
|
||||
float wordsCountRatio = -1; // default invalid
|
||||
if(s)
|
||||
{
|
||||
const KeypointSignature * s = dynamic_cast<const KeypointSignature *>(this->getSignature(iter->first));
|
||||
float wordsCountRatio = -1; // default invalid
|
||||
if(s)
|
||||
if(s->getWords().size() > newSurf->getWords().size())
|
||||
{
|
||||
if(s->getWords().size() > newSurf->getWords().size())
|
||||
{
|
||||
wordsCountRatio = float(newSurf->getWords().size()) / float(s->getWords().size());
|
||||
}
|
||||
else if(newSurf->getWords().size())
|
||||
{
|
||||
wordsCountRatio = float(s->getWords().size()) / float(newSurf->getWords().size());
|
||||
}
|
||||
calculatedWordsRatio.insert(std::pair<int, float>(iter->first, wordsCountRatio));
|
||||
wordsCountRatio = float(newSurf->getWords().size()) / float(s->getWords().size());
|
||||
}
|
||||
else
|
||||
else if(newSurf->getWords().size())
|
||||
{
|
||||
calculatedWordsRatio.insert(std::pair<int, float>(iter->first, wordsCountRatio));
|
||||
wordsCountRatio = float(s->getWords().size()) / float(newSurf->getWords().size());
|
||||
}
|
||||
calculatedWordsRatio.insert(std::pair<int, float>(iter->first, wordsCountRatio));
|
||||
}
|
||||
else
|
||||
{
|
||||
calculatedWordsRatio.insert(std::pair<int, float>(iter->first, wordsCountRatio));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -660,25 +660,21 @@ std::map<int, float> Memory::computeLikelihood(const Signature * signature, cons
|
||||
std::map<int, int>::const_iterator iter = wm.begin();
|
||||
for(; iter!=wm.end(); ++iter)
|
||||
{
|
||||
//ignore the last in WM
|
||||
if(iter->first != wm.rbegin()->first)
|
||||
float sim = signature->compareTo(this->getSignature(iter->first));
|
||||
likelihood.insert(likelihood.end(), std::pair<int, float>(iter->first, sim));
|
||||
sumSimilarity += sim;
|
||||
UDEBUG("sim %d with %d = %f", signature->id(), iter->first, sim);
|
||||
if(sim>maxSim)
|
||||
{
|
||||
float sim = signature->compareTo(this->getSignature(iter->first));
|
||||
likelihood.insert(likelihood.end(), std::pair<int, float>(iter->first, sim));
|
||||
sumSimilarity += sim;
|
||||
UDEBUG("sim %d with %d = %f", signature->id(), iter->first, sim);
|
||||
if(sim>maxSim)
|
||||
{
|
||||
maxSim = sim;
|
||||
}
|
||||
if(sim)
|
||||
{
|
||||
++nonNulls;
|
||||
}
|
||||
else
|
||||
{
|
||||
++nulls;
|
||||
}
|
||||
maxSim = sim;
|
||||
}
|
||||
if(sim)
|
||||
{
|
||||
++nonNulls;
|
||||
}
|
||||
else
|
||||
{
|
||||
++nulls;
|
||||
}
|
||||
}
|
||||
ULOGGER_DEBUG("sumSimilarity=%f, maxSim=%f, nonNulls=%d, nulls=%d)", sumSimilarity, maxSim, nonNulls, nulls);
|
||||
|
||||
@@ -892,7 +892,7 @@ void Rtabmap::process()
|
||||
// We are loosing the next loop closures (it
|
||||
// can be temporary occlusions/bad images),
|
||||
//increment the retrieval margin
|
||||
++_spreadMargin;
|
||||
_spreadMargin+=2;
|
||||
UDEBUG("Margin++");
|
||||
}
|
||||
//else don't change the margin
|
||||
|
||||
Reference in New Issue
Block a user