Set cv::NORM_L2SQR for bruteforce NN with float descriptors, installing rtabmap-console

This commit is contained in:
Mathieu Labbe
2014-12-04 11:47:25 -05:00
parent fb4006170c
commit 4b8176a0ba
3 changed files with 39 additions and 8 deletions
+2 -2
View File
@@ -456,7 +456,7 @@ std::list<int> VWDictionary::addNewWords(const cv::Mat & descriptors,
else if(_strategy == kNNBruteForce) else if(_strategy == kNNBruteForce)
{ {
bruteForce = true; bruteForce = true;
cv::BFMatcher matcher(type==CV_8U?cv::NORM_HAMMING:cv::NORM_L2); cv::BFMatcher matcher(type==CV_8U?cv::NORM_HAMMING:cv::NORM_L2SQR);
matcher.knnMatch(descriptors, _dataTree, matches, k); matcher.knnMatch(descriptors, _dataTree, matches, k);
} }
else if(_strategy == kNNBruteForceGPU) else if(_strategy == kNNBruteForceGPU)
@@ -671,7 +671,7 @@ std::vector<int> VWDictionary::findNN(const std::list<VisualWord *> & vws) const
else if(_strategy == kNNBruteForce) else if(_strategy == kNNBruteForce)
{ {
bruteForce = true; bruteForce = true;
cv::BFMatcher matcher(type==CV_8U?cv::NORM_HAMMING:cv::NORM_L2); cv::BFMatcher matcher(type==CV_8U?cv::NORM_HAMMING:cv::NORM_L2SQR);
matcher.knnMatch(query, _dataTree, matches, k); matcher.knnMatch(query, _dataTree, matches, k);
} }
else if(_strategy == kNNBruteForceGPU) else if(_strategy == kNNBruteForceGPU)
+4
View File
@@ -29,4 +29,8 @@ TARGET_LINK_LIBRARIES(consoleApp rtabmap_core rtabmap_utilite ${LIBRARIES})
SET_TARGET_PROPERTIES( consoleApp SET_TARGET_PROPERTIES( consoleApp
PROPERTIES OUTPUT_NAME ${PROJECT_PREFIX}-console) PROPERTIES OUTPUT_NAME ${PROJECT_PREFIX}-console)
INSTALL(TARGETS consoleApp
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT runtime
BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}" COMPONENT runtime)
+33 -6
View File
@@ -70,7 +70,8 @@ void showUsage()
" -warn Set Log level to Warning (Default Error)\n" " -warn Set Log level to Warning (Default Error)\n"
" -exit_warn Set exit level to Warning (Default Fatal)\n" " -exit_warn Set exit level to Warning (Default Fatal)\n"
" -exit_error Set exit level to Error (Default Fatal)\n" " -exit_error Set exit level to Error (Default Fatal)\n"
" -v Get version of RTAB-Map\n"); " -v Get version of RTAB-Map\n"
" -input \"path\" Load previous database if it exists.\n");
exit(1); exit(1);
} }
@@ -118,6 +119,7 @@ int main(int argc, char * argv[])
int loopDataset = 0; int loopDataset = 0;
int repeat = 0; int repeat = 0;
bool createGT = false; bool createGT = false;
std::string inputDbPath;
int imageWidth = 0; int imageWidth = 0;
int imageHeight = 0; int imageHeight = 0;
int startAt = 1; int startAt = 1;
@@ -267,6 +269,19 @@ int main(int argc, char * argv[])
createGT = true; createGT = true;
continue; continue;
} }
if(strcmp(argv[i], "-input") == 0)
{
++i;
if(i < argc)
{
inputDbPath = argv[i];
}
else
{
showUsage();
}
continue;
}
if(strcmp(argv[i], "-debug") == 0) if(strcmp(argv[i], "-debug") == 0)
{ {
logLevel = ULogger::kDebug; logLevel = ULogger::kDebug;
@@ -367,15 +382,25 @@ int main(int argc, char * argv[])
ULogger::setLevel(logLevel); ULogger::setLevel(logLevel);
ULogger::setExitLevel(exitLevel); ULogger::setExitLevel(exitLevel);
// Create tasks : memory is deleted // Create tasks
Rtabmap rtabmap; Rtabmap rtabmap;
if(inputDbPath.empty())
{
inputDbPath = "rtabmapconsole.db";
if(UFile::erase(inputDbPath) == 0)
{
printf("Deleted database \"%s\".\n", inputDbPath.c_str());
}
}
else
{
printf("Loading database \"%s\".\n", inputDbPath.c_str());
}
// Disable statistics (we don't need them) // Disable statistics (we don't need them)
pm.insert(ParametersPair(Parameters::kRtabmapPublishStats(), "false")); pm.insert(ParametersPair(Parameters::kRtabmapPublishStats(), "false"));
// use default working directory
pm.insert(ParametersPair(Parameters::kRtabmapWorkingDirectory(), Parameters::defaultRtabmapWorkingDirectory()));
pm.insert(ParametersPair(Parameters::kRGBDEnabled(), "false")); pm.insert(ParametersPair(Parameters::kRGBDEnabled(), "false"));
rtabmap.init(pm); rtabmap.init(pm, inputDbPath);
rtabmap.setTimeThreshold(timeThreshold); // in ms rtabmap.setTimeThreshold(timeThreshold); // in ms
printf("Avpd init time = %fs\n", timer.ticks()); printf("Avpd init time = %fs\n", timer.ticks());
@@ -407,7 +432,7 @@ int main(int argc, char * argv[])
} }
if(rtabmap.getWM().size() || rtabmap.getSTM().size()) if(rtabmap.getWM().size() || rtabmap.getSTM().size())
{ {
printf("[Warning] RTAB-Map database is not empty (%s)\n", (rtabmap.getWorkingDir()+Parameters::getDefaultDatabaseName()).c_str()); printf("[Warning] RTAB-Map database is not empty (%s)\n", inputDbPath.c_str());
} }
printf("\nProcessing images...\n"); printf("\nProcessing images...\n");
@@ -531,5 +556,7 @@ int main(int argc, char * argv[])
printf(" Cleanup time = %fs\n", timer.ticks()); printf(" Cleanup time = %fs\n", timer.ticks());
printf("Database (\"%s\") and log files saved to current directory.\n", inputDbPath.c_str());
return 0; return 0;
} }