mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
Memory::computeTransform(): Fixed empty "from" image when reextract features is true and ICP-only registration is used
This commit is contained in:
@@ -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,13 +2161,13 @@ 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);
|
||||||
|
|
||||||
|
|||||||
@@ -194,23 +194,27 @@ Transform RegistrationVis::computeTransformationImpl(
|
|||||||
UDEBUG("%s=%d", Parameters::kVisCorFlowMaxLevel().c_str(), _flowMaxLevel);
|
UDEBUG("%s=%d", Parameters::kVisCorFlowMaxLevel().c_str(), _flowMaxLevel);
|
||||||
UDEBUG("guess=%s", guess.prettyPrint().c_str());
|
UDEBUG("guess=%s", guess.prettyPrint().c_str());
|
||||||
|
|
||||||
UDEBUG("Input(%d): from=%d words, %d 3D words, %d words descriptors, %d kpts, %d kpts3D, %d descriptors",
|
UDEBUG("Input(%d): from=%d words, %d 3D words, %d words descriptors, %d kpts, %d kpts3D, %d descriptors, image=%dx%d",
|
||||||
fromSignature.id(),
|
fromSignature.id(),
|
||||||
(int)fromSignature.getWords().size(),
|
(int)fromSignature.getWords().size(),
|
||||||
(int)fromSignature.getWords3().size(),
|
(int)fromSignature.getWords3().size(),
|
||||||
(int)fromSignature.getWordsDescriptors().size(),
|
(int)fromSignature.getWordsDescriptors().size(),
|
||||||
(int)fromSignature.sensorData().keypoints().size(),
|
(int)fromSignature.sensorData().keypoints().size(),
|
||||||
(int)fromSignature.sensorData().keypoints3D().size(),
|
(int)fromSignature.sensorData().keypoints3D().size(),
|
||||||
fromSignature.sensorData().descriptors().rows);
|
fromSignature.sensorData().descriptors().rows,
|
||||||
|
fromSignature.sensorData().imageRaw().cols,
|
||||||
|
fromSignature.sensorData().imageRaw().rows);
|
||||||
|
|
||||||
UDEBUG("Input(%d): to=%d words, %d 3D words, %d words descriptors, %d kpts, %d kpts3D, %d descriptors",
|
UDEBUG("Input(%d): to=%d words, %d 3D words, %d words descriptors, %d kpts, %d kpts3D, %d descriptors, image=%dx%d",
|
||||||
toSignature.id(),
|
toSignature.id(),
|
||||||
(int)toSignature.getWords().size(),
|
(int)toSignature.getWords().size(),
|
||||||
(int)toSignature.getWords3().size(),
|
(int)toSignature.getWords3().size(),
|
||||||
(int)toSignature.getWordsDescriptors().size(),
|
(int)toSignature.getWordsDescriptors().size(),
|
||||||
(int)toSignature.sensorData().keypoints().size(),
|
(int)toSignature.sensorData().keypoints().size(),
|
||||||
(int)toSignature.sensorData().keypoints3D().size(),
|
(int)toSignature.sensorData().keypoints3D().size(),
|
||||||
toSignature.sensorData().descriptors().rows);
|
toSignature.sensorData().descriptors().rows,
|
||||||
|
toSignature.sensorData().imageRaw().cols,
|
||||||
|
toSignature.sensorData().imageRaw().rows);
|
||||||
|
|
||||||
std::string msg;
|
std::string msg;
|
||||||
|
|
||||||
@@ -1423,8 +1427,10 @@ Transform RegistrationVis::computeTransformationImpl(
|
|||||||
}
|
}
|
||||||
else if(toSignature.sensorData().isValid())
|
else if(toSignature.sensorData().isValid())
|
||||||
{
|
{
|
||||||
UWARN("Missing correspondences for registration (%d->%d). toWords = %d toImageEmpty=%d",
|
UWARN("Missing correspondences for registration (%d->%d). fromWords = %d fromImageEmpty=%d toWords = %d toImageEmpty=%d",
|
||||||
fromSignature.id(), toSignature.id(), (int)toSignature.getWords().size(), toSignature.sensorData().imageRaw().empty()?1:0);
|
fromSignature.id(), toSignature.id(),
|
||||||
|
(int)fromSignature.getWords().size(), fromSignature.sensorData().imageRaw().empty()?1:0,
|
||||||
|
(int)toSignature.getWords().size(), toSignature.sensorData().imageRaw().empty()?1:0);
|
||||||
}
|
}
|
||||||
|
|
||||||
info.inliers = inliersCount;
|
info.inliers = inliersCount;
|
||||||
|
|||||||
Reference in New Issue
Block a user