Memory: ignore reextract features when registration is not visual

This commit is contained in:
matlabbe
2017-01-06 08:20:32 -05:00
parent 7fa559247d
commit 00c93abd1b

View File

@@ -2146,13 +2146,13 @@ Transform Memory::computeTransform(
// make sure we have all data needed // make sure we have all data needed
// load binary data from database if not in RAM (if image is already here, scan and userData should be or they are null) // load binary data from database if not in RAM (if image is already here, scan and userData should be or they are null)
if(((_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired()) && fromS.sensorData().imageCompressed().empty()) || if(((_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired()) && fromS.sensorData().imageCompressed().empty()) ||
(_registrationPipeline->isScanRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().laserScanCompressed().empty()) || (_registrationPipeline->isScanRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().laserScanCompressed().empty()) ||
(_registrationPipeline->isUserDataRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().userDataCompressed().empty())) (_registrationPipeline->isUserDataRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().userDataCompressed().empty()))
{ {
fromS.sensorData() = getNodeData(fromS.id()); fromS.sensorData() = getNodeData(fromS.id());
} }
if(((_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired()) && toS.sensorData().imageCompressed().empty()) || if(((_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired()) && toS.sensorData().imageCompressed().empty()) ||
(_registrationPipeline->isScanRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().laserScanCompressed().empty()) || (_registrationPipeline->isScanRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().laserScanCompressed().empty()) ||
(_registrationPipeline->isUserDataRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().userDataCompressed().empty())) (_registrationPipeline->isUserDataRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().userDataCompressed().empty()))
{ {
@@ -2161,27 +2161,27 @@ Transform Memory::computeTransform(
// uncompress only what we need // uncompress only what we need
cv::Mat imgBuf, depthBuf, laserBuf, userBuf; cv::Mat imgBuf, depthBuf, laserBuf, userBuf;
fromS.sensorData().uncompressData( fromS.sensorData().uncompressData(
(_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired())?&imgBuf:0, (_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&imgBuf:0,
(_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired())?&depthBuf:0, (_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&depthBuf:0,
_registrationPipeline->isScanRequired()?&laserBuf:0, _registrationPipeline->isScanRequired()?&laserBuf:0,
_registrationPipeline->isUserDataRequired()?&userBuf:0); _registrationPipeline->isUserDataRequired()?&userBuf:0);
toS.sensorData().uncompressData( toS.sensorData().uncompressData(
(_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired())?&imgBuf:0, (_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&imgBuf:0,
(_reextractLoopClosureFeatures || _registrationPipeline->isImageRequired())?&depthBuf:0, (_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&depthBuf:0,
_registrationPipeline->isScanRequired()?&laserBuf:0, _registrationPipeline->isScanRequired()?&laserBuf:0,
_registrationPipeline->isUserDataRequired()?&userBuf:0); _registrationPipeline->isUserDataRequired()?&userBuf:0);
// compute transform fromId -> toId // compute transform fromId -> toId
std::vector<int> inliersV; std::vector<int> inliersV;
if(_reextractLoopClosureFeatures || if((_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired()) ||
(fromS.getWords().size() && toS.getWords().size()) || (fromS.getWords().size() && toS.getWords().size()) ||
(!guess.isNull() && !_registrationPipeline->isImageRequired())) (!guess.isNull() && !_registrationPipeline->isImageRequired()))
{ {
Signature tmpFrom = fromS; Signature tmpFrom = fromS;
Signature tmpTo = toS; Signature tmpTo = toS;
if(_reextractLoopClosureFeatures) if(_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())
{ {
UDEBUG(""); UDEBUG("");
tmpFrom.setWords(std::multimap<int, cv::KeyPoint>()); tmpFrom.setWords(std::multimap<int, cv::KeyPoint>());