mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-04 00:57:46 +08:00
160 lines
12 KiB
HTML
160 lines
12 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: Compute Structural Complexity of a Point Cloud with Normals</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"> 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&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&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&dn=expat.txt MIT */
|
|
$(document).ready(function(){initNavTree('group__ComputeNormalsComplexity.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="#func-members">Functions</a> </div>
|
|
<div class="headertitle"><div class="title">Compute Structural Complexity of a Point Cloud with Normals</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Computes the complexity of surface normals in a point cloud using PCA.
|
|
<a href="#details">More...</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:ga3724a082502fbef6222c11843ca56b58" id="r_ga3724a082502fbef6222c11843ca56b58"><td class="memItemLeft" align="right" valign="top"><a id="ga3724a082502fbef6222c11843ca56b58" name="ga3724a082502fbef6222c11843ca56b58"></a>
|
|
float RTABMAP_CORE_EXPORT </td><td class="memItemRight" valign="bottom"><b>rtabmap::util3d::computeNormalsComplexity</b> (const <a class="el" href="classrtabmap_1_1LaserScan.html">LaserScan</a> &scan, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &t=<a class="el" href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)</td></tr>
|
|
<tr class="memdesc:ga3724a082502fbef6222c11843ca56b58"><td class="mdescLeft"> </td><td class="mdescRight">Computes the complexity of surface normals in a point cloud of type <code><a class="el" href="classrtabmap_1_1LaserScan.html" title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code>. <br /></td></tr>
|
|
<tr class="separator:ga3724a082502fbef6222c11843ca56b58"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga5a68422282e99f8d05c0821eac491895" id="r_ga5a68422282e99f8d05c0821eac491895"><td class="memItemLeft" align="right" valign="top"><a id="ga5a68422282e99f8d05c0821eac491895" name="ga5a68422282e99f8d05c0821eac491895"></a>
|
|
float RTABMAP_CORE_EXPORT </td><td class="memItemRight" valign="bottom"><b>rtabmap::util3d::computeNormalsComplexity</b> (const pcl::PointCloud< pcl::Normal > &normals, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &t=<a class="el" href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)</td></tr>
|
|
<tr class="memdesc:ga5a68422282e99f8d05c0821eac491895"><td class="mdescLeft"> </td><td class="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::Normal</code>. <br /></td></tr>
|
|
<tr class="separator:ga5a68422282e99f8d05c0821eac491895"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga13a6d7525494d390041c9ef0337e02dd" id="r_ga13a6d7525494d390041c9ef0337e02dd"><td class="memItemLeft" align="right" valign="top"><a id="ga13a6d7525494d390041c9ef0337e02dd" name="ga13a6d7525494d390041c9ef0337e02dd"></a>
|
|
float RTABMAP_CORE_EXPORT </td><td class="memItemRight" valign="bottom"><b>rtabmap::util3d::computeNormalsComplexity</b> (const pcl::PointCloud< pcl::PointNormal > &cloud, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &t=<a class="el" href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)</td></tr>
|
|
<tr class="memdesc:ga13a6d7525494d390041c9ef0337e02dd"><td class="mdescLeft"> </td><td class="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointNormal</code>. <br /></td></tr>
|
|
<tr class="separator:ga13a6d7525494d390041c9ef0337e02dd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga6e03130bf686d43ea527dc8e6f5cce55" id="r_ga6e03130bf686d43ea527dc8e6f5cce55"><td class="memItemLeft" align="right" valign="top"><a id="ga6e03130bf686d43ea527dc8e6f5cce55" name="ga6e03130bf686d43ea527dc8e6f5cce55"></a>
|
|
float RTABMAP_CORE_EXPORT </td><td class="memItemRight" valign="bottom"><b>rtabmap::util3d::computeNormalsComplexity</b> (const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &t=<a class="el" href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)</td></tr>
|
|
<tr class="memdesc:ga6e03130bf686d43ea527dc8e6f5cce55"><td class="mdescLeft"> </td><td class="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointXYZINormal</code>. <br /></td></tr>
|
|
<tr class="separator:ga6e03130bf686d43ea527dc8e6f5cce55"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga3e024c51a6a49d1c8e6b64c230148137" id="r_ga3e024c51a6a49d1c8e6b64c230148137"><td class="memItemLeft" align="right" valign="top"><a id="ga3e024c51a6a49d1c8e6b64c230148137" name="ga3e024c51a6a49d1c8e6b64c230148137"></a>
|
|
float RTABMAP_CORE_EXPORT </td><td class="memItemRight" valign="bottom"><b>rtabmap::util3d::computeNormalsComplexity</b> (const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &t=<a class="el" href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)</td></tr>
|
|
<tr class="memdesc:ga3e024c51a6a49d1c8e6b64c230148137"><td class="mdescLeft"> </td><td class="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br /></td></tr>
|
|
<tr class="separator:ga3e024c51a6a49d1c8e6b64c230148137"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<p>Computes the complexity of surface normals in a point cloud using PCA. </p>
|
|
<p>This function performs a Principal Component Analysis (PCA) on the normals of a point cloud and returns a scalar measure of their spread (complexity). A low value indicates that normals are aligned (e.g., flat surface), while a high value indicates variation in orientation (e.g., curved or rough surface).</p>
|
|
<p>If a transformation is provided, the normals are rotated accordingly before PCA. The result is normalized to lie between 0 and 1, where 0 represents minimal complexity (the normals are confined to a lower-dimensional subspace, e.g. a flat surface) and 1 represents maximal complexity (the normal directions are isotropic).</p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">cloud</td><td>The input point cloud or laser scan containing normals (pcl::PointNormal), or simply normals. </td></tr>
|
|
<tr><td class="paramname">t</td><td>The transform to apply to the normals (only the rotation is used). </td></tr>
|
|
<tr><td class="paramname">is2d</td><td>Set to true if the data is 2D (normals will be analyzed in 2D space). </td></tr>
|
|
<tr><td class="paramname">pcaEigenVectors</td><td>(Optional) Output matrix containing the eigenvectors computed by PCA. </td></tr>
|
|
<tr><td class="paramname">pcaEigenValues</td><td>(Optional) Output matrix containing the eigenvalues computed by PCA. </td></tr>
|
|
<tr><td class="paramname">centered</td><td>When true (default), use covariance PCA (centered at mean). Use false for the uncentered second-moment matrix <code>M = (1/N) sum(n_i * n_i^T)</code>, which measures span of normal directions and correctly identifies degeneracy even when there are only N (rather than N+1) distinct viewpoint-flipped normal directions in N-D space.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>A float value between 0 and 1 representing the complexity of the normal distribution. Returns 0 if not enough valid normals are available.</dd></dl>
|
|
<dl class="section note"><dt>Note</dt><dd>Invalid normals (containing NaN or Inf) are automatically filtered out. The result is the smallest eigenvalue (2nd in 2D, 3rd in 3D) scaled by the number of dimensions (2 or 3), so that it is normalized against the unit-norm normals. </dd></dl>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<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>
|