Files
rtabmap/preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary.html
T

1697 lines
93 KiB
HTML

<!-- HTML header for doxygen 1.9.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>RTAB-Map: rtabmap::VWDictionary Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="custom.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">window.RTABMAP_DOC_ROOT="";</script>
<script type="text/javascript" src="../versions.js"></script>
<script type="text/javascript" src="version-switcher.js"></script>
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">DoxygenAwesomeDarkModeToggle.init();</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">RTAB-Map<span id="projectnumber">&#160;0.23.10</span>
</div>
<div id="projectbrief">Real-Time Appearance-Based Mapping</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classrtabmap_1_1VWDictionary.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classrtabmap_1_1VWDictionary-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">rtabmap::VWDictionary Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Manages a dictionary of visual words for visual place recognition and loop closure detection.
<a href="classrtabmap_1_1VWDictionary.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a9466840dd5ad3dc914543a97421c3655" id="r_a9466840dd5ad3dc914543a97421c3655"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a> { <br />
&#160;&#160;<a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655ae4301e202dd36e997bf3298390c667f0">kNNFlannNaive</a>
, <a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655aaa1ea80fc9ca8809ad9b959e2e1564c5">kNNFlannKdTree</a>
, <a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a89ab72d0bccd61bb11abbd1edf1e6992">kNNFlannLSH</a>
, <a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a1745dd334296b8a41cf0c88dcc8a7d5d">kNNBruteForce</a>
, <br />
&#160;&#160;<a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a602d99d5bdef453a39339a0b45979451">kNNBruteForceGPU</a>
, <a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655afeba67ed0aafc39aa35b2a194e147ff9">kNNUndef</a>
<br />
}</td></tr>
<tr class="memdesc:a9466840dd5ad3dc914543a97421c3655"><td class="mdescLeft">&#160;</td><td class="mdescRight">Nearest neighbor search strategies for descriptor matching. <a href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">More...</a><br /></td></tr>
<tr class="separator:a9466840dd5ad3dc914543a97421c3655"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ada3980b520d8411a1ebb3ce14e2f8734" id="r_ada3980b520d8411a1ebb3ce14e2f8734"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ada3980b520d8411a1ebb3ce14e2f8734">VWDictionary</a> (const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;parameters=<a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>())</td></tr>
<tr class="memdesc:ada3980b520d8411a1ebb3ce14e2f8734"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:ada3980b520d8411a1ebb3ce14e2f8734"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7f669f103368e30e31a028efbcac89d" id="r_af7f669f103368e30e31a028efbcac89d"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#af7f669f103368e30e31a028efbcac89d">~VWDictionary</a> ()</td></tr>
<tr class="memdesc:af7f669f103368e30e31a028efbcac89d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:af7f669f103368e30e31a028efbcac89d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89893faef6c96e3b19bfeab86094af81" id="r_a89893faef6c96e3b19bfeab86094af81"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a89893faef6c96e3b19bfeab86094af81">parseParameters</a> (const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;parameters)</td></tr>
<tr class="memdesc:a89893faef6c96e3b19bfeab86094af81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse and apply parameters from a parameters map. <br /></td></tr>
<tr class="separator:a89893faef6c96e3b19bfeab86094af81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a844ae27eb6d1f0674c8f7777451812c5" id="r_a844ae27eb6d1f0674c8f7777451812c5"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a844ae27eb6d1f0674c8f7777451812c5">update</a> ()</td></tr>
<tr class="memdesc:a844ae27eb6d1f0674c8f7777451812c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the search index with newly added words. <br /></td></tr>
<tr class="separator:a844ae27eb6d1f0674c8f7777451812c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2998a6b11e102a2253ac592acf076841" id="r_a2998a6b11e102a2253ac592acf076841"><td class="memItemLeft" align="right" valign="top">virtual std::list&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a2998a6b11e102a2253ac592acf076841">addNewWords</a> (const cv::Mat &amp;descriptors, int signatureId)</td></tr>
<tr class="memdesc:a2998a6b11e102a2253ac592acf076841"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add new visual words from descriptors. <br /></td></tr>
<tr class="separator:a2998a6b11e102a2253ac592acf076841"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad464ad961b0e4d4cd6dd7895e9ff3d59" id="r_ad464ad961b0e4d4cd6dd7895e9ff3d59"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ad464ad961b0e4d4cd6dd7895e9ff3d59">addWord</a> (<a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> *vw)</td></tr>
<tr class="memdesc:ad464ad961b0e4d4cd6dd7895e9ff3d59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add an existing visual word to the dictionary. <br /></td></tr>
<tr class="separator:ad464ad961b0e4d4cd6dd7895e9ff3d59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2f21a98b70e91ab2e8a07151c508d1c" id="r_ac2f21a98b70e91ab2e8a07151c508d1c"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ac2f21a98b70e91ab2e8a07151c508d1c">findNN</a> (const std::list&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp;vws) const</td></tr>
<tr class="memdesc:ac2f21a98b70e91ab2e8a07151c508d1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find nearest neighbor visual word IDs for a list of visual words. <br /></td></tr>
<tr class="separator:ac2f21a98b70e91ab2e8a07151c508d1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aada11cf01b586ac8205f8bff0b1ab295" id="r_aada11cf01b586ac8205f8bff0b1ab295"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#aada11cf01b586ac8205f8bff0b1ab295">findNN</a> (const cv::Mat &amp;descriptors) const</td></tr>
<tr class="memdesc:aada11cf01b586ac8205f8bff0b1ab295"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find nearest neighbor visual word IDs for descriptors. <br /></td></tr>
<tr class="separator:aada11cf01b586ac8205f8bff0b1ab295"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aea2f0d043d043df37258dc225c62edec" id="r_aea2f0d043d043df37258dc225c62edec"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#aea2f0d043d043df37258dc225c62edec">addWordRef</a> (int wordId, int signatureId)</td></tr>
<tr class="memdesc:aea2f0d043d043df37258dc225c62edec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a reference from a visual word to a signature. <br /></td></tr>
<tr class="separator:aea2f0d043d043df37258dc225c62edec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4a70358ca2db8e63c67a30383a1d34b" id="r_ac4a70358ca2db8e63c67a30383a1d34b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ac4a70358ca2db8e63c67a30383a1d34b">removeAllWordRef</a> (int wordId, int signatureId)</td></tr>
<tr class="memdesc:ac4a70358ca2db8e63c67a30383a1d34b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove all references from a visual word to a signature. <br /></td></tr>
<tr class="separator:ac4a70358ca2db8e63c67a30383a1d34b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5cf9981cf11f8f93280b7d0c195159e1" id="r_a5cf9981cf11f8f93280b7d0c195159e1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a5cf9981cf11f8f93280b7d0c195159e1">getWord</a> (int id) const</td></tr>
<tr class="memdesc:a5cf9981cf11f8f93280b7d0c195159e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a visual word by ID. <br /></td></tr>
<tr class="separator:a5cf9981cf11f8f93280b7d0c195159e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbd007a028847ecbbdd50e3480ba95e3" id="r_abbd007a028847ecbbdd50e3480ba95e3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#abbd007a028847ecbbdd50e3480ba95e3">getUnusedWord</a> (int id) const</td></tr>
<tr class="memdesc:abbd007a028847ecbbdd50e3480ba95e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an unused visual word by ID. <br /></td></tr>
<tr class="separator:abbd007a028847ecbbdd50e3480ba95e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0b676e13c7dba437147520335289e97" id="r_af0b676e13c7dba437147520335289e97"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#af0b676e13c7dba437147520335289e97">setLastWordId</a> (int id)</td></tr>
<tr class="memdesc:af0b676e13c7dba437147520335289e97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the last word ID (used when loading from database) <br /></td></tr>
<tr class="separator:af0b676e13c7dba437147520335289e97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6bcad4c04999469001b5ac03b8a61ab4" id="r_a6bcad4c04999469001b5ac03b8a61ab4"><td class="memItemLeft" align="right" valign="top">const std::map&lt; int, <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a6bcad4c04999469001b5ac03b8a61ab4">getVisualWords</a> () const</td></tr>
<tr class="memdesc:a6bcad4c04999469001b5ac03b8a61ab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get all visual words. <br /></td></tr>
<tr class="separator:a6bcad4c04999469001b5ac03b8a61ab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a454639bff3d95b2f9dd346413981d5c5" id="r_a454639bff3d95b2f9dd346413981d5c5"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a454639bff3d95b2f9dd346413981d5c5">getNndrRatio</a> () const</td></tr>
<tr class="memdesc:a454639bff3d95b2f9dd346413981d5c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Nearest Neighbor Distance Ratio (NNDR) threshold. <br /></td></tr>
<tr class="separator:a454639bff3d95b2f9dd346413981d5c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a293c09f00caf84bb991d73983a5f22c8" id="r_a293c09f00caf84bb991d73983a5f22c8"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a293c09f00caf84bb991d73983a5f22c8">getNotIndexedWordsCount</a> () const</td></tr>
<tr class="memdesc:a293c09f00caf84bb991d73983a5f22c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the count of words not yet indexed in the search tree. <br /></td></tr>
<tr class="separator:a293c09f00caf84bb991d73983a5f22c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65a99ae457b1c779233de57d190ca8da" id="r_a65a99ae457b1c779233de57d190ca8da"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a65a99ae457b1c779233de57d190ca8da">getLastIndexedWordId</a> () const</td></tr>
<tr class="memdesc:a65a99ae457b1c779233de57d190ca8da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the ID of the last indexed word. <br /></td></tr>
<tr class="separator:a65a99ae457b1c779233de57d190ca8da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98447a880fdcf91709f00d00cfd4e54d" id="r_a98447a880fdcf91709f00d00cfd4e54d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a98447a880fdcf91709f00d00cfd4e54d">getTotalActiveReferences</a> () const</td></tr>
<tr class="memdesc:a98447a880fdcf91709f00d00cfd4e54d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the total number of active word-to-signature references. <br /></td></tr>
<tr class="separator:a98447a880fdcf91709f00d00cfd4e54d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a0610e87964c3881dc70cae6cd9123c" id="r_a6a0610e87964c3881dc70cae6cd9123c"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a6a0610e87964c3881dc70cae6cd9123c">getIndexedWordsCount</a> () const</td></tr>
<tr class="memdesc:a6a0610e87964c3881dc70cae6cd9123c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the count of words currently indexed in the search tree. <br /></td></tr>
<tr class="separator:a6a0610e87964c3881dc70cae6cd9123c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63ec6a9b915eb939c2650e623feb0576" id="r_a63ec6a9b915eb939c2650e623feb0576"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a63ec6a9b915eb939c2650e623feb0576">getIndexMemoryUsed</a> () const</td></tr>
<tr class="memdesc:a63ec6a9b915eb939c2650e623feb0576"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the memory used by the search index. <br /></td></tr>
<tr class="separator:a63ec6a9b915eb939c2650e623feb0576"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5177a75f402538b50ec6c36bdbc7307" id="r_ac5177a75f402538b50ec6c36bdbc7307"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ac5177a75f402538b50ec6c36bdbc7307">getMemoryUsed</a> () const</td></tr>
<tr class="memdesc:ac5177a75f402538b50ec6c36bdbc7307"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the total memory used by the dictionary. <br /></td></tr>
<tr class="separator:ac5177a75f402538b50ec6c36bdbc7307"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af60e271facb40ff668c4bc24cff1b9cc" id="r_af60e271facb40ff668c4bc24cff1b9cc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#af60e271facb40ff668c4bc24cff1b9cc">setNNStrategy</a> (<a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a> strategy)</td></tr>
<tr class="memdesc:af60e271facb40ff668c4bc24cff1b9cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the nearest neighbor search strategy. <br /></td></tr>
<tr class="separator:af60e271facb40ff668c4bc24cff1b9cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1ec0db96328164864953f25d463bcbb" id="r_ab1ec0db96328164864953f25d463bcbb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ab1ec0db96328164864953f25d463bcbb">getNNStrategy</a> () const</td></tr>
<tr class="memdesc:ab1ec0db96328164864953f25d463bcbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current nearest neighbor search strategy. <br /></td></tr>
<tr class="separator:ab1ec0db96328164864953f25d463bcbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a706e209f6228c02730dd8ea501ab5369" id="r_a706e209f6228c02730dd8ea501ab5369"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a706e209f6228c02730dd8ea501ab5369">isIncremental</a> () const</td></tr>
<tr class="memdesc:a706e209f6228c02730dd8ea501ab5369"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the dictionary is in incremental mode. <br /></td></tr>
<tr class="separator:a706e209f6228c02730dd8ea501ab5369"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f016aa45f3b3d5618d104fb799ca998" id="r_a9f016aa45f3b3d5618d104fb799ca998"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9f016aa45f3b3d5618d104fb799ca998">isIncrementalFlann</a> () const</td></tr>
<tr class="memdesc:a9f016aa45f3b3d5618d104fb799ca998"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if FLANN index is updated incrementally. <br /></td></tr>
<tr class="separator:a9f016aa45f3b3d5618d104fb799ca998"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab14ef6e8fb979dce23f9a40a1faf8dff" id="r_ab14ef6e8fb979dce23f9a40a1faf8dff"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ab14ef6e8fb979dce23f9a40a1faf8dff">setIncrementalDictionary</a> ()</td></tr>
<tr class="memdesc:ab14ef6e8fb979dce23f9a40a1faf8dff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the dictionary to incremental mode. <br /></td></tr>
<tr class="separator:ab14ef6e8fb979dce23f9a40a1faf8dff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f3712744b9f7beb5da186a842f7d74a" id="r_a5f3712744b9f7beb5da186a842f7d74a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a5f3712744b9f7beb5da186a842f7d74a">setFixedDictionary</a> (const std::string &amp;dictionaryPath)</td></tr>
<tr class="memdesc:a5f3712744b9f7beb5da186a842f7d74a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the dictionary to fixed mode and load from file. <br /></td></tr>
<tr class="separator:a5f3712744b9f7beb5da186a842f7d74a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0bcdf4002305d36bb072c019d475f13" id="r_aa0bcdf4002305d36bb072c019d475f13"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#aa0bcdf4002305d36bb072c019d475f13">isModified</a> () const</td></tr>
<tr class="memdesc:aa0bcdf4002305d36bb072c019d475f13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the dictionary has been modified since last save. <br /></td></tr>
<tr class="separator:aa0bcdf4002305d36bb072c019d475f13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2864c406b3792dbfb7c8c334b6e44d41" id="r_a2864c406b3792dbfb7c8c334b6e44d41"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned char &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a2864c406b3792dbfb7c8c334b6e44d41">serializeIndex</a> () const</td></tr>
<tr class="memdesc:a2864c406b3792dbfb7c8c334b6e44d41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize the search index to a byte vector. <br /></td></tr>
<tr class="separator:a2864c406b3792dbfb7c8c334b6e44d41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3af1cce90b50dcb0f9dcd77e1fb08aad" id="r_a3af1cce90b50dcb0f9dcd77e1fb08aad"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a3af1cce90b50dcb0f9dcd77e1fb08aad">deserializeIndex</a> (const std::vector&lt; unsigned char &gt; &amp;data)</td></tr>
<tr class="memdesc:a3af1cce90b50dcb0f9dcd77e1fb08aad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserialize the search index from a byte vector. <br /></td></tr>
<tr class="separator:a3af1cce90b50dcb0f9dcd77e1fb08aad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a29d849a7c2b626407f453e5cb4b526" id="r_a0a29d849a7c2b626407f453e5cb4b526"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a0a29d849a7c2b626407f453e5cb4b526">deserializeIndex</a> (const unsigned char *data, size_t size)</td></tr>
<tr class="memdesc:a0a29d849a7c2b626407f453e5cb4b526"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserialize the search index from raw bytes. <br /></td></tr>
<tr class="separator:a0a29d849a7c2b626407f453e5cb4b526"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ba7cb31f8658980849ffd9ce76b3cb8" id="r_a1ba7cb31f8658980849ffd9ce76b3cb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a1ba7cb31f8658980849ffd9ce76b3cb8">exportDictionary</a> (const char *fileNameReferences, const char *fileNameDescriptors) const</td></tr>
<tr class="memdesc:a1ba7cb31f8658980849ffd9ce76b3cb8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export the dictionary to files. <br /></td></tr>
<tr class="separator:a1ba7cb31f8658980849ffd9ce76b3cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a566aaf19cdc098587e88393e4140b351" id="r_a566aaf19cdc098587e88393e4140b351"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a566aaf19cdc098587e88393e4140b351">clear</a> (bool printWarningsIfNotEmpty=true)</td></tr>
<tr class="memdesc:a566aaf19cdc098587e88393e4140b351"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear all visual words and reset the dictionary. <br /></td></tr>
<tr class="separator:a566aaf19cdc098587e88393e4140b351"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab47b5ecb12c822474004f0ad77dbb388" id="r_ab47b5ecb12c822474004f0ad77dbb388"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#ab47b5ecb12c822474004f0ad77dbb388">getUnusedWords</a> () const</td></tr>
<tr class="memdesc:ab47b5ecb12c822474004f0ad77dbb388"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get all unused visual words. <br /></td></tr>
<tr class="separator:ab47b5ecb12c822474004f0ad77dbb388"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64b0aee7f33cbd4df26e2d0c14329e9d" id="r_a64b0aee7f33cbd4df26e2d0c14329e9d"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a64b0aee7f33cbd4df26e2d0c14329e9d">getUnusedWordIds</a> () const</td></tr>
<tr class="memdesc:a64b0aee7f33cbd4df26e2d0c14329e9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get IDs of all unused visual words. <br /></td></tr>
<tr class="separator:a64b0aee7f33cbd4df26e2d0c14329e9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a117282f59ed918808d8116cd1f92f412" id="r_a117282f59ed918808d8116cd1f92f412"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a117282f59ed918808d8116cd1f92f412">getUnusedWordsSize</a> () const</td></tr>
<tr class="memdesc:a117282f59ed918808d8116cd1f92f412"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the count of unused visual words. <br /></td></tr>
<tr class="separator:a117282f59ed918808d8116cd1f92f412"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a506e15bf83d16cc98aaa34057216f4" id="r_a7a506e15bf83d16cc98aaa34057216f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a7a506e15bf83d16cc98aaa34057216f4">removeWords</a> (const std::vector&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp;words)</td></tr>
<tr class="memdesc:a7a506e15bf83d16cc98aaa34057216f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove words from the dictionary. <br /></td></tr>
<tr class="separator:a7a506e15bf83d16cc98aaa34057216f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33c8904edf3d0af65dfd2a6d817416fa" id="r_a33c8904edf3d0af65dfd2a6d817416fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a33c8904edf3d0af65dfd2a6d817416fa">deleteUnusedWords</a> ()</td></tr>
<tr class="memdesc:a33c8904edf3d0af65dfd2a6d817416fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete all unused visual words. <br /></td></tr>
<tr class="separator:a33c8904edf3d0af65dfd2a6d817416fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a7092a6a6af93772ce89793c5e54a17cc" id="r_a7092a6a6af93772ce89793c5e54a17cc"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a7092a6a6af93772ce89793c5e54a17cc">nnStrategyName</a> (<a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a> strategy)</td></tr>
<tr class="memdesc:a7092a6a6af93772ce89793c5e54a17cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name of a nearest neighbor strategy. <br /></td></tr>
<tr class="separator:a7092a6a6af93772ce89793c5e54a17cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70aec2b9d1bf55d47192949aa728448e" id="r_a70aec2b9d1bf55d47192949aa728448e"><td class="memItemLeft" align="right" valign="top">static cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a70aec2b9d1bf55d47192949aa728448e">convertBinTo32F</a> (const cv::Mat &amp;descriptorsIn, bool byteToFloat=true)</td></tr>
<tr class="memdesc:a70aec2b9d1bf55d47192949aa728448e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert binary descriptors to 32-bit float format. <br /></td></tr>
<tr class="separator:a70aec2b9d1bf55d47192949aa728448e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acda9d98e4ad4897ce8a8b945f396221c" id="r_acda9d98e4ad4897ce8a8b945f396221c"><td class="memItemLeft" align="right" valign="top">static cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#acda9d98e4ad4897ce8a8b945f396221c">convert32FToBin</a> (const cv::Mat &amp;descriptorsIn, bool byteToFloat=true)</td></tr>
<tr class="memdesc:acda9d98e4ad4897ce8a8b945f396221c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert 32-bit float descriptors to binary format. <br /></td></tr>
<tr class="separator:acda9d98e4ad4897ce8a8b945f396221c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a2dbfec55a8921f52b642bf0dceea0c37" id="r_a2dbfec55a8921f52b642bf0dceea0c37"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a2dbfec55a8921f52b642bf0dceea0c37">ID_START</a></td></tr>
<tr class="memdesc:a2dbfec55a8921f52b642bf0dceea0c37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starting ID for visual words (typically 1) <br /></td></tr>
<tr class="separator:a2dbfec55a8921f52b642bf0dceea0c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83b1966a141848baeec5112c30bacf0f" id="r_a83b1966a141848baeec5112c30bacf0f"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a83b1966a141848baeec5112c30bacf0f">ID_INVALID</a></td></tr>
<tr class="memdesc:a83b1966a141848baeec5112c30bacf0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invalid visual word ID (typically 0) <br /></td></tr>
<tr class="separator:a83b1966a141848baeec5112c30bacf0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a085d69ef577600000f397bd63abeaf69" id="r_a085d69ef577600000f397bd63abeaf69"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a085d69ef577600000f397bd63abeaf69">getNextId</a> ()</td></tr>
<tr class="memdesc:a085d69ef577600000f397bd63abeaf69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next available visual word ID. <br /></td></tr>
<tr class="separator:a085d69ef577600000f397bd63abeaf69"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:adcb4739e09e27b20125880e9d3026383" id="r_adcb4739e09e27b20125880e9d3026383"><td class="memItemLeft" align="right" valign="top">std::map&lt; int, <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#adcb4739e09e27b20125880e9d3026383">_visualWords</a></td></tr>
<tr class="memdesc:adcb4739e09e27b20125880e9d3026383"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map of visual word ID to <a class="el" href="classrtabmap_1_1VisualWord.html" title="Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.">VisualWord</a> pointer. <br /></td></tr>
<tr class="separator:adcb4739e09e27b20125880e9d3026383"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5222c6a21307f0e4b9346c87db166b44" id="r_a5222c6a21307f0e4b9346c87db166b44"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1VWDictionary.html#a5222c6a21307f0e4b9346c87db166b44">_totalActiveReferences</a></td></tr>
<tr class="memdesc:a5222c6a21307f0e4b9346c87db166b44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total count of active word-to-signature references. <br /></td></tr>
<tr class="separator:a5222c6a21307f0e4b9346c87db166b44"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Manages a dictionary of visual words for visual place recognition and loop closure detection. </p>
<p>The <a class="el" href="classrtabmap_1_1VWDictionary.html" title="Manages a dictionary of visual words for visual place recognition and loop closure detection.">VWDictionary</a> class maintains a collection of visual words (feature descriptors) and provides efficient nearest neighbor search capabilities. It supports both incremental and fixed dictionary modes:</p><ul>
<li>Incremental mode: New visual words are added dynamically as new images are processed</li>
<li>Fixed mode: A pre-computed dictionary is loaded from a file</li>
</ul>
<p>The class uses various nearest neighbor search strategies (FLANN, brute force, GPU-accelerated) to match descriptors efficiently. It tracks word references to signatures (images) and manages unused words for memory optimization.</p>
<dl class="section note"><dt>Note</dt><dd>Visual words are identified by unique integer IDs starting from <a class="el" href="classrtabmap_1_1VWDictionary.html#a2dbfec55a8921f52b642bf0dceea0c37" title="Starting ID for visual words (typically 1)">VWDictionary::ID_START</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00065">65</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a9466840dd5ad3dc914543a97421c3655" name="a9466840dd5ad3dc914543a97421c3655"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9466840dd5ad3dc914543a97421c3655">&#9670;&#160;</a></span>NNStrategy</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">rtabmap::VWDictionary::NNStrategy</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Nearest neighbor search strategies for descriptor matching. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655ae4301e202dd36e997bf3298390c667f0" name="a9466840dd5ad3dc914543a97421c3655ae4301e202dd36e997bf3298390c667f0"></a>kNNFlannNaive&#160;</td><td class="fielddoc"><p>FLANN naive search (exhaustive) </p>
</td></tr>
<tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655aaa1ea80fc9ca8809ad9b959e2e1564c5" name="a9466840dd5ad3dc914543a97421c3655aaa1ea80fc9ca8809ad9b959e2e1564c5"></a>kNNFlannKdTree&#160;</td><td class="fielddoc"><p>FLANN kd-tree index (fast for high-dimensional descriptors) </p>
</td></tr>
<tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655a89ab72d0bccd61bb11abbd1edf1e6992" name="a9466840dd5ad3dc914543a97421c3655a89ab72d0bccd61bb11abbd1edf1e6992"></a>kNNFlannLSH&#160;</td><td class="fielddoc"><p>FLANN Locality-Sensitive Hashing (ideal for binary descriptors) </p>
</td></tr>
<tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655a1745dd334296b8a41cf0c88dcc8a7d5d" name="a9466840dd5ad3dc914543a97421c3655a1745dd334296b8a41cf0c88dcc8a7d5d"></a>kNNBruteForce&#160;</td><td class="fielddoc"><p>Brute force CPU search. </p>
</td></tr>
<tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655a602d99d5bdef453a39339a0b45979451" name="a9466840dd5ad3dc914543a97421c3655a602d99d5bdef453a39339a0b45979451"></a>kNNBruteForceGPU&#160;</td><td class="fielddoc"><p>Brute force GPU-accelerated search (requires CUDA) </p>
</td></tr>
<tr><td class="fieldname"><a id="a9466840dd5ad3dc914543a97421c3655afeba67ed0aafc39aa35b2a194e147ff9" name="a9466840dd5ad3dc914543a97421c3655afeba67ed0aafc39aa35b2a194e147ff9"></a>kNNUndef&#160;</td><td class="fielddoc"><p>Undefined strategy. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00072">72</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ada3980b520d8411a1ebb3ce14e2f8734" name="ada3980b520d8411a1ebb3ce14e2f8734"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ada3980b520d8411a1ebb3ce14e2f8734">&#9670;&#160;</a></span>VWDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">rtabmap::VWDictionary::VWDictionary </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td>
<td class="paramname"><em>parameters</em> = <code><a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>()</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">parameters</td><td>Optional parameters map to configure the dictionary </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af7f669f103368e30e31a028efbcac89d" name="af7f669f103368e30e31a028efbcac89d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7f669f103368e30e31a028efbcac89d">&#9670;&#160;</a></span>~VWDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual rtabmap::VWDictionary::~VWDictionary </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Destructor. </p>
<p>Clears all visual words and releases resources. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a7092a6a6af93772ce89793c5e54a17cc" name="a7092a6a6af93772ce89793c5e54a17cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7092a6a6af93772ce89793c5e54a17cc">&#9670;&#160;</a></span>nnStrategyName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static std::string rtabmap::VWDictionary::nnStrategyName </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a>&#160;</td>
<td class="paramname"><em>strategy</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the name of a nearest neighbor strategy. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">strategy</td><td>The strategy enum value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String representation of the strategy name </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00096">96</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a89893faef6c96e3b19bfeab86094af81" name="a89893faef6c96e3b19bfeab86094af81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89893faef6c96e3b19bfeab86094af81">&#9670;&#160;</a></span>parseParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void rtabmap::VWDictionary::parseParameters </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td>
<td class="paramname"><em>parameters</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Parse and apply parameters from a parameters map. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">parameters</td><td><a class="el" href="classrtabmap_1_1Parameters.html">Parameters</a> map containing configuration values </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a844ae27eb6d1f0674c8f7777451812c5" name="a844ae27eb6d1f0674c8f7777451812c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a844ae27eb6d1f0674c8f7777451812c5">&#9670;&#160;</a></span>update()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void rtabmap::VWDictionary::update </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Update the search index with newly added words. </p>
<p>This method rebuilds the nearest neighbor search index (FLANN, etc.) to include any words that were added but not yet indexed. </p>
</div>
</div>
<a id="a2998a6b11e102a2253ac592acf076841" name="a2998a6b11e102a2253ac592acf076841"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2998a6b11e102a2253ac592acf076841">&#9670;&#160;</a></span>addNewWords()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual std::list&lt; int &gt; rtabmap::VWDictionary::addNewWords </td>
<td>(</td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>descriptors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Add new visual words from descriptors. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">descriptors</td><td>Matrix of descriptors (one row per descriptor) </td></tr>
<tr><td class="paramname">signatureId</td><td>ID of the signature (image) these descriptors belong to </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>List of visual word IDs that were added or matched</dd></dl>
<p>For each descriptor, either matches it to an existing visual word (using nearest neighbor search with NNDR ratio) or creates a new visual word.</p>
<dl class="section note"><dt>Note</dt><dd>If the dictionary is not incremental (fixed), NNDR is not applied and the closest existing visual word ID is always returned. If the dictionary is incremental, a new visual word is created if NNDR validation passes; otherwise, a reference to an existing visual word is added. </dd></dl>
</div>
</div>
<a id="ad464ad961b0e4d4cd6dd7895e9ff3d59" name="ad464ad961b0e4d4cd6dd7895e9ff3d59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad464ad961b0e4d4cd6dd7895e9ff3d59">&#9670;&#160;</a></span>addWord()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void rtabmap::VWDictionary::addWord </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> *&#160;</td>
<td class="paramname"><em>vw</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Add an existing visual word to the dictionary. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vw</td><td>Pointer to the visual word to add (ownership is transferred)</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>The dictionary takes ownership of the <a class="el" href="classrtabmap_1_1VisualWord.html" title="Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.">VisualWord</a> object </dd></dl>
</div>
</div>
<a id="ac2f21a98b70e91ab2e8a07151c508d1c" name="ac2f21a98b70e91ab2e8a07151c508d1c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2f21a98b70e91ab2e8a07151c508d1c">&#9670;&#160;</a></span>findNN() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; rtabmap::VWDictionary::findNN </td>
<td>(</td>
<td class="paramtype">const std::list&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>vws</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Find nearest neighbor visual word IDs for a list of visual words. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vws</td><td>List of visual words to match </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Vector of visual word IDs (one per input visual word)</dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the dictionary is not incremental (fixed), NNDR is not applied and the closest visual word ID is always returned. If the dictionary is incremental, a valid visual word ID is returned only if NNDR validation passes. </dd></dl>
</div>
</div>
<a id="aada11cf01b586ac8205f8bff0b1ab295" name="aada11cf01b586ac8205f8bff0b1ab295"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aada11cf01b586ac8205f8bff0b1ab295">&#9670;&#160;</a></span>findNN() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; rtabmap::VWDictionary::findNN </td>
<td>(</td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>descriptors</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Find nearest neighbor visual word IDs for descriptors. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">descriptors</td><td>Matrix of descriptors (one row per descriptor) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Vector of visual word IDs (one per descriptor)</dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the dictionary is not incremental (fixed), NNDR is not applied and the closest visual word ID is always returned. If the dictionary is incremental, a valid visual word ID is returned only if NNDR validation passes. </dd></dl>
</div>
</div>
<a id="aea2f0d043d043df37258dc225c62edec" name="aea2f0d043d043df37258dc225c62edec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea2f0d043d043df37258dc225c62edec">&#9670;&#160;</a></span>addWordRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::addWordRef </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>wordId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Add a reference from a visual word to a signature. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wordId</td><td>ID of the visual word </td></tr>
<tr><td class="paramname">signatureId</td><td>ID of the signature (image) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if the word exists in the dictionary and the reference has been added, false otherwise</dd></dl>
<p>Tracks which signatures use which visual words. If the word was unused, it is removed from the unused words list. </p>
</div>
</div>
<a id="ac4a70358ca2db8e63c67a30383a1d34b" name="ac4a70358ca2db8e63c67a30383a1d34b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4a70358ca2db8e63c67a30383a1d34b">&#9670;&#160;</a></span>removeAllWordRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::removeAllWordRef </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>wordId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Remove all references from a visual word to a signature. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wordId</td><td>ID of the visual word </td></tr>
<tr><td class="paramname">signatureId</td><td>ID of the signature (image)</td></tr>
</table>
</dd>
</dl>
<p>If the word has no more references after this operation, it is added to the unused words list. </p>
</div>
</div>
<a id="a5cf9981cf11f8f93280b7d0c195159e1" name="a5cf9981cf11f8f93280b7d0c195159e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5cf9981cf11f8f93280b7d0c195159e1">&#9670;&#160;</a></span>getWord()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * rtabmap::VWDictionary::getWord </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get a visual word by ID. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Visual word ID </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the visual word, or nullptr if not found </dd></dl>
</div>
</div>
<a id="abbd007a028847ecbbdd50e3480ba95e3" name="abbd007a028847ecbbdd50e3480ba95e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abbd007a028847ecbbdd50e3480ba95e3">&#9670;&#160;</a></span>getUnusedWord()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * rtabmap::VWDictionary::getUnusedWord </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get an unused visual word by ID. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Visual word ID </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the unused visual word, or nullptr if not found or not unused</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Ownership of the returned visual word still belongs to the dictionary. To transfer ownership to the caller, <a class="el" href="classrtabmap_1_1VWDictionary.html#a7a506e15bf83d16cc98aaa34057216f4" title="Remove words from the dictionary.">removeWords()</a> must be called on this word. </dd></dl>
</div>
</div>
<a id="af0b676e13c7dba437147520335289e97" name="af0b676e13c7dba437147520335289e97"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0b676e13c7dba437147520335289e97">&#9670;&#160;</a></span>setLastWordId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::setLastWordId </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the last word ID (used when loading from database) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Last word ID </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00232">232</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a6bcad4c04999469001b5ac03b8a61ab4" name="a6bcad4c04999469001b5ac03b8a61ab4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6bcad4c04999469001b5ac03b8a61ab4">&#9670;&#160;</a></span>getVisualWords()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::map&lt; int, <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp; rtabmap::VWDictionary::getVisualWords </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get all visual words. </p>
<dl class="section return"><dt>Returns</dt><dd>Map of visual word ID to <a class="el" href="classrtabmap_1_1VisualWord.html" title="Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.">VisualWord</a> pointer </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00238">238</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a454639bff3d95b2f9dd346413981d5c5" name="a454639bff3d95b2f9dd346413981d5c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a454639bff3d95b2f9dd346413981d5c5">&#9670;&#160;</a></span>getNndrRatio()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">float rtabmap::VWDictionary::getNndrRatio </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the Nearest Neighbor Distance Ratio (NNDR) threshold. </p>
<dl class="section return"><dt>Returns</dt><dd>NNDR ratio value</dd></dl>
<p>The NNDR ratio is used to determine if a descriptor matches an existing visual word. If the ratio of distances to the first and second nearest neighbors is below this threshold, a match is accepted.</p>
<dl class="section note"><dt>Note</dt><dd>The NNDR method was introduced in "Distinctive Image Features
from Scale-Invariant Keypoints" by David Lowe (IJCV 2004). </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00251">251</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a293c09f00caf84bb991d73983a5f22c8" name="a293c09f00caf84bb991d73983a5f22c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a293c09f00caf84bb991d73983a5f22c8">&#9670;&#160;</a></span>getNotIndexedWordsCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">unsigned int rtabmap::VWDictionary::getNotIndexedWordsCount </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the count of words not yet indexed in the search tree. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of words waiting to be indexed </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00257">257</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a65a99ae457b1c779233de57d190ca8da" name="a65a99ae457b1c779233de57d190ca8da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65a99ae457b1c779233de57d190ca8da">&#9670;&#160;</a></span>getLastIndexedWordId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::VWDictionary::getLastIndexedWordId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the ID of the last indexed word. </p>
<dl class="section return"><dt>Returns</dt><dd>Last indexed word ID, or 0 if no words are indexed </dd></dl>
</div>
</div>
<a id="a98447a880fdcf91709f00d00cfd4e54d" name="a98447a880fdcf91709f00d00cfd4e54d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a98447a880fdcf91709f00d00cfd4e54d">&#9670;&#160;</a></span>getTotalActiveReferences()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::VWDictionary::getTotalActiveReferences </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the total number of active word-to-signature references. </p>
<dl class="section return"><dt>Returns</dt><dd>Total count of active references </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00269">269</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a6a0610e87964c3881dc70cae6cd9123c" name="a6a0610e87964c3881dc70cae6cd9123c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a0610e87964c3881dc70cae6cd9123c">&#9670;&#160;</a></span>getIndexedWordsCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int rtabmap::VWDictionary::getIndexedWordsCount </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the count of words currently indexed in the search tree. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of indexed words </dd></dl>
</div>
</div>
<a id="a63ec6a9b915eb939c2650e623feb0576" name="a63ec6a9b915eb939c2650e623feb0576"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63ec6a9b915eb939c2650e623feb0576">&#9670;&#160;</a></span>getIndexMemoryUsed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int rtabmap::VWDictionary::getIndexMemoryUsed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the memory used by the search index. </p>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> usage in kilobytes </dd></dl>
</div>
</div>
<a id="ac5177a75f402538b50ec6c36bdbc7307" name="ac5177a75f402538b50ec6c36bdbc7307"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5177a75f402538b50ec6c36bdbc7307">&#9670;&#160;</a></span>getMemoryUsed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned long rtabmap::VWDictionary::getMemoryUsed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the total memory used by the dictionary. </p>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> usage in bytes </dd></dl>
</div>
</div>
<a id="af60e271facb40ff668c4bc24cff1b9cc" name="af60e271facb40ff668c4bc24cff1b9cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af60e271facb40ff668c4bc24cff1b9cc">&#9670;&#160;</a></span>setNNStrategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::setNNStrategy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a>&#160;</td>
<td class="paramname"><em>strategy</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the nearest neighbor search strategy. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">strategy</td><td>The strategy to use </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if the search tree was re-initialized (strategy changed), false otherwise</dd></dl>
<p>Changing the strategy will rebuild the search index if words are already indexed. </p>
</div>
</div>
<a id="ab1ec0db96328164864953f25d463bcbb" name="ab1ec0db96328164864953f25d463bcbb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1ec0db96328164864953f25d463bcbb">&#9670;&#160;</a></span>getNNStrategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655">NNStrategy</a> rtabmap::VWDictionary::getNNStrategy </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the current nearest neighbor search strategy. </p>
<dl class="section return"><dt>Returns</dt><dd>The current NNStrategy </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00302">302</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a706e209f6228c02730dd8ea501ab5369" name="a706e209f6228c02730dd8ea501ab5369"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a706e209f6228c02730dd8ea501ab5369">&#9670;&#160;</a></span>isIncremental()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::isIncremental </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the dictionary is in incremental mode. </p>
<dl class="section return"><dt>Returns</dt><dd>true if incremental, false if fixed </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00308">308</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a9f016aa45f3b3d5618d104fb799ca998" name="a9f016aa45f3b3d5618d104fb799ca998"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f016aa45f3b3d5618d104fb799ca998">&#9670;&#160;</a></span>isIncrementalFlann()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::isIncrementalFlann </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if FLANN index is updated incrementally. </p>
<dl class="section return"><dt>Returns</dt><dd>true if incremental FLANN updates are enabled </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00314">314</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="ab14ef6e8fb979dce23f9a40a1faf8dff" name="ab14ef6e8fb979dce23f9a40a1faf8dff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab14ef6e8fb979dce23f9a40a1faf8dff">&#9670;&#160;</a></span>setIncrementalDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::setIncrementalDictionary </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the dictionary to incremental mode. </p>
<p>In incremental mode, new visual words can be added dynamically. This cannot be called if a fixed dictionary is already loaded. </p>
</div>
</div>
<a id="a5f3712744b9f7beb5da186a842f7d74a" name="a5f3712744b9f7beb5da186a842f7d74a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f3712744b9f7beb5da186a842f7d74a">&#9670;&#160;</a></span>setFixedDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::setFixedDictionary </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>dictionaryPath</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the dictionary to fixed mode and load from file. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dictionaryPath</td><td>Path to the dictionary file (.txt or .db format)</td></tr>
</table>
</dd>
</dl>
<p>Loads a pre-computed dictionary from a file. The dictionary file format in txt format should be: one line per visual word, with word ID followed by descriptor values. This cannot be called if words are already in the dictionary. </p>
</div>
</div>
<a id="aa0bcdf4002305d36bb072c019d475f13" name="aa0bcdf4002305d36bb072c019d475f13"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0bcdf4002305d36bb072c019d475f13">&#9670;&#160;</a></span>isModified()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::isModified </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the dictionary has been modified since last save. </p>
<dl class="section return"><dt>Returns</dt><dd>true if modified, false otherwise </dd></dl>
</div>
</div>
<a id="a2864c406b3792dbfb7c8c334b6e44d41" name="a2864c406b3792dbfb7c8c334b6e44d41"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2864c406b3792dbfb7c8c334b6e44d41">&#9670;&#160;</a></span>serializeIndex()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; unsigned char &gt; rtabmap::VWDictionary::serializeIndex </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize the search index to a byte vector. </p>
<dl class="section return"><dt>Returns</dt><dd>Serialized index data </dd></dl>
</div>
</div>
<a id="a3af1cce90b50dcb0f9dcd77e1fb08aad" name="a3af1cce90b50dcb0f9dcd77e1fb08aad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3af1cce90b50dcb0f9dcd77e1fb08aad">&#9670;&#160;</a></span>deserializeIndex() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::deserializeIndex </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; unsigned char &gt; &amp;&#160;</td>
<td class="paramname"><em>data</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Deserialize the search index from a byte vector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Serialized index data </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if deserialization was successful, false otherwise </dd></dl>
</div>
</div>
<a id="a0a29d849a7c2b626407f453e5cb4b526" name="a0a29d849a7c2b626407f453e5cb4b526"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a29d849a7c2b626407f453e5cb4b526">&#9670;&#160;</a></span>deserializeIndex() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::VWDictionary::deserializeIndex </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Deserialize the search index from raw bytes. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Pointer to serialized index data </td></tr>
<tr><td class="paramname">size</td><td>Size of the data in bytes </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if deserialization was successful, false otherwise </dd></dl>
</div>
</div>
<a id="a1ba7cb31f8658980849ffd9ce76b3cb8" name="a1ba7cb31f8658980849ffd9ce76b3cb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ba7cb31f8658980849ffd9ce76b3cb8">&#9670;&#160;</a></span>exportDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::exportDictionary </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>fileNameReferences</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>fileNameDescriptors</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Export the dictionary to files. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fileNameReferences</td><td>Path to file for word-to-signature references </td></tr>
<tr><td class="paramname">fileNameDescriptors</td><td>Path to file for visual word descriptors</td></tr>
</table>
</dd>
</dl>
<p>Exports the dictionary in a format that can be loaded later. </p>
</div>
</div>
<a id="a566aaf19cdc098587e88393e4140b351" name="a566aaf19cdc098587e88393e4140b351"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a566aaf19cdc098587e88393e4140b351">&#9670;&#160;</a></span>clear()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::clear </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>printWarningsIfNotEmpty</em> = <code>true</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Clear all visual words and reset the dictionary. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">printWarningsIfNotEmpty</td><td>If true, print warnings if dictionary is not empty</td></tr>
</table>
</dd>
</dl>
<p>Deletes all visual words and releases all resources. </p>
</div>
</div>
<a id="ab47b5ecb12c822474004f0ad77dbb388" name="ab47b5ecb12c822474004f0ad77dbb388"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab47b5ecb12c822474004f0ad77dbb388">&#9670;&#160;</a></span>getUnusedWords()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; rtabmap::VWDictionary::getUnusedWords </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get all unused visual words. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of pointers to unused visual words</dd></dl>
<p>Unused words are visual words that have no references to any signatures.</p>
<dl class="section note"><dt>Note</dt><dd>Ownership of the returned visual words still belongs to the dictionary. To transfer ownership to the caller, <a class="el" href="classrtabmap_1_1VWDictionary.html#a7a506e15bf83d16cc98aaa34057216f4" title="Remove words from the dictionary.">removeWords()</a> must be called on these words. </dd></dl>
</div>
</div>
<a id="a64b0aee7f33cbd4df26e2d0c14329e9d" name="a64b0aee7f33cbd4df26e2d0c14329e9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a64b0aee7f33cbd4df26e2d0c14329e9d">&#9670;&#160;</a></span>getUnusedWordIds()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; rtabmap::VWDictionary::getUnusedWordIds </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get IDs of all unused visual words. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of unused word IDs </dd></dl>
</div>
</div>
<a id="a117282f59ed918808d8116cd1f92f412" name="a117282f59ed918808d8116cd1f92f412"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a117282f59ed918808d8116cd1f92f412">&#9670;&#160;</a></span>getUnusedWordsSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">unsigned int rtabmap::VWDictionary::getUnusedWordsSize </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the count of unused visual words. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of unused words </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00399">399</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a7a506e15bf83d16cc98aaa34057216f4" name="a7a506e15bf83d16cc98aaa34057216f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a506e15bf83d16cc98aaa34057216f4">&#9670;&#160;</a></span>removeWords()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::removeWords </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>words</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Remove words from the dictionary. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">words</td><td>Vector of visual word pointers to remove</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>The caller is responsible for deleting the <a class="el" href="classrtabmap_1_1VisualWord.html" title="Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.">VisualWord</a> objects </dd></dl>
</div>
</div>
<a id="a33c8904edf3d0af65dfd2a6d817416fa" name="a33c8904edf3d0af65dfd2a6d817416fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33c8904edf3d0af65dfd2a6d817416fa">&#9670;&#160;</a></span>deleteUnusedWords()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::VWDictionary::deleteUnusedWords </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Delete all unused visual words. </p>
<p>Removes and deletes visual words that have no references to any signatures. </p>
</div>
</div>
<a id="a70aec2b9d1bf55d47192949aa728448e" name="a70aec2b9d1bf55d47192949aa728448e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70aec2b9d1bf55d47192949aa728448e">&#9670;&#160;</a></span>convertBinTo32F()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static cv::Mat rtabmap::VWDictionary::convertBinTo32F </td>
<td>(</td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>descriptorsIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>byteToFloat</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Convert binary descriptors to 32-bit float format. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">descriptorsIn</td><td>Input descriptors (CV_8UC1 for binary, or CV_32FC1 for float) </td></tr>
<tr><td class="paramname">byteToFloat</td><td>Conversion mode:<ul>
<li>If true: Simple type conversion from CV_8UC1 to CV_32FC1 using OpenCV's convertTo(). Each byte value becomes a float value (output dimensions unchanged).</li>
<li>If false: Bit-by-bit expansion for binary descriptors (e.g., <a class="el" href="classrtabmap_1_1ORB.html" title="ORB detector and descriptor (optional GPU).">ORB</a>, BRIEF). Each input byte (8 bits) is expanded into 8 float values (0.0f or 1.0f), one per bit. Output has 8x the number of columns (e.g., 32 bytes -&gt; 256 floats). </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Descriptors in 32-bit float format (CV_32FC1) </dd></dl>
</div>
</div>
<a id="acda9d98e4ad4897ce8a8b945f396221c" name="acda9d98e4ad4897ce8a8b945f396221c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acda9d98e4ad4897ce8a8b945f396221c">&#9670;&#160;</a></span>convert32FToBin()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static cv::Mat rtabmap::VWDictionary::convert32FToBin </td>
<td>(</td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>descriptorsIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>byteToFloat</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Convert 32-bit float descriptors to binary format. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">descriptorsIn</td><td>Input descriptors (CV_32FC1) </td></tr>
<tr><td class="paramname">byteToFloat</td><td>Conversion mode:<ul>
<li>If true: Simple type conversion from CV_32FC1 to CV_8UC1 using OpenCV's convertTo(). Each float value becomes a byte value (output dimensions unchanged).</li>
<li>If false: Bit-by-bit packing for binary descriptors. Each group of 8 float values (0.0f or 1.0f) is packed into 1 byte (8 bits), one bit per float. Input must have columns divisible by 8. Output has 1/8 the number of columns (e.g., 256 floats -&gt; 32 bytes). </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Descriptors in binary format (CV_8UC1) </dd></dl>
</div>
</div>
<a id="a085d69ef577600000f397bd63abeaf69" name="a085d69ef577600000f397bd63abeaf69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a085d69ef577600000f397bd63abeaf69">&#9670;&#160;</a></span>getNextId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::VWDictionary::getNextId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the next available visual word ID. </p>
<dl class="section return"><dt>Returns</dt><dd>Next unique word ID </dd></dl>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a2dbfec55a8921f52b642bf0dceea0c37" name="a2dbfec55a8921f52b642bf0dceea0c37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2dbfec55a8921f52b642bf0dceea0c37">&#9670;&#160;</a></span>ID_START</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int rtabmap::VWDictionary::ID_START</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Starting ID for visual words (typically 1) </p>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00084">84</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a83b1966a141848baeec5112c30bacf0f" name="a83b1966a141848baeec5112c30bacf0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a83b1966a141848baeec5112c30bacf0f">&#9670;&#160;</a></span>ID_INVALID</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int rtabmap::VWDictionary::ID_INVALID</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Invalid visual word ID (typically 0) </p>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00089">89</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="adcb4739e09e27b20125880e9d3026383" name="adcb4739e09e27b20125880e9d3026383"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adcb4739e09e27b20125880e9d3026383">&#9670;&#160;</a></span>_visualWords</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::map&lt;int, <a class="el" href="classrtabmap_1_1VisualWord.html">VisualWord</a> *&gt; rtabmap::VWDictionary::_visualWords</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Map of visual word ID to <a class="el" href="classrtabmap_1_1VisualWord.html" title="Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.">VisualWord</a> pointer. </p>
<dl class="section note"><dt>Note</dt><dd>All visual words (used and unused) are stored here </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00456">456</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<a id="a5222c6a21307f0e4b9346c87db166b44" name="a5222c6a21307f0e4b9346c87db166b44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5222c6a21307f0e4b9346c87db166b44">&#9670;&#160;</a></span>_totalActiveReferences</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::VWDictionary::_totalActiveReferences</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Total count of active word-to-signature references. </p>
<dl class="section note"><dt>Note</dt><dd>Used to track all references for updating common signatures </dd></dl>
<p class="definition">Definition at line <a class="el" href="VWDictionary_8h_source.html#l00462">462</a> of file <a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>corelib/include/rtabmap/core/<a class="el" href="VWDictionary_8h_source.html">VWDictionary.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacertabmap.html">rtabmap</a></li><li class="navelem"><a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>