Tango: update to 0.11.14

This commit is contained in:
matlabbe
2017-02-05 17:24:45 -05:00
parent ce8bd9ac40
commit f7616f6e94
27 changed files with 2284 additions and 1575 deletions

View File

@@ -440,18 +440,22 @@ void DBDriverSqlite3::disconnectDatabaseQuery(bool save, const std::string & out
ULOGGER_DEBUG("Saving DB time = %fs", timer.ticks());
}
}
else if(save && !outputUrl.empty() && outputUrl.compare(this->getUrl()) != 0)
{
UWARN("Output database path (%s) is different than the opened database "
"path (%s). Exporting to a different path is only available "
"when database is in memory (%s=true). Opened database path is overwritten.",
outputUrl.c_str(), this->getUrl().c_str(), Parameters::kDbSqlite3InMemory().c_str());
}
// Then close (delete) the database connection
UINFO("Disconnecting database %s...", this->getUrl().c_str());
sqlite3_close(_ppDb);
_ppDb = 0;
if(save && !_dbInMemory && !outputUrl.empty() && !this->getUrl().empty() && outputUrl.compare(this->getUrl()) != 0)
{
UWARN("Output database path (%s) is different than the opened database "
"path (%s). Opened database path is overwritten then renamed to output path.",
outputUrl.c_str(), this->getUrl().c_str());
if(UFile::rename(this->getUrl(), outputUrl) != 0)
{
UERROR("Failed to rename just closed db %s to %s", this->getUrl().c_str(), outputUrl.c_str());
}
}
}
}

View File

@@ -369,9 +369,9 @@ Feature2D * Feature2D::create(Feature2D::Type type, const ParametersMap & parame
if(type == Feature2D::kFeatureSurf || type == Feature2D::kFeatureSift)
{
#if CV_MAJOR_VERSION < 3
UWARN("SURF/SIFT features cannot be used because OpenCV was not built with nonfree module. ORB is used instead.");
UWARN("SURF and SIFT features cannot be used because OpenCV was not built with nonfree module. ORB is used instead.");
#else
UWARN("SURF/SIFT features cannot be used because OpenCV was not built with xfeatures2d module. ORB is used instead.");
UWARN("SURF and SIFT features cannot be used because OpenCV was not built with xfeatures2d module. ORB is used instead.");
#endif
type = Feature2D::kFeatureOrb;
}
@@ -379,14 +379,23 @@ Feature2D * Feature2D::create(Feature2D::Type type, const ParametersMap & parame
if(type == Feature2D::kFeatureFastBrief ||
type == Feature2D::kFeatureFastFreak ||
type == Feature2D::kFeatureGfttBrief ||
type == Feature2D::kFeatureGfttFreak)
type == Feature2D::kFeatureGfttFreak ||
type == Feature2D::kFeatureFreak)
{
UWARN("BRIEF/FREAK features cannot be used because OpenCV was not built with xfeatures2d module. ORB is used instead.");
UWARN("BRIEF and FREAK features cannot be used because OpenCV was not built with xfeatures2d module. ORB is used instead.");
type = Feature2D::kFeatureOrb;
}
#endif
#endif
#if CV_MAJOR_VERSION < 3
if(type == Feature2D::kFeatureFreak)
{
UWARN("FREAK detector/descriptor can be used only with OpenCV3. GFTT/FREAK is used instead.");
type = Feature2D::kFeatureGfttFreak;
}
#endif
Feature2D * feature2D = 0;
switch(type)
{

View File

@@ -318,6 +318,7 @@ unsigned int FlannIndex::addPoints(const cv::Mat & features)
// Rebuild index if it doubles in size
if(index->sizeAtBuild() * 2 < index->size()+index->removedCount())
{
UDEBUG("Rebuilding FLANN index: %d -> %d", (int)index->sizeAtBuild(), (int)(index->size()+index->removedCount()));
index->buildIndex();
}
// if no more removed points, the index has been rebuilt
@@ -334,6 +335,7 @@ unsigned int FlannIndex::addPoints(const cv::Mat & features)
// Rebuild index if it doubles in size
if(index->sizeAtBuild() * 2 < index->size()+index->removedCount())
{
UDEBUG("Rebuilding FLANN index: %d -> %d", (int)index->sizeAtBuild(), (int)(index->size()+index->removedCount()));
index->buildIndex();
}
// if no more removed points, the index has been rebuilt
@@ -347,6 +349,7 @@ unsigned int FlannIndex::addPoints(const cv::Mat & features)
// Rebuild index if it doubles in size
if(index->sizeAtBuild() * 2 < index->size()+index->removedCount())
{
UDEBUG("Rebuilding FLANN index: %d -> %d", (int)index->sizeAtBuild(), (int)(index->size()+index->removedCount()));
index->buildIndex();
}
// if no more removed points, the index has been rebuilt
@@ -360,6 +363,7 @@ unsigned int FlannIndex::addPoints(const cv::Mat & features)
// Rebuild index if it doubles in size
if(index->sizeAtBuild() * 2 < index->size()+index->removedCount())
{
UDEBUG("Rebuilding FLANN index: %d -> %d", (int)index->sizeAtBuild(), (int)(index->size()+index->removedCount()));
index->buildIndex();
}
// if no more removed points, the index has been rebuilt

View File

@@ -305,11 +305,11 @@ void feedImpl(
gains = cv::Mat_<double>();
cv::solve(A, b, gains);
if(ULogger::kDebug)
//if(ULogger::kDebug)
{
for(int i=0; i<gains.rows; ++i)
{
UDEBUG("Gain index=%d (id=%d) = %f", i, indexToId[i], gains.row(i)[0]);
UWARN("Gain index=%d (id=%d) = %f", i, indexToId[i], gains(i, 0));
}
}
}

View File

@@ -3260,8 +3260,12 @@ Signature * Memory::createSignature(const SensorData & data, const Transform & p
if(_imagePreDecimation > 1)
{
preDecimation = _imagePreDecimation;
if(!decimatedData.rightRaw().empty() ||
(decimatedData.depthRaw().rows == decimatedData.imageRaw().rows && decimatedData.depthRaw().cols == decimatedData.imageRaw().cols))
{
decimatedData.setDepthOrRightRaw(util2d::decimate(decimatedData.depthOrRightRaw(), _imagePreDecimation));
}
decimatedData.setImageRaw(util2d::decimate(decimatedData.imageRaw(), _imagePreDecimation));
decimatedData.setDepthOrRightRaw(util2d::decimate(decimatedData.depthOrRightRaw(), _imagePreDecimation));
std::vector<CameraModel> cameraModels = decimatedData.cameraModels();
for(unsigned int i=0; i<cameraModels.size(); ++i)
{
@@ -3532,8 +3536,12 @@ Signature * Memory::createSignature(const SensorData & data, const Transform & p
// apply decimation?
if(_imagePostDecimation > 1 && !isIntermediateNode)
{
if(!data.rightRaw().empty() ||
(data.depthRaw().rows == image.rows && data.depthRaw().cols == image.cols))
{
depthOrRightImage = util2d::decimate(depthOrRightImage, _imagePostDecimation);
}
image = util2d::decimate(image, _imagePostDecimation);
depthOrRightImage = util2d::decimate(depthOrRightImage, _imagePostDecimation);
for(unsigned int i=0; i<cameraModels.size(); ++i)
{
cameraModels[i] = cameraModels[i].scaled(1.0/double(_imagePostDecimation));

View File

@@ -49,6 +49,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <fstream>
#include <string>
#define KDTREE_SIZE 4
#define KNN_CHECKS 32
namespace rtabmap
{
@@ -362,7 +365,7 @@ void VWDictionary::update()
break;
case kNNFlannKdTree:
UASSERT_MSG(descriptor.type() == CV_32F, "To use KdTree dictionary, float descriptors are required!");
_flannIndex->buildKDTreeIndex(descriptor, 4, useDistanceL1_);
_flannIndex->buildKDTreeIndex(descriptor, KDTREE_SIZE, useDistanceL1_);
break;
case kNNFlannLSH:
UASSERT_MSG(descriptor.type() == CV_8U, "To use LSH dictionary, binary descriptors are required!");
@@ -485,7 +488,7 @@ void VWDictionary::update()
break;
case kNNFlannKdTree:
UASSERT_MSG(type == CV_32F, "To use KdTree dictionary, float descriptors are required!");
_flannIndex->buildKDTreeIndex(_dataTree, 4, useDistanceL1_);
_flannIndex->buildKDTreeIndex(_dataTree, KDTREE_SIZE, useDistanceL1_);
break;
case kNNFlannLSH:
UASSERT_MSG(type == CV_8U, "To use LSH dictionary, binary descriptors are required!");
@@ -682,7 +685,7 @@ std::list<int> VWDictionary::addNewWords(const cv::Mat & descriptorsIn,
if(_strategy == kNNFlannNaive || _strategy == kNNFlannKdTree || _strategy == kNNFlannLSH)
{
_flannIndex->knnSearch(descriptors, results, dists, k);
_flannIndex->knnSearch(descriptors, results, dists, k, KNN_CHECKS);
}
else if(_strategy == kNNBruteForce)
{
@@ -992,7 +995,7 @@ std::vector<int> VWDictionary::findNN(const cv::Mat & queryIn) const
if(_strategy == kNNFlannNaive || _strategy == kNNFlannKdTree || _strategy == kNNFlannLSH)
{
_flannIndex->knnSearch(query, results, dists, k);
_flannIndex->knnSearch(query, results, dists, k, KNN_CHECKS);
}
else if(_strategy == kNNBruteForce)
{

View File

@@ -1186,7 +1186,9 @@ cv::Mat decimate(const cv::Mat & image, int decimation)
{
if((image.type() == CV_32FC1 || image.type()==CV_16UC1))
{
UASSERT_MSG(image.rows % decimation == 0 && image.cols % decimation == 0, "Decimation of depth images should be exact!");
UASSERT_MSG(image.rows % decimation == 0 && image.cols % decimation == 0,
uFormat("Decimation of depth images should be exact! (decimation=%d, size=%dx%d)",
decimation, image.cols, image.rows).c_str());
out = cv::Mat(image.rows/decimation, image.cols/decimation, image.type());
if(image.type() == CV_32FC1)