<trclass="memdesc:ga078f5eae0077169e636ec76e03973edc"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Convert <code>pcl::PCLPointCloud2</code> to <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">rtabmap::LaserScan</a> with all supported fields (see <aclass="el"href="classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007"title="Enumeration of possible formats for laser scan data.">rtabmap::LaserScan::Format</a>) <br/></td></tr>
<trclass="memdesc:a3bdae076cc5054f35393b744f478b980"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a point cloud onto the XY plane by setting all Z coordinates to zero. <br/></td></tr>
<trclass="memdesc:a72b271fa98352180241614517ef3b21e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Segments ground and obstacle indices from a point cloud using surface normals and clustering. <br/></td></tr>
<trclass="memdesc:ab156e4308c21e118ea0aa164a5ae9812"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupancy data. <br/></td></tr>
<trclass="memdesc:a9b93d07997a94a78b6be6bd573e39148"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupancy data. <br/></td></tr>
<trclass="memdesc:a7d90f3a00301f9f7c79cd6fc6cd663c2"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates 2D ground and obstacle occupancy data from a 3D point cloud. <br/></td></tr>
<trclass="memdesc:a969e2d135e91a6e2ace68850086ae0e9"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates 2D ground and obstacle occupancy data from a 3D point cloud. <br/></td></tr>
<trclass="memdesc:a3366d0a9c24960ee3f5b720945e12b1b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a PCL point cloud with RGBA information to an OpenCV RGB or BGR image. <br/></td></tr>
<trclass="memdesc:aaf77cb59d32f36c1e9baa2111a7b1b3d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a depth image from a PCL organized point cloud. <br/></td></tr>
<trclass="memdesc:a5ec62aa90ceb52a032e7e49c22e0fd76"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a PCL point cloud (with RGBA colors) into aligned RGB and depth OpenCV images. <br/></td></tr>
<trclass="memdesc:a4a95aa3704280ecff8ae50db2fdb03b5"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a single depth pixel into 3D space. <br/></td></tr>
<trclass="memdesc:a791904051b63ab0da4d972166a25ae5f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects pixel coordinates to a normalized 3D ray in camera coordinates. <br/></td></tr>
<trclass="memdesc:a45c699a4a8f4108aa31148fb706e6249"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a depth image to a 3D point cloud. <br/></td></tr>
<trclass="memitem:a9fa0222fe9a7f74fcfa4c04c0c2dd532"id="r_a9fa0222fe9a7f74fcfa4c04c0c2dd532"><tdclass="memItemLeft"align="right"valign="top">pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a9fa0222fe9a7f74fcfa4c04c0c2dd532">cloudFromDepth</a> (const cv::Mat &imageDepth, const <aclass="el"href="classrtabmap_1_1CameraModel.html">CameraModel</a>&model, int decimation=1, float maxDepth=0.0f, float minDepth=0.0f, std::vector< int > *validIndices=0)</td></tr>
<trclass="memdesc:a9fa0222fe9a7f74fcfa4c04c0c2dd532"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a depth image to a 3D point cloud using a camera model. <br/></td></tr>
<trclass="memdesc:a982bc5d13fea129a174e16373aa8a31c"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Creates a point cloud from an RGB image and a depth image. <br/></td></tr>
<trclass="memdesc:a64b369873a01960576cb34aab4c5a319"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Creates a point cloud from an RGB image and a depth image using a <aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a>. <br/></td></tr>
<trclass="memitem:aee34b5fe56014a9fa058fbdbf90cab71"id="r_aee34b5fe56014a9fa058fbdbf90cab71"><tdclass="memItemLeft"align="right"valign="top">pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#aee34b5fe56014a9fa058fbdbf90cab71">cloudFromDisparity</a> (const cv::Mat &imageDisparity, const <aclass="el"href="classrtabmap_1_1StereoCameraModel.html">StereoCameraModel</a>&model, int decimation=1, float maxDepth=0.0f, float minDepth=0.0f, std::vector< int > *validIndices=0)</td></tr>
<trclass="memdesc:aee34b5fe56014a9fa058fbdbf90cab71"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a disparity image to a 3D point cloud. <br/></td></tr>
<trclass="memdesc:a1e4a96407fb1b92018e640ef41b8db8e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a disparity image and an RGB image to a 3D point cloud with color. <br/></td></tr>
<trclass="memdesc:a406caa6c0c51bae870a8c3a44e7daccc"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a pair of stereo images (left and right) into a 3D point cloud with RGB color information. <br/></td></tr>
<trclass="memdesc:ada07c0379fcc7bb7465e31a5a53ebfaa"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a set of point clouds from sensor data. <br/></td></tr>
<trclass="memdesc:aacda489f2336d8edb4e982f61f55cc66"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a point cloud from sensor data. <br/></td></tr>
<trclass="memdesc:a2155fca440675ca9697a2fe7b2efb30e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a point cloud with RGB color data from sensor data. <br/></td></tr>
<trclass="memdesc:a29ece82e01f041cab271fe9322cf9745"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a point cloud of type pcl::PointXYZRGB from sensor data. <br/></td></tr>
<trclass="memdesc:a39d4adb63b4bd06592e2c65641a32558"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts the middle row of a depth image into a laser scan (point cloud) using camera intrinsics and a local transformation. <br/></td></tr>
<trclass="memdesc:a07f8a125805ac013039b7fa0ddb623e0"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts multiple depth images (e.g., from a stereo or multi-camera setup) into a single laser scan (point cloud). <br/></td></tr>
<trclass="memdesc:ga655a37385c6ca40ec99e76045c04040b"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><code><aclass="el"href="structrtabmap_1_1PointXYZIRT.html"title="This namespace contains 3D point cloud processing utilities.">rtabmap::PointXYZIRT</a></code> → (x, y, z, intensity, ring time) → <aclass="el"href="classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a7df3c8f97dd52461787060befaf7f2d7">LaserScan::kXYZIRT</a><br/></td></tr>
<trclass="memdesc:ga04169bd4b4488350b08709af9581b289"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><code><aclass="el"href="structrtabmap_1_1PointXYZIRT.html"title="This namespace contains 3D point cloud processing utilities.">rtabmap::PointXYZIRT</a></code> → (x, y, z, intensity, ring time) → <aclass="el"href="classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a7df3c8f97dd52461787060befaf7f2d7">LaserScan::kXYZIRT</a><br/></td></tr>
<trclass="memdesc:ga394ec840a58a1203fac9725d49a0013c"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Convert <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">rtabmap::LaserScan</a> to <code>pcl::PCLPointCloud2</code> with all supported fields (see <aclass="el"href="classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007"title="Enumeration of possible formats for laser scan data.">rtabmap::LaserScan::Format</a>) <br/></td></tr>
<trclass="memdesc:gac4aef207f79791db5064dc596e25513b"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointXYZ</code> (x, y, z); any other field of the scan is dropped. <br/></td></tr>
<trclass="memdesc:gafe2b6826178bf0af878be67bddf3c9bd"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointNormal</code> (x, y, z, nx, ny, nz); normals are zeroed if the scan has none. <br/></td></tr>
<trclass="memdesc:gaee3e6a7ef23f6e5f9a19a0b033d7522c"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointXYZRGB</code> (x, y, z, rgb); <code>r</code>, <code>g</code> and <code>b</code> are used if the scan has no color. <br/></td></tr>
<trclass="memdesc:ga734628cdc1b15384476dc94d1c3dbb4d"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointXYZI</code> (x, y, z, intensity); <code>intensity</code> is used if the scan has none. <br/></td></tr>
<trclass="memdesc:ga741bd010511d5284831012194eab99b9"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointXYZRGBNormal</code> (x, y, z, rgb, nx, ny, nz); missing color and normals are filled as above. <br/></td></tr>
<trclass="memdesc:ga8ee678c27ae59e2bb3fac8aeb55f9d92"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>→<code>PointXYZINormal</code> (x, y, z, intensity, nx, ny, nz); missing intensity and normals are filled as above. <br/></td></tr>
pcl::PointXYZ RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>laserScanToPoint</b> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&laserScan, int index)</td></tr>
<trclass="memdesc:gaeda3b4a673cb96e6421688e6c575e4e5"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointXYZ</code>. <br/></td></tr>
pcl::PointNormal RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>laserScanToPointNormal</b> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&laserScan, int index)</td></tr>
<trclass="memdesc:ga4412f275d60b69f0f62db56321c5991c"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointNormal</code>. <br/></td></tr>
<trclass="memdesc:gad0183648eae48143b33bfe969f8cbe43"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointXYZRGB</code>. <br/></td></tr>
pcl::PointXYZI RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>laserScanToPointI</b> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&laserScan, int index, float intensity)</td></tr>
<trclass="memdesc:ga03b1c3a49aba08fcbc01b5991f25d0cc"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:ga675b84c6a6edde91883e38f49c087f31"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointXYZRGBNormal</code>. <br/></td></tr>
pcl::PointXYZINormal RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>laserScanToPointINormal</b> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&laserScan, int index, float intensity)</td></tr>
<trclass="memdesc:gab69062f7ffd0f2192983c6d7afa4a171"><tdclass="mdescLeft"> </td><tdclass="mdescRight">The point at <code>index</code> of the scan, as <code>PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ad857475644e8de6d7d84b920637b2018"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the minimum and maximum 3D points from a laser scan matrix. <br/></td></tr>
<trclass="memdesc:afc22f82c00f6dcc8a4ec1963891f4b7e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the minimum and maximum 3D points from a laser scan matrix and stores the results in pcl::PointXYZ. <br/></td></tr>
<trclass="memdesc:a42fb0c483553db3b06e78d85106b8ee5"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a 2D point from the left image and its disparity into 3D space. <br/></td></tr>
<trclass="memdesc:a05a022ff5229033fc248bc497edd5449"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a 2D point from the left image and the disparity map into 3D space. <br/></td></tr>
<trclass="memdesc:a826310ce938a13b9fff64f71e7ecc057"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. <br/></td></tr>
<trclass="memdesc:a7dea084f1dbb77c8f5bc2a7241c3b566"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. <br/></td></tr>
<trclass="memdesc:a285e01226d60613ffd77d929780069ba"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. <br/></td></tr>
<trclass="memdesc:a992c9dd2c6243261244e0650d3e98564"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Fills holes (missing depth values) in a depth image by interpolating between non-zero values. <br/></td></tr>
<trclass="memdesc:ae145af1bf4955fa135bcf359fb1fe628"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters out points below a certain threshold in a depth image based on camera models. <br/></td></tr>
<trclass="memdesc:aa5a81a30a05507cb5d222f2f23c111ea"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a 3D point cloud to the best camera (NodeID -> CameraIndex) for each point based on a policy. <br/></td></tr>
<trclass="memdesc:ae29c5a7ba359682e2430f55318226b39"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects a 3D point cloud to the best camera (NodeID -> CameraIndex) for each point based on a policy. <br/></td></tr>
<trclass="memdesc:acc048e10b70e3ad3efb299926e575020"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Checks if all coordinates of a 3D point are finite. <br/></td></tr>
<trclass="memdesc:a863268b894de375aa45485dafe52dd7b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Concatenates a list of PointXYZ point clouds into a single point cloud. <br/></td></tr>
<trclass="memdesc:a909a600c90d8bc4f77b62ff21a97ddc1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Concatenates a list of PointXYZRGB point clouds into a single point cloud. <br/></td></tr>
<trclass="memdesc:aff3c61a08b0fcad7f1c3f7c847190969"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Concatenates multiple sets of indices into a single index vector. <br/></td></tr>
<trclass="memdesc:ac6c2019b1dad806d0c593e2ee3c21185"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Concatenates two sets of indices into one. <br/></td></tr>
<trclass="memdesc:a4e297ff4baacb0c658d7481eef5201a6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Saves 3D word points to a PCD file, applying a transform to each point. <br/></td></tr>
<trclass="memdesc:abf6955904a45f28187e73aa1f4c409e0"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Saves 3D word points (as OpenCV points) to a PCD file, applying a transform to each point. <br/></td></tr>
<trclass="memdesc:a5ee08270b4a9e8ad93193721c7c71556"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Loads a KITTI-style Velodyne binary scan file into an OpenCV matrix. <br/></td></tr>
<trclass="memdesc:a636c56f4ab6e58044595f95e44f93d06"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Loads a KITTI-style Velodyne binary scan and converts it to a PCL point cloud. <br/></td></tr>
<trclass="memitem:ae112015538769a29c920da97096e0d17"id="r_ae112015538769a29c920da97096e0d17"><tdclass="memItemLeft"align="right"valign="top">RTABMAP_DEPRECATED pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#ae112015538769a29c920da97096e0d17">loadBINCloud</a> (const std::string &fileName, int dim)</td></tr>
<trclass="memdesc:ae112015538769a29c920da97096e0d17"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Loads a KITTI-style Velodyne binary scan and converts it to a PCL point cloud. <br/></td></tr>
<trclass="memdesc:aefffe4f3418377f85659e7546668b190"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Loads a 3D scan from a file (.pcd, .ply, or .bin format). <br/></td></tr>
<trclass="memdesc:a86ba029bd916ab76dd5645ba7e1b2ef8"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Loads and optionally transforms/downsamples/voxelizes a point cloud. <br/></td></tr>
<trclass="memdesc:a58b9802c1fc28b7e8927359173f98de8"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts 3D point correspondences between two sets of labeled 3D points. <br/></td></tr>
<trclass="memdesc:ab6a2896e40afacde8cb8b0d10a955e02"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts reliable 3D point correspondences between two sets of labeled 3D points using RANSAC filtering. <br/></td></tr>
<trclass="memdesc:a0696277eef10a197af8fd5dcba52fc12"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts 3D point correspondences from 2D pixel matches using depth images. <br/></td></tr>
<trclass="memdesc:a340e76117340170fb465ade8b11dd6af"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts 3D correspondences from 2D feature matches using <code>pcl::PointXYZ</code> organized point clouds. <br/></td></tr>
<trclass="memdesc:a43b6de83939173dfd275cbd17f5d7500"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts 3D correspondences from 2D feature matches using <code>pcl::PointXYZRGB</code> organized point clouds. <br/></td></tr>
<trclass="memdesc:af7d4d348836959bbdce0e5db0a4af91c"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Counts the number of unique 3D point correspondences between two sets of word-indexed features. <br/></td></tr>
<trclass="memdesc:a96efcf6ed971e5a5d6b7f9a5e03d1ce3"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters pairs of 3D points by maximum depth along a specified axis and optionally removes duplicates. <br/></td></tr>
<trclass="memdesc:a188c2a13980f6b7d85e6e0804a38cb50"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Finds 2D point correspondences between two sets of keypoints based on matching word IDs. <br/></td></tr>
<trclass="memdesc:ac466a705ab9ee7d99f23842cd71f3c96"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Finds 3D point correspondences between two sets of points based on matching word IDs. <br/></td></tr>
<trclass="memdesc:a5c07f098f9f5ba889e18d22b927f3cd4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Finds 3D point correspondences between two sets of uniquely indexed 3D points. <br/></td></tr>
<trclass="memdesc:a785db0d55f5eccf209b9d3d712ec92b2"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects 2D keypoints to 3D space using the provided depth image and camera models. <br/></td></tr>
<trclass="memdesc:a4f938d094d62997e0fb5d53c59f7ef82"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects 2D keypoints to 3D space using the provided depth image and camera model. <br/></td></tr>
<trclass="memdesc:af34bc7763a1e077a3520f4952ed9d196"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Projects 2D keypoints into 3D space using a disparity image and a stereo camera model. <br/></td></tr>
<trclass="memdesc:a7d48db86fe2f0cfc9abc974a66be8695"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes 3D keypoints from corresponding 2D points in a stereo image pair. <br/></td></tr>
<trclass="memdesc:acc3c59044fcfdb8cc1fba8a41a0e9eab"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Aggregates word IDs and corresponding keypoints into a multimap. <br/></td></tr>
<trclass="memitem:a7edd91750858112fd161f0ed30af7f45"id="r_a7edd91750858112fd161f0ed30af7f45"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a7edd91750858112fd161f0ed30af7f45">commonFiltering</a> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&scan, int downsamplingStep, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalK=0, float normalRadius=0.0f, float groundNormalsUp=0.0f)</td></tr>
<trclass="memdesc:a7edd91750858112fd161f0ed30af7f45"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Applies a common set of filters to a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>, including downsampling, range limits, voxel grid filtering, and normal estimation. <br/></td></tr>
<trclass="memitem:ad02c78c4d3ca36fa9a27a845540ebe55"id="r_ad02c78c4d3ca36fa9a27a845540ebe55"><tdclass="memItemLeft"align="right"valign="top">RTABMAP_DEPRECATED <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#ad02c78c4d3ca36fa9a27a845540ebe55">commonFiltering</a> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&scan, int downsamplingStep, float rangeMin, float rangeMax, float voxelSize, int normalK, float normalRadius, bool forceGroundNormalsUp)</td></tr>
<trclass="memdesc:ad02c78c4d3ca36fa9a27a845540ebe55"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Applies a common set of filters to a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>, including downsampling, range limits, voxel grid filtering, and normal estimation. <br/></td></tr>
<trclass="memdesc:ae33bcf90896fbedc448097bed3bde0ae"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> data on a minimum and maximum Euclidean range. <br/></td></tr>
<trclass="memdesc:gaf1867021c847f77f561a96e4823a16bd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:gaeff3b4153a78703ce5be9c64f8243596"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga2a2226e27b4203d04293f84bf8032e3f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga954c38903497ffa168e9d58afc47078e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Filters a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:ga2dfe5eefc31a50912297f6341eae4446"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Splits a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga99d6429ac043d37bdef871158739557e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Splits a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga843adb51ad7882fc8c6b8d00f4663c3b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Splits a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:gac9564b3cf8c8be2f80a20655f70af4f0"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Splits a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>downsample</b> (const <aclass="el"href="classrtabmap_1_1LaserScan.html">LaserScan</a>&cloud, int step)</td></tr>
<trclass="memdesc:ga83a15e5eaeee8707bfa5563c71154579"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>. <br/></td></tr>
<trclass="memdesc:ga2f9dd8a7c572ce78b76aec448b17a863"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga7a57facb7148254d43af7577a3716d15"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:gab4b196b83a0634b8e58c145ed54d510d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:ga83657d48dce8b727088941773f4d8a73"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga8c3ca654fb0cc07084fdac8077714b3a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:ga32d575439b2f5082c3946bc964c14b75"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Downsamples a point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:gad8d88a06174857cf53b1dc2cf2310d89"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZ</code> on provided indices. <br/></td></tr>
<trclass="memdesc:ga94af1db82b1faffff875a9902d44285b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointNormal</code> on provided indices. <br/></td></tr>
<trclass="memdesc:gab2a9294812a8c0fcaed92d0f119eaa31"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZRGB</code> on provided indices. <br/></td></tr>
<trclass="memdesc:gabf0201c1253022d7ce8278fc44998530"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZRGBNormal</code> on provided indices. <br/></td></tr>
<trclass="memdesc:gaebeee3702499e5f8d692ecd0bc48029b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZI</code> on provided indices. <br/></td></tr>
<trclass="memdesc:gac5158ba02fc61bfa503967ddd5ec319d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZINormal</code> on provided indices. <br/></td></tr>
<trclass="memdesc:gaf5726b462426b56425604343e51a79c3"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga3ea1e68d63d45c84d2c3b6b3bcac4653"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga8fce5075a28203045c3865b1d068c084"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:gab974887ed7faf7685d6c8c181827b2c2"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:ga751ff8adfdf8e6f824a7bef0d4630044"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:gac6809e08656312d793ce34e828e33998"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs voxel grid downsampling on a point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:a858e0a5338f348eb1033d6a85c3db926"><tdclass="mdescLeft"> </td><tdclass="mdescRight">DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. <br/></td></tr>
<trclass="memdesc:a8dfd7d808fa94e809b4a1a1fba6b8226"><tdclass="mdescLeft"> </td><tdclass="mdescRight">DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. <br/></td></tr>
<trclass="memdesc:af526f72e838659de76ac45447d3860ae"><tdclass="mdescLeft"> </td><tdclass="mdescRight">DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. <br/></td></tr>
<trclass="memdesc:ga8dadcd7fb9beedc839b54079c6e84701"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:gaf323d2f6db341f7dd83893297b1f9693"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:gac4f1ee370a918987a847d5d604601837"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga7738134d7dec8f178a927dfe69fcb15a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:gad6269088b589b735fd87e07d11bf2547"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:ga5e31a5d57029fddd20e5d57ecdfb1184"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs random sampling on a point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ga7bfc95ed4f7fca124b00707708223473"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:gad674cecbb2b80e50ad8680265dd50905"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZRGB</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:gadb551e7530b9fa63b588e11704827b7b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZI</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga9c4f395f1105d3c36861e922108bfbf0"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointNormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga2d23fe7a7205247ae3152525d19a18ec"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZRGBNormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga18c88abdd186757533cd7c9e825f540f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZINormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:gad8ced1799837b05e34ec4bd871a129ba"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:gafe76c7bd4f68d8fe1518509564bf1f3d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZRGB</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga551c7a9b75aaf6f087f81e52f326e182"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZI</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga4cef6e6f7cb447719417f118ff4e367d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointNormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:gaa6907857c69443b1bd879fcf6beef8a9"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZRGBNormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:gab942c5914142128bce518c869f49f94d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs pass-through filtering on a point cloud of type <code>pcl::PointXYZINormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga8291151381ff38773e641740b66b93ef"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PCLPointCloud2</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga668e8d0a8a8abd65500bd7e7b748eec2"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:gaa6737135785f73d1a2f3ec966ab22bc7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointNormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga20a5eeed65c38958ed5866216f26bd44"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZRGB</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga3b4c45a05e5bc0ff7d4c3917103e4f29"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZRGBNormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga43309cd4b35fcbe7a746ccb1dc9a1b4f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZI</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga0fe7f976bca4c8ec9dd0afa95f590c72"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZINormal</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga15f14d0a8c9de82ff3ad398fa8c36097"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga1302fc8f7569390d2d9a6a66c24f5179"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointNormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga1f23604e3b58f73183fe3102dd9f86c9"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZRGB</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga8065c61da2295bf203e4ee7471e9332d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZI</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga5d5cafb95fb856438e55a0de06378ef7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZINormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga32e6cd849848faaccc6b46ba02f98f6b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs crop box filtering on a point cloud of type <code>pcl::PointXYZRGBNormal</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:gad05921639a3371d2ee0f684b77542330"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs frustum filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns filtered indices. <br/></td></tr>
<trclass="memdesc:ga93cb6151fc470d6b932b4a7c6cb15090"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs frustum filtering on a point cloud of type <code>pcl::PointXYZ</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga4ceacaabe757da82d3278b08df766a69"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs frustum filtering on a point cloud of type <code>pcl::PointXYZRGB</code> and returns a new point cloud of the filtered points. <br/></td></tr>
<trclass="memdesc:ga307cddc4476370cc25e5f67fd13af865"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Remove NaN points from a point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga2c98d8e54fff76606352c87edc378c31"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Remove NaN points from a point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga30ecdbed3fd26b750dcb0e63ea8c68b1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Remove NaN points from a point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:gab8b441e9acbafb0f36a0f4567e9535d6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Remove NaN points from a point cloud of type <code>pcl::PCLPointCloud2</code>. <br/></td></tr>
<trclass="memdesc:ga3813dba7a0841937f37d9ecdaf526748"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Removes points with NaN normal values from a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:gafeeebb45de9c3cb8ac353f3cf867bc41"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Removes points with NaN normal values from a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:ga42b9cf0558f56e1b00bd9ab1e2f1d0e6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Removes points with NaN normal values from a point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ga21f5957a6c6b8dd2ca7e559ed8a82d08"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga4f7bd9bc6922f17815109375fc11367b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:gaa1328e1ba793b44a450fe90e4e99fa35"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga3b3ef1e4b2893810542c6c2be871fa16"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:ga4a5c1b3dd17782eed6ff342a27ab9dde"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:ga9e4ddb084f4c00934f65f30d8b466047"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:gae6562a12f695af7fc210043c85afeebc"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZ</code> with indices. <br/></td></tr>
<trclass="memdesc:gaa6e6e945a27057824168aa287670d641"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointNormal</code> with indices. <br/></td></tr>
<trclass="memdesc:gadc01992dd4ebc7fe77f40e423ba83f95"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZRGB</code> with indices. <br/></td></tr>
<trclass="memdesc:gafba9a36653f1314aa968966f5e8f8df6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code> with indices. <br/></td></tr>
<trclass="memdesc:gada185029395a374e08162d2b357406a8"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZI</code> with indices. <br/></td></tr>
<trclass="memdesc:ga8fde7163c8ede34584e464909f8410cd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Radius filtering for point cloud of type <code>pcl::PointXYZINormal</code> with indices. <br/></td></tr>
<trclass="memdesc:ga3ce176a96606fd506d3ff28a0a4cdc2a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga76e80e9da74feba84271c52b06065b7f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga5382e5aa1b2db5ee59cda070d02030f7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:gac755f189d29b0ed14e48e7f241103176"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:gaa3e3f8d0bdc8bfa7e070b7ef73541ddb"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:gacdc66ecd05ab55d9c3eba62846f1cc5d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ga0b1bda3085510fd29162d6f511f14903"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZ</code> with indices. <br/></td></tr>
<trclass="memdesc:ga532ecb60ddd5c72d6c2930648da37621"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointNormal</code> with indices. <br/></td></tr>
<trclass="memdesc:ga9def3599aeff33e3d2a733020f713310"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZRGB</code> with indices. <br/></td></tr>
<trclass="memdesc:ga5e6659182a671665d293afb05461bdbd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code> with indices. <br/></td></tr>
<trclass="memdesc:gad54efb4e02c820af7d480c157a7c5ae8"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZI</code> with indices. <br/></td></tr>
<trclass="memdesc:gac355ea4ecf36de86425b3dcd7794b4e1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Proportional radius filtering for point cloud of type <code>pcl::PointXYZINormal</code> with indices. <br/></td></tr>
<trclass="memdesc:ga69fb3ae457d192fd2c12631b0b5adf60"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZ</code>, returning filtered indices. <br/></td></tr>
<trclass="memdesc:ga74d28899131bcb449b4d243a556c53aa"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZRGB</code>, returning filtered indices. <br/></td></tr>
<trclass="memdesc:gad92c79e9320d8eae62053d01bb8ba9df"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointNormal</code>, returning filtered indices. <br/></td></tr>
<trclass="memdesc:ga49d4f22e20984d271bb4c3240018eeed"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZINormal</code>, returning filtered indices. <br/></td></tr>
<trclass="memdesc:ga1879c56f82037789aed799c484fb883a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code>, returning filtered indices. <br/></td></tr>
<trclass="memdesc:gae14131d7ab09a650fb1411a8252e5526"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZ</code>, returning a new filtered point cloud. <br/></td></tr>
<trclass="memdesc:gad2840d4057963b7cb29c02ee15fca895"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZRGB</code>, returning a new filtered point cloud. <br/></td></tr>
<trclass="memdesc:ga68cd453fcda96d2dba733650879f5d54"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointNormal</code>, returning a new filtered point cloud. <br/></td></tr>
<trclass="memdesc:gaafd6fae4cac4f182d79e4507226165ef"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZINormal</code>, returning a new filtered point cloud. <br/></td></tr>
<trclass="memdesc:gaf2bca73b4dc564bb6b2b7b779c718373"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Subtract filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code>, returning a new filtered point cloud. <br/></td></tr>
<trclass="memdesc:a2d730d57c10b9ef235388c8e6bd49132"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs adaptive radius-based subtraction filtering on a point cloud. <br/></td></tr>
<trclass="memdesc:aa82dd73da48128b88a6aaf20c625814d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs adaptive radius-based subtraction filtering on a point cloud with normals, also considering normal direction differences. <br/></td></tr>
<trclass="memdesc:ga7c7e3de2ff24fc3aadfb3eb0ae05314d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:gad37b605f0f26190c95450c878ca51ece"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:gabfeacf2f8a261abd98a9c6728f02324b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga5c15577ccd70487c3ccd53c16b00648b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:gad821858315d7e1e1868d6314d65a9f89"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:ga96711db9864b121ab9e2bcbf2cf44658"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga91fd9701dea9ebc4b7265b12b357aba1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:gae3831a32e21738a381ea789e9e3e3996"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Point normal filtering for point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga62a0d02930f5969cbff707afe01d1bcd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga180048dc26009c5d6d1233bb6ce5de04"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga8184974cc084fdd804e82bb979eb2353"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZ</code> inside provided indices. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:gaecfbf327f7ef38738d0e592ed470d318"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointNormal</code> inside provided indices. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga7c622ccc41a487527f0448db84fd8539"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZRGB</code> inside provided indices. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:gada592bb1e0525a32412d5009002b9b1e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZRGBNormal</code> inside provided indices. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga3e51576a82fef5cddffe4d3ae14d8899"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZI</code> inside provided indices. <br/></td></tr>
std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>extractClusters</b> (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)</td></tr>
<trclass="memdesc:ga8e23ae8df06afbb753eb6eb0b54a400a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract clusters from point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga8685395807479f06b19d9d41616a03a7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointXYZ</code>. <br/></td></tr>
<trclass="memdesc:ga8ce0dc4070d599c6f4a8c55651c2f944"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga0c8a4fe56efba09d2bf6c5b84da36702"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointXYZRGB</code>. <br/></td></tr>
<trclass="memdesc:ga93acd3d20cbab15b628cbc2a0f3b1919"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:gaf8e635d6864b0a7f41bad4bb185a57f4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointXYZI</code>. <br/></td></tr>
<trclass="memdesc:gae196609121fa899ba2735d406aedc73b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract indices from point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ga2a39a8e9d769e5e2cea8054b7084af1e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract points from point cloud of type <code>pcl::PointXYZ</code> with corresponding indices. <br/></td></tr>
<trclass="memdesc:gaca2188ec4a875fb9c6d2fa240888dcf1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract points from point cloud of type <code>pcl::PointXYZRGB</code> with corresponding indices. <br/></td></tr>
<trclass="memdesc:gaf6cd58fdda3450fb11496395e35908d7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract points from point cloud of type <code>pcl::PointXYZRGBNormal</code> with corresponding indices. <br/></td></tr>
<trclass="memdesc:gad759e35639cd87f04ebd09eadb5865f5"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract points from point cloud of type <code>pcl::PointXYZI</code> with corresponding indices. <br/></td></tr>
<trclass="memdesc:gaa312bb0ae54f1472d4e4f22bee7cc4d6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extract points from point cloud of type <code>pcl::PointXYZINormal</code> with corresponding indices. <br/></td></tr>
<trclass="memdesc:acc584a6135a4567d4566f72a64d0770a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Extracts the indices of the inliers that belong to a plane using RANSAC. <br/></td></tr>
<trclass="memdesc:a86ea393c958183f10da8f7327e25d894"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Creates a 2D occupancy grid map from local occupancy data. <br/></td></tr>
<trclass="memdesc:afff989b8fc8d612a69d82bdfa7a28fe8"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Generates a 2D occupancy grid map from a set of poses, laser scans, and viewpoints. <br/></td></tr>
<trclass="memdesc:a281695150f5c02e6222d050f488a9d6b"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs a 2D ray tracing operation between two points on a grid map. <br/></td></tr>
<trclass="memdesc:ae57dd8dcc488496a2c3872eba97eb4e4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts an occupancy grid map (CV_8S) to a grayscale image (CV_8U). <br/></td></tr>
<trclass="memdesc:acb47883439442306b63f5bf234e87049"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Converts a grayscale occupancy image (CV_8U) to an occupancy grid map (CV_8S). <br/></td></tr>
<trclass="memdesc:aa4d323d39ec23ea314c22f0668ab11c4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs erosion on an occupancy grid map to reduce small noisy obstacles. <br/></td></tr>
<trclass="memdesc:a58ee399b0bca3a8af41e74d0eced5f84"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Segments ground and obstacle indices from a point cloud using surface normals and clustering. <br/></td></tr>
<trclass="memdesc:a5f95aa913b08b0d0f12e9fc02b087692"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Toggle a deterministic seed for OpenGV's internal RANSAC RNG. <br/></td></tr>
<trclass="memitem:a94321442a82f05368f8fd9c9a998284e"id="r_a94321442a82f05368f8fd9c9a998284e"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1Transform.html">Transform</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a94321442a82f05368f8fd9c9a998284e">estimateMotion3DTo2D</a> (const std::map< int, cv::Point3f >&words3A, const std::map< int, cv::KeyPoint >&words2B, const <aclass="el"href="classrtabmap_1_1CameraModel.html">CameraModel</a>&cameraModel, int minInliers=10, int iterations=100, double reprojError=5., int flagsPnP=0, int pnpRefineIterations=1, int varianceMedianRatio=4, float maxVariance=0, const <aclass="el"href="classrtabmap_1_1Transform.html">Transform</a>&guess=<aclass="el"href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), const std::map< int, cv::Point3f >&words3B=std::map< int, cv::Point3f >(), cv::Mat *covariance=0, std::vector< int > *matchesOut=0, std::vector< int > *inliersOut=0, bool splitLinearCovarianceComponents=false)</td></tr>
<trclass="memdesc:a94321442a82f05368f8fd9c9a998284e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates a 6-DOF camera transform from 3D-2D point correspondences using PnP RANSAC. <br/></td></tr>
<trclass="memitem:a3fffe99bf880decfb8a9f60ff7b882bd"id="r_a3fffe99bf880decfb8a9f60ff7b882bd"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1Transform.html">Transform</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a3fffe99bf880decfb8a9f60ff7b882bd">estimateMotion3DTo2D</a> (const std::map< int, cv::Point3f >&words3A, const std::map< int, cv::KeyPoint >&words2B, const std::vector<<aclass="el"href="classrtabmap_1_1CameraModel.html">CameraModel</a>>&cameraModels, unsigned int samplingPolicy, int minInliers, int iterations, double reprojError, int flagsPnP, int refineIterations, int varianceMedianRatio, float maxVariance, const <aclass="el"href="classrtabmap_1_1Transform.html">Transform</a>&guess, const std::map< int, cv::Point3f >&words3B, cv::Mat *covariance, std::vector< std::vector< int >> *matchesOut, std::vector< std::vector< int >> *inliersOut, bool splitLinearCovarianceComponents)</td></tr>
<trclass="memdesc:a3fffe99bf880decfb8a9f60ff7b882bd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates the 3D-to-2D motion (pose) transformation between a set of 3D points and their corresponding 2D keypoints using the OpenGV library. <br/></td></tr>
<trclass="memitem:a0a1a57cb2be47c4b6670672b2a0a5a93"id="r_a0a1a57cb2be47c4b6670672b2a0a5a93"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1Transform.html">Transform</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a0a1a57cb2be47c4b6670672b2a0a5a93">estimateMotion3DTo2D</a> (const std::map< int, cv::Point3f >&words3A, const std::map< int, cv::KeyPoint >&words2B, const std::vector<<aclass="el"href="classrtabmap_1_1CameraModel.html">CameraModel</a>>&cameraModels, unsigned int samplingPolicy=0, int minInliers=10, int iterations=100, double reprojError=5., int flagsPnP=0, int pnpRefineIterations=1, int varianceMedianRatio=4, float maxVariance=0, const <aclass="el"href="classrtabmap_1_1Transform.html">Transform</a>&guess=<aclass="el"href="classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2">Transform::getIdentity</a>(), const std::map< int, cv::Point3f >&words3B=std::map< int, cv::Point3f >(), cv::Mat *covariance=0, std::vector< int > *matchesOut=0, std::vector< int > *inliersOut=0, bool splitLinearCovarianceComponents=false)</td></tr>
<trclass="memdesc:a0a1a57cb2be47c4b6670672b2a0a5a93"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates the 3D-to-2D motion (pose) transformation between a set of 3D points and their corresponding 2D keypoints using the OpenGV library. <br/></td></tr>
<trclass="memitem:a717fefeecb331b1dddc3ec3b4f6beb3a"id="r_a717fefeecb331b1dddc3ec3b4f6beb3a"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1Transform.html">Transform</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a717fefeecb331b1dddc3ec3b4f6beb3a">estimateMotion3DTo3D</a> (const std::map< int, cv::Point3f >&words3A, const std::map< int, cv::Point3f >&words3B, int minInliers=10, double inliersDistance=0.1, int iterations=100, int refineIterations=5, cv::Mat *covariance=0, std::vector< int > *matchesOut=0, std::vector< int > *inliersOut=0)</td></tr>
<trclass="memdesc:a717fefeecb331b1dddc3ec3b4f6beb3a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates the 3D rigid transformation between two sets of 3D points. <br/></td></tr>
<trclass="memitem:ad426e396a196d6f69a004bb55982f9f7"id="r_ad426e396a196d6f69a004bb55982f9f7"><tdclass="memItemLeft"align="right"valign="top">void RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#ad426e396a196d6f69a004bb55982f9f7">solvePnPRansac</a> (const std::vector< cv::Point3f >&objectPoints, const std::vector< cv::Point2f >&imagePoints, const cv::Mat &cameraMatrix, const cv::Mat &distCoeffs, cv::Mat &rvec, cv::Mat &tvec, bool useExtrinsicGuess, int iterationsCount, float reprojectionError, int minInliersCount, std::vector< int >&inliers, int flags, int refineIterations=1, float refineSigma=3.0f)</td></tr>
<trclass="memdesc:ad426e396a196d6f69a004bb55982f9f7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates the camera pose using the PnP RANSAC algorithm and optionally refines it. <br/></td></tr>
<trclass="memdesc:a56797352c7d47f815c694bc4ccb1faea"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates the rigid 3D transformation between two point clouds using SVD. <br/></td></tr>
<trclass="memitem:aab3ff771d2b43075bb8e7ca6e730c37c"id="r_aab3ff771d2b43075bb8e7ca6e730c37c"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classrtabmap_1_1Transform.html">Transform</a> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#aab3ff771d2b43075bb8e7ca6e730c37c">transformFromXYZCorrespondences</a> (const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud1, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud2, double inlierThreshold=0.02, int iterations=100, int refineModelIterations=10, double refineModelSigma=3.0, std::vector< int > *inliers=0, cv::Mat *variance=0)</td></tr>
<trclass="memdesc:aab3ff771d2b43075bb8e7ca6e730c37c"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Estimates a rigid transformation between two point clouds using RANSAC with optional refinement. <br/></td></tr>
<trclass="memdesc:gaf474f9fb6eaaf532e9b18af63b9e1665"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Compute with variance and correspondences of <code>pcl::PointNormal</code> point cloud type. <br/></td></tr>
<trclass="memdesc:gaae6ddd0517614e9332669c37c6816777"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Compute with variance and correspondences of <code>pcl::PointXYZINormal</code> point cloud type. <br/></td></tr>
<trclass="memdesc:ga92518a7b79e9265380f3a047e46ec247"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Compute with variance and correspondences of <code>pcl::PointXYZ</code> point cloud type. <br/></td></tr>
<trclass="memdesc:ga7d90c0848a13e35f37588addf3637fe2"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Compute with variance and correspondences of <code>pcl::PointXYZI</code> point cloud type. <br/></td></tr>
<trclass="memdesc:af9f16d681288b1f91ce6e5a8ee9f6967"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting transform. <br/></td></tr>
<trclass="memdesc:a1a153cf0e597dd206c6a850957f6c1ef"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting transform. <br/></td></tr>
<trclass="memdesc:a6ac0f56608f1760d60eda7861b8dc303"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric. <br/></td></tr>
<trclass="memdesc:a12d008fea5babe6a208fca7b1fb719d3"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric. <br/></td></tr>
<trclass="memitem:a9ebe11bdf534e3bdbcb2802d5dd70e62"id="r_a9ebe11bdf534e3bdbcb2802d5dd70e62"><tdclass="memItemLeft"align="right"valign="top">void RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="namespacertabmap_1_1util3d.html#a9ebe11bdf534e3bdbcb2802d5dd70e62">createPolygonIndexes</a> (const std::vector< pcl::Vertices >&polygons, int cloudSize, std::vector< std::set< int >>&neighborPolygons, std::vector< std::set< int >>&vertexPolygons)</td></tr>
<trclass="memdesc:a9ebe11bdf534e3bdbcb2802d5dd70e62"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Given a set of polygons, create two indexes: polygons to neighbor polygons and vertices to polygons. <br/></td></tr>
std::list< std::list< int >> RTABMAP_CORE_EXPORT </td><tdclass="memItemRight"valign="bottom"><b>clusterPolygons</b> (const std::vector< std::set< int >>&neighborPolygons, int minClusterSize=0)</td></tr>
<trclass="memdesc:ga3724a082502fbef6222c11843ca56b58"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the complexity of surface normals in a point cloud of type <code><aclass="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>
<trclass="memdesc:ga5a68422282e99f8d05c0821eac491895"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::Normal</code>. <br/></td></tr>
<trclass="memdesc:ga13a6d7525494d390041c9ef0337e02dd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointNormal</code>. <br/></td></tr>
<trclass="memdesc:ga6e03130bf686d43ea527dc8e6f5cce55"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointXYZINormal</code>. <br/></td></tr>
<trclass="memdesc:ga3e024c51a6a49d1c8e6b64c230148137"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Computes the complexity of surface normals in a point cloud of type <code>pcl::PointXYZRGBNormal</code>. <br/></td></tr>
<trclass="memdesc:abf12a46cc48ee93e6575ea624377fb42"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Applies a 3D transform to all points (and normals if present) in a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>. <br/></td></tr>
<trclass="memdesc:ga59e54f906ba844eb8780946e57b0e271"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZ</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:ga2a621fc8ab625cd4003b4f26e0ce3b52"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZI</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:ga797f466a165622e08dda14cdaccb5df6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZRGB</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:ga00514f671b8dbcc343ff481aa7c36367"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointNormal</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:gac7c95eba604afe62ab897df62d862220"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZRGBNormal</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:ga47713c64205eb83460cfeec9a7bb6659"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZINormal</code> point cloud type with specified indices. <br/></td></tr>
<trclass="memdesc:ga88b4f827a105254bf08bdae73cebdbe9"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>cv::Point3f</code> point type. <br/></td></tr>
<trclass="memdesc:ga4910f2b937d405bd529772c33d477ca4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>cv::Point3d</code> point type. <br/></td></tr>
<trclass="memdesc:ga2ad96e68847f315e6d5df18d3219f308"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZ</code> point type. <br/></td></tr>
<trclass="memdesc:ga7bfb9d7e10b81cd3b5e3f164081388be"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZI</code> point type. <br/></td></tr>
<trclass="memdesc:ga90e6ffecb159bdff5afc75e16ab1fe19"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZRGB</code> point type. <br/></td></tr>
<trclass="memdesc:gad98c1e7ba04edb9a57c5557d88360afd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointNormal</code> point type. <br/></td></tr>
<trclass="memdesc:ga8cf51597b74c589365d2e0e2272bea70"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZRGBNormal</code> point type. <br/></td></tr>
<trclass="memdesc:gae272348c0353fe96683680b981a6b0fa"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Transforms <code>pcl::PointXYZINormal</code> point type. <br/></td></tr>
<divclass="textblock"><p>3D utilities: point cloud conversion and filtering, projection, registration, surface reconstruction, mapping and transforms. </p>
<p>Declared across <code>util3d.h</code>, <code><aclass="el"href="util3d__filtering_8h_source.html">util3d_filtering.h</a></code>, <code><aclass="el"href="util3d__mapping_8h_source.html">util3d_mapping.h</a></code>, <code><aclass="el"href="util3d__registration_8h_source.html">util3d_registration.h</a></code>, <code><aclass="el"href="util3d__surface_8h_source.html">util3d_surface.h</a></code> and <code><aclass="el"href="util3d__transforms_8h_source.html">util3d_transforms.h</a></code>. </p>
<p>Projects a point cloud onto the XY plane by setting all Z coordinates to zero. </p>
<p>This function creates a copy of the input point cloud and modifies each point's Z coordinate to be zero, effectively projecting the entire cloud onto the XY plane.</p>
<tr><tdclass="paramname">PointT</td><td>The type of point used in the point cloud (e.g., pcl::PointXYZ). </td></tr>
</table>
</dd>
</dl>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud to project. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>typename pcl::PointCloud<PointT>::Ptr A pointer to the projected point cloud with Z coordinates set to zero. </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00041">41</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00054">54</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<p>Segments ground and obstacle indices from a point cloud using surface normals and clustering. </p>
<dlclass="section see"><dt>See also</dt><dd><code>segmentObstaclesFromGround()</code> with indices </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00202">202</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<p>Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupancy data. </p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#ab156e4308c21e118ea0aa164a5ae9812"title="Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupanc...">occupancy2DFromGroundObstacles()</a> without indices </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00234">234</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<tr><tdclass="paramname">cellSize</td><td>The size of each voxel/grid cell used for downsampling the projected cloud (in meters). </td></tr>
</table>
</dd>
</dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00264">264</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<p>Generates 2D ground and obstacle occupancy data from a 3D point cloud. </p>
<p>This function performs segmentation on a 3D point cloud to separate ground and obstacle points based on normal orientation and clustering, then projects both onto the XY plane to create 2D occupancy representations using voxelization.</p>
<p>The resulting occupancy data is returned as two OpenCV matrices (<code>cv::Mat</code>) of type <code>CV_32FC2</code>, where each entry contains a 2D point (x, y) in meters corresponding to a ground or obstacle voxel.</p>
<tr><tdclass="paramname">cellSize</td><td>The voxel size (in meters) for projecting and grouping points in 2D. </td></tr>
<tr><tdclass="paramname">groundNormalAngle</td><td>Maximum allowable angle (in radians) between a point's normal and the vertical axis for it to be considered part of the ground. </td></tr>
<tr><tdclass="paramname">minClusterSize</td><td>Minimum number of points required to form a valid obstacle cluster. </td></tr>
<tr><tdclass="paramname">segmentFlatObstacles</td><td>Whether to separate flat horizontal surfaces (e.g., tables) from the ground and treat them as obstacles. </td></tr>
<tr><tdclass="paramname">maxGroundHeight</td><td>Maximum Z value (in meters) for a surface to be considered ground. If 0, height filtering is disabled.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>Internally, this function calls:<ul>
<li><code>segmentObstaclesFromGround()</code> to classify ground vs. obstacle points.</li>
<li><code><aclass="el"href="namespacertabmap_1_1util3d.html#ab156e4308c21e118ea0aa164a5ae9812"title="Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupanc...">occupancy2DFromGroundObstacles()</a></code> to project and voxelize the classified data. </li>
</ul>
</dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00309">309</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<p>Generates 2D ground and obstacle occupancy data from a 3D point cloud. </p>
<dlclass="section see"><dt>See also</dt><dd><code><aclass="el"href="namespacertabmap_1_1util3d.html#a7d90f3a00301f9f7c79cd6fc6cd663c2"title="Generates 2D ground and obstacle occupancy data from a 3D point cloud.">occupancy2DFromCloud3D()</a></code> with indices </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__mapping_8hpp_source.html#l00348">348</a> of file <aclass="el"href="util3d__mapping_8hpp_source.html">util3d_mapping.hpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="util3d__surface_8hpp_source.html#l00020">20</a> of file <aclass="el"href="util3d__surface_8hpp_source.html">util3d_surface.hpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="util3d__surface_8hpp_source.html#l00050">50</a> of file <aclass="el"href="util3d__surface_8hpp_source.html">util3d_surface.hpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="util3d__surface_8hpp_source.html#l00315">315</a> of file <aclass="el"href="util3d__surface_8hpp_source.html">util3d_surface.hpp</a>.</p>
<p>Converts a PCL point cloud with RGBA information to an OpenCV RGB or BGR image. </p>
<p>This function takes a structured point cloud (organized as height × width) and creates a corresponding OpenCV <code>cv::Mat</code> image containing the RGB (or BGR) color values from the cloud.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input organized point cloud of type <code>pcl::PointCloud<pcl::PointXYZRGBA></code>. The cloud must be organized (i.e., <code>cloud.width</code> and <code>cloud.height</code> must be greater than 0). </td></tr>
<tr><tdclass="paramname">bgrOrder</td><td>If true, the output image will be in BGR format (OpenCV default); if false, it will be RGB.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code>cv::Mat</code> of type <code>CV_8UC3</code> with the same width and height as the input point cloud, containing RGB or BGR color values depending on the <code>bgrOrder</code> flag.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function assumes that the point cloud is organized. If the cloud is unorganized, the behavior is undefined. </dd></dl>
<p>Generates a depth image from a PCL organized point cloud. </p>
<p>This function converts a given organized point cloud of type <code>pcl::PointXYZRGBA</code> into a depth image (<code>cv::Mat</code>) in either 32-bit float or 16-bit unsigned format. The depth image contains the Z coordinate (depth) values of each point.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cloud</td><td>The input organized point cloud (height x width), where each point contains XYZ and RGBA. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">depth16U</td><td>If true, output depth will be in 16-bit unsigned integer (millimeters); otherwise, 32-bit float (meters).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A depth image (<code>cv::Mat</code>) of the same resolution as the input cloud, with type <code>CV_16UC1</code> or <code>CV_32FC1</code>.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The function assumes that the point cloud is organized (structured as an image). </dd></dl>
<p>Converts a PCL point cloud (with RGBA colors) into aligned RGB and depth OpenCV images. </p>
<p>This function extracts RGB and depth information from a structured PCL point cloud (organized point cloud with width and height) and fills the corresponding OpenCV matrices.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cloud</td><td>The input organized point cloud containing RGBA data (structured as height x width). </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">frameBGR</td><td>The output color image (CV_8UC3). The channels are ordered as BGR if bgrOrder is true, otherwise RGB. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">frameDepth</td><td>The output depth image (either CV_32FC1 for meters or CV_16UC1 for millimeters depending on depth16U). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">bgrOrder</td><td>If true, store colors in BGR order. If false, store as RGB. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">depth16U</td><td>If true, store depth as 16-bit unsigned integers (in millimeters), otherwise use 32-bit floats (in meters).</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>The function assumes that the point cloud is organized. If the point cloud is not organized, the output matrices will not be valid. </dd></dl>
<p>Projects a single depth pixel into 3D space. </p>
<p>This function computes the 3D coordinates of a point given a depth image and camera intrinsic parameters. It optionally applies smoothing and depth error compensation to improve the accuracy of the result.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">depthImage</td><td>The depth image (CV_16UC1 in millimeters or CV_32FC1 in meters). </td></tr>
<tr><tdclass="paramname">x</td><td>The x coordinate (column index) of the pixel to project. </td></tr>
<tr><tdclass="paramname">y</td><td>The y coordinate (row index) of the pixel to project. </td></tr>
<tr><tdclass="paramname">cx</td><td>The principal point x-coordinate. If set to 0, it will default to image center. </td></tr>
<tr><tdclass="paramname">cy</td><td>The principal point y-coordinate. If set to 0, it will default to image center. </td></tr>
<tr><tdclass="paramname">fx</td><td>The focal length in x direction (in pixels). </td></tr>
<tr><tdclass="paramname">fy</td><td>The focal length in y direction (in pixels). </td></tr>
<tr><tdclass="paramname">smoothing</td><td>Whether to apply smoothing on the depth value at (x, y). </td></tr>
<tr><tdclass="paramname">depthErrorRatio</td><td>Ratio used to reject outlier depths when smoothing is enabled.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A pcl::PointXYZ containing the 3D coordinates of the pixel in the depth image. If the depth value is invalid or <= 0, all coordinates are set to NaN. </dd></dl>
<p>Projects pixel coordinates to a normalized 3D ray in camera coordinates. </p>
<p>This function computes the direction of a 3D ray from the camera origin through a pixel in the image plane, assuming a pinhole camera model. The returned ray is not scaled by depth; it has a fixed z component of 1.0.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">imageSize</td><td>The size of the image (width, height). </td></tr>
<tr><tdclass="paramname">x</td><td>The x-coordinate of the pixel in the image. </td></tr>
<tr><tdclass="paramname">y</td><td>The y-coordinate of the pixel in the image. </td></tr>
<tr><tdclass="paramname">cx</td><td>The x-coordinate of the principal point. If zero or negative, defaults to (image width / 2) - 0.5. </td></tr>
<tr><tdclass="paramname">cy</td><td>The y-coordinate of the principal point. If zero or negative, defaults to (image height / 2) - 0.5. </td></tr>
<tr><tdclass="paramname">fx</td><td>The focal length in the x direction (pixels). </td></tr>
<tr><tdclass="paramname">fy</td><td>The focal length in the y direction (pixels). </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A normalized Eigen::Vector3f representing the direction of the ray in camera coordinates. </dd></dl>
<p>Converts a depth image to a 3D point cloud. </p>
<p>This function uses the camera model's intrinsic parameters to convert each pixel in the depth image to a 3D point in the camera's coordinate system. It handles the decimation of the image and ensures the resulting point cloud does not exceed the specified maximum and minimum depth values.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageDepth</td><td>The input depth image, which should be of type <code>CV_16UC1</code> or <code>CV_32FC1</code>. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cx</td><td>The optical center of the camera in the x-axis (usually the center of the image). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cy</td><td>The optical center of the camera in the y-axis (usually the center of the image). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">fx</td><td>The focal length of the camera in the x-axis. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">fy</td><td>The focal length of the camera in the y-axis. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">decimation</td><td>Decimation factor, used to reduce the image resolution (use 0 for no decimation). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum depth value to consider when creating the point cloud. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">minDepth</td><td>The minimum depth value to consider when creating the point cloud. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">validIndices</td><td>A pointer to a vector where the indices of valid points will be stored. If null, this is ignored.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code>pcl::PointCloud<pcl::PointXYZ>::Ptr</code> containing the 3D points corresponding to the depth image.</dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000017">Deprecated:</a></b></dt><dd>This function is deprecated and will be removed in future versions. Use the <code>cloudFromDepth</code> function that accepts a <code><aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">rtabmap::CameraModel</a></code> instead. </dd></dl>
<p>Converts a depth image to a 3D point cloud using a camera model. </p>
<p>This function performs the conversion of a depth image to a point cloud using the provided <code><aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a></code> object. It handles decimation, validates the depth values, and calculates the corresponding 3D coordinates in the camera's optical coordinate system.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageDepthIn</td><td>The input depth image, which should be of type <code>CV_16UC1</code> or <code>CV_32FC1</code>. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">model</td><td>The camera model containing the intrinsic parameters (fx, fy, cx, cy). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">decimation</td><td>The decimation factor for image resolution reduction (use 0 for no decimation). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum depth value to consider when creating the point cloud. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">minDepth</td><td>The minimum depth value to consider when creating the point cloud. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">validIndices</td><td>A pointer to a vector to store indices of valid points in the point cloud. If null, it is ignored.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code>pcl::PointCloud<pcl::PointXYZ>::Ptr</code> containing the 3D points corresponding to the depth image. </dd></dl>
<p>Creates a point cloud from an RGB image and a depth image. </p>
<p>This function uses the RGB and depth images, along with camera intrinsic parameters, to generate a point cloud where each point contains RGB color and 3D spatial information. It also handles decimation and depth constraints (min/max depth) for efficient processing and memory management.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">imageRgb</td><td>The RGB image (e.g., in BGR format for OpenCV). </td></tr>
<tr><tdclass="paramname">imageDepth</td><td>The depth image (CV_16UC1 or CV_32FC1 format). </td></tr>
<tr><tdclass="paramname">cx</td><td>The x-coordinate of the camera's principal point (optical center). </td></tr>
<tr><tdclass="paramname">cy</td><td>The y-coordinate of the camera's principal point. </td></tr>
<tr><tdclass="paramname">fx</td><td>The focal length in x-direction (in pixels). </td></tr>
<tr><tdclass="paramname">fy</td><td>The focal length in y-direction (in pixels). </td></tr>
<tr><tdclass="paramname">decimation</td><td>The decimation factor for the image (negative value for decimation from RGB size). </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth value to consider for valid points (set 0 to ignore). </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth value to consider for valid points. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>A pointer to a vector that will store valid point indices (optional).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A shared pointer to a point cloud (pcl::PointCloud<pcl::PointXYZRGB>) containing RGB and 3D point data.</dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000018">Deprecated:</a></b></dt><dd>This function is deprecated and will be removed in future versions. Use the version that accepts a <code><aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">rtabmap::CameraModel</a></code> instead. </dd></dl>
<p>Creates a point cloud from an RGB image and a depth image using a <aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a>. </p>
<p>This function generates a point cloud where each point contains RGB color and 3D spatial information derived from the provided RGB and depth images, using intrinsic parameters provided in the <aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a>. It also applies decimation for efficiency, and depth constraints (min/max depth) to limit the points to a valid range.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">imageRgb</td><td>The RGB image (e.g., in BGR format for OpenCV). </td></tr>
<tr><tdclass="paramname">imageDepthIn</td><td>The depth image (CV_16UC1 or CV_32FC1 format). </td></tr>
<tr><tdclass="paramname">model</td><td>A <aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a> object that contains intrinsic camera parameters (fx, fy, cx, cy). </td></tr>
<tr><tdclass="paramname">decimation</td><td>The decimation factor for the image (negative value for decimation from RGB size). </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth value to consider for valid points (set 0 to ignore). </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth value to consider for valid points. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>A pointer to a vector that will store valid point indices (optional).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A shared pointer to a point cloud (pcl::PointCloud<pcl::PointXYZRGB>) containing RGB and 3D point data.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This version uses a <aclass="el"href="classrtabmap_1_1CameraModel.html"title="Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...">CameraModel</a> to encapsulate the camera parameters. </dd></dl>
<p>Converts a disparity image to a 3D point cloud. </p>
<p>This function takes a disparity image and projects each disparity value to a 3D point in space using the provided stereo camera model. The points are stored in a <code>pcl::PointCloud</code> object. The function also supports decimating the image for faster processing.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">imageDisparity</td><td>The input disparity image, which must be of type <code>CV_32FC1</code> (floating-point) or <code>CV_16SC1</code> (16-bit signed short). </td></tr>
<tr><tdclass="paramname">model</td><td>The stereo camera model used to project disparity to 3D. </td></tr>
<tr><tdclass="paramname">decimation</td><td>The decimation factor for downsampling the image. It must be greater than or equal to 1. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth for valid points in meters. Points with a depth greater than this value will be discarded. A non-positive value means no maximum depth constraint. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth for valid points in meters. Points with a depth less than this value will be discarded. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>An optional vector that will be filled with the indices of valid points in the cloud (those within the depth constraints). If nullptr, the indices are not stored.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A shared pointer to a <code>pcl::PointCloud<pcl::PointXYZ></code> containing the 3D points derived from the disparity image.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the disparity image dimensions are not divisible by the decimation factor, the decimation factor will be adjusted to the highest compatible value. </dd></dl>
<p>Converts a disparity image and an RGB image to a 3D point cloud with color. </p>
<p>This function takes both a disparity image and an RGB image to create a colored 3D point cloud. Each RGB pixel is associated with a 3D point generated from the disparity value. The function also supports decimating the images for faster processing.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">imageRgb</td><td>The input RGB image, which must have 3 channels (color->BGR) or 1 channel (grayscale). The image is used to assign colors to the 3D points. </td></tr>
<tr><tdclass="paramname">imageDisparity</td><td>The input disparity image, which must be of type <code>CV_32FC1</code> (floating-point) or <code>CV_16SC1</code> (16-bit signed short). </td></tr>
<tr><tdclass="paramname">model</td><td>The stereo camera model used to project disparity to 3D. </td></tr>
<tr><tdclass="paramname">decimation</td><td>The decimation factor for downsampling the images. It must be greater than or equal to 1. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth for valid points in meters. Points with a depth greater than this value will be discarded. A non-positive value means no maximum depth constraint. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth for valid points in meters. Points with a depth less than this value will be discarded. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>An optional vector that will be filled with the indices of valid points in the cloud (those within the depth constraints). If nullptr, the indices are not stored.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A shared pointer to a <code>pcl::PointCloud<pcl::PointXYZRGB></code> containing the 3D points with associated RGB color values.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the disparity image dimensions are not divisible by the decimation factor, the decimation factor will be adjusted to the highest compatible value.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>The RGB image must have the same size as the disparity image. </dd></dl>
<p>Converts a pair of stereo images (left and right) into a 3D point cloud with RGB color information. </p>
<p>This function takes a pair of stereo images, computes the disparity map between the left and right images, and then converts the disparity map into a 3D point cloud where each point contains the 3D coordinates (x, y, z) and RGB color values from the corresponding pixel in the left image.</p>
<p>The function supports both color and monochrome images and performs stereo rectification and disparity calculation internally. The resulting 3D point cloud is returned in the PCL format with RGB color for each point, using the <code>pcl::PointXYZRGB</code> type. Points outside the specified depth range are discarded.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageLeft</td><td>The left stereo image (either grayscale or color). If color, the image is converted to grayscale internally for disparity calculation. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageRight</td><td>The right stereo image (either grayscale or color). If color, the image is converted to grayscale internally for disparity calculation. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">model</td><td>The stereo camera model that contains the parameters for projecting disparity values into 3D. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">decimation</td><td>The decimation factor used to downsample the image and reduce computation time. It must be greater than or equal to 1. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum allowable depth (z value). Points with a depth greater than this value will be discarded. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">minDepth</td><td>The minimum allowable depth (z value). Points with a depth smaller than this value will be discarded. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">validIndices</td><td>A pointer to a vector that will be filled with the indices of the valid points in the resulting point cloud. Can be set to <code>nullptr</code> if this information is not needed. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">parameters</td><td>A map of additional parameters for disparity computation, used by the stereo disparity function.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A pointer to a <code>pcl::PointCloud<pcl::PointXYZRGB></code> containing the 3D points with RGB colors. The cloud is dense only in regions with valid disparity values and within the specified depth range.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The function assumes that the input images are rectified and aligned to the same coordinate system. The disparity map is computed from the left and right mono images using the <code>disparityFromStereoImages</code> utility function, which is provided by the <code><aclass="el"href="namespacertabmap_1_1util2d.html"title="This namespace contains 2D image processing utilities.">util2d</a></code> namespace.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>The input images must have the same size, and the disparity computation assumes that the stereo pair is well-calibrated. </dd></dl>
<p>Generates a set of point clouds from sensor data. </p>
<p>This function processes depth and image data from the provided <code><aclass="el"href="classrtabmap_1_1SensorData.html"title="Container class for all sensor data captured at a specific time.">SensorData</a></code> object to generate point clouds. It supports both depth camera data (using a camera model) and stereo camera data (using disparity computation). It handles various preprocessing operations like decimation, applying regions of interest (ROIs), and transforming point clouds.</p>
<p>The function creates a point cloud for each camera model (or stereo camera model) in the <code><aclass="el"href="classrtabmap_1_1SensorData.html"title="Container class for all sensor data captured at a specific time.">SensorData</a></code> and returns them in a vector of point cloud pointers.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">sensorData</td><td>A reference to the <code><aclass="el"href="classrtabmap_1_1SensorData.html"title="Container class for all sensor data captured at a specific time.">SensorData</a></code> object that contains raw depth or image data, along with camera models. </td></tr>
<tr><tdclass="paramname">decimation</td><td>The decimation factor to downsample the data. A value of 0 means no decimation. The decimation factor should be a factor of the image width and height. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth value to be considered in the generated point clouds. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth value to be considered in the generated point clouds. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>An optional vector to store valid point indices for each point cloud. If provided, the function will populate it with indices of valid points in each corresponding cloud. </td></tr>
<tr><tdclass="paramname">stereoParameters</td><td>A map of parameters for stereo image processing, used to compute disparity. </td></tr>
<tr><tdclass="paramname">roiRatios</td><td>A vector containing four float values representing the region of interest (ROI) in normalized coordinates (left, right, top, bottom). If not specified or set to [0 0 0 0], the entire image is used.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of <code>pcl::PointCloud<pcl::PointXYZ>::Ptr</code> representing the generated point clouds in base coordinate frame.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>The <code>sensorData</code> object must contain either depth data (for depth cameras) or image data with a right image (for stereo cameras).</li>
<li>The ROI ratios must be in the range [0.0f, 1.0f] and will be applied to both depth and image data if provided.</li>
<li>If the ROI cannot be divided evenly by the decimation factor, the function will ignore the ROI and log an error.</li>
<li>If the stereo data is provided, disparity will be computed from the left and right images, and the resulting disparity image will be used to generate 3D point clouds. </li>
<p>This function processes the provided sensor data, generates point clouds for each sensor, and combines them into a single point cloud. It handles both single-camera and stereo data by calling the <code>cloudsFromSensorData</code> function. The resulting point cloud can be decimated according to the specified parameter and filtered based on depth constraints.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">sensorData</td><td>The sensor data containing depth and image information. This data is used to generate the point clouds. </td></tr>
<tr><tdclass="paramname">decimation</td><td>The factor by which the generated point cloud should be decimated. A value of 1 means no decimation. The decimation factor should be a factor of the image width and height. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth allowed for valid points in the generated cloud. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth allowed for valid points in the generated cloud. </td></tr>
<tr><tdclass="paramname">validIndices</td><td>Optional vector to store the indices of valid points in the generated point cloud. </td></tr>
<tr><tdclass="paramname">stereoParameters</td><td>The stereo parameters that may be used when dealing with stereo camera data. </td></tr>
<tr><tdclass="paramname">roiRatios</td><td>A vector containing four float values representing the region of interest (ROI) ratios (left, right, top, bottom) to crop the sensor images before processing. The values should be between 0 and 1. If not specified or set to [0 0 0 0], the entire image is used.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A pointer to a <code>pcl::PointCloud<pcl::PointXYZ></code> containing the combined point cloud generated from the sensor data. The point cloud is transformed in base coordinate frame.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The function will automatically handle the removal of NaN points from the cloud. If the <code>validIndices</code> pointer is provided, it will be filled with the indices of valid points. </dd></dl>
<p>Generates a point cloud with RGB color data from sensor data. </p>
<p>This function creates RGB point clouds from depth and color images obtained from a sensor. It supports both single camera models and stereo camera models. The RGB and depth images are processed and converted into a 3D point cloud using the provided camera models. Optionally, Region-of-Interest (ROI) ratios can be applied to the images to focus on specific areas.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">sensorData</td><td>The sensor data that contains the raw image and depth information. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">decimation</td><td>The decimation factor to reduce the resolution of the point cloud. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum depth to consider while generating the point cloud. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">minDepth</td><td>The minimum depth to consider while generating the point cloud. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">validIndices</td><td>A pointer to a vector of indices that indicate the valid points in the cloud. If nullptr, no indices will be returned. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">stereoParameters</td><td>A map of parameters used for stereo vision processing (if stereo camera models are used). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">roiRatios</td><td>A vector of 4 floats that represent the region of interest (ROI) ratios (left, right, top, bottom) for cropping the image. Each value should be between 0.0 and 1.0, representing the normalized position of the ROI. A value of 0.0 means no cropping, and a value of 1.0 means full cropping.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of point clouds containing the RGB point cloud data for each camera model. Each point cloud is represented by pcl::PointCloud<pcl::PointXYZRGB>::Ptr. The point clouds are transformed in base coordinate frame.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the sensor data does not contain both image and depth data, or if no camera models are available, an empty vector will be returned.</dd>
<dd>
If stereo camera models are used, the left and right images are processed for disparity computation.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>The function performs several assertions and checks, such as ensuring that the image and depth images are divisible by the number of camera models, and that the ROI ratios are compatible with the decimation factor. </dd></dl>
<p>Generates a point cloud of type pcl::PointXYZRGB from sensor data. </p>
<p>This function processes sensor data (such as RGB images and depth images) to generate a point cloud of type pcl::PointXYZRGB. It can handle stereo or multiple camera models, apply decimation, and filter points based on the maximum and minimum depth values. Optionally, it can also apply region-of-interest (ROI) ratios.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">sensorData</td><td>The sensor data containing raw RGB and depth images, as well as camera models. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">decimation</td><td>The decimation factor to reduce the point cloud size. Default is 1. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum depth value (points beyond this distance will be ignored). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">minDepth</td><td>The minimum depth value (points closer than this distance will be ignored). </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">validIndices</td><td>A vector to store the indices of the valid points in the generated point cloud. It will be resized to the point cloud's size. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">stereoParameters</td><td>A map of stereo camera parameters, used when dealing with stereo images. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">roiRatios</td><td>A vector of four float values representing the region-of-interest (ROI) ratios for cropping the depth and RGB images (left right top bottom). If not specified or set to [0 0 0 0], the entire image is used.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A pointer to a pcl::PointCloud<pcl::PointXYZRGB> containing the generated point cloud. If multiple clouds are generated, they are merged into a single cloud. The validIndices vector is populated if it is provided. The point cloud(s) is/are transformed in base coordinate frame.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the sensor data is stereo, the function will use stereo processing to generate the point cloud. If multiple camera models are provided, it generates and merges the point clouds from each camera. </dd>
<dd>
The validIndices vector will be resized and populated if it is passed as an argument. </dd></dl>
<p>Converts the middle row of a depth image into a laser scan (point cloud) using camera intrinsics and a local transformation. </p>
<p>This function projects each pixel from a depth image into 3D space using the camera intrinsics (focal lengths and principal point) and applies a transformation to each point in 3D space. It filters out points that are outside the specified depth range (maxDepth, minDepth) and excludes any invalid points.</p>
<tr><tdclass="paramname">fx</td><td>The focal length in the x-axis (in pixels). </td></tr>
<tr><tdclass="paramname">fy</td><td>The focal length in the y-axis (in pixels). </td></tr>
<tr><tdclass="paramname">cx</td><td>The optical center in the x-axis (in pixels). </td></tr>
<tr><tdclass="paramname">cy</td><td>The optical center in the y-axis (in pixels). </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth value (in meters). Points with depth larger than this will be discarded. If 0, no maximum depth filtering is applied. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth value (in meters). Points with depth smaller than this will be discarded. </td></tr>
<tr><tdclass="paramname">localTransform</td><td>A transformation that will be applied to all points in the resulting point cloud. This can be an identity transformation if not needed.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>pcl::PointCloud<pcl::PointXYZ> The resulting point cloud where each point represents a 3D coordinate projected from the depth image.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>Assumes the input depth image is either CV_16UC1 (16-bit unsigned integers) or CV_32FC1 (32-bit floating-point). </dd>
<dd>
Assumes the camera is pointing parallel to ground (e.g., forward looking camera). </dd></dl>
<p>Converts multiple depth images (e.g., from a stereo or multi-camera setup) into a single laser scan (point cloud). </p>
<p>This function processes multiple depth images, one for each camera in a stereo or multi-camera setup. It uses the camera models to project the depth values of the middle row to 3D space and combines them into a single point cloud. Each camera's depth image is projected using the associated camera intrinsics, and the points are transformed according to the camera's local transformation.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">depthImages</td><td>The input depth images concatenated horizontally. Each camera's depth image is assumed to be of equal width and placed side by side. </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>A vector of camera models, one for each depth image in the input. Each model contains the intrinsics and the local transformation for a specific camera. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>The maximum depth value (in meters). Points with depth larger than this will be discarded. If 0, no maximum depth filtering is applied. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>The minimum depth value (in meters). Points with depth smaller than this will be discarded.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>pcl::PointCloud<pcl::PointXYZ> The resulting point cloud where each point represents a 3D coordinate projected from the depth images.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function assumes that the number of camera models corresponds to the number of sub-images in the input depth images. </dd>
<dd>
Each depth image is projected using the corresponding camera model in the <code>cameraModels</code> array. </dd>
<dd>
Assumes the cameras are pointing parallel to ground (e.g., forward and backward looking cameras). </dd></dl>
<p>Computes the minimum and maximum 3D points from a laser scan matrix. </p>
<p>This function computes the minimum and maximum values along each of the X, Y, and Z axes in the laser scan matrix. The laser scan is assumed to be a matrix of type <code>CV_32FC2</code>, <code>CV_32FC3</code>, <code>CV_32FC4</code>, <code>CV_32FC5</code>, <code>CV_32FC6</code>, or <code>CV_32FC7</code>, where each row represents a point in space. The matrix is expected to have 3 or more channels for 3D data, but it can have additional channels (e.g., intensity, color, etc.).</p>
<p>The Z-coordinate is only considered if the matrix has at least 3 channels (3D scan). If the scan has fewer than 3 channels, the Z-coordinate is set to 0.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">laserScan</td><td>The input laser scan data, which must be a matrix of type <code>CV_32FC2</code>, <code>CV_32FC3</code>, <code>CV_32FC4</code>, <code>CV_32FC5</code>, <code>CV_32FC6</code>, or <code>CV_32FC7</code> (with at least 2 channels, and at least 3 channels for 3D). </td></tr>
<tr><tdclass="paramname">min</td><td>A reference to a <code>cv::Point3f</code> object where the minimum 3D point (X, Y, Z) will be stored. </td></tr>
<tr><tdclass="paramname">max</td><td>A reference to a <code>cv::Point3f</code> object where the maximum 3D point (X, Y, Z) will be stored.</td></tr>
</table>
</dd>
</dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if the input matrix is empty or has an invalid type. </td></tr>
<p>Computes the minimum and maximum 3D points from a laser scan matrix and stores the results in pcl::PointXYZ. </p>
<p>This function calls the <code>getMinMax3D</code> function that operates on <code>cv::Point3f</code> and converts the results to <code>pcl::PointXYZ</code> format. It is useful when working with PCL data structures for 3D processing.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">laserScan</td><td>The input laser scan data, which must be a matrix of type <code>CV_32FC2</code>, <code>CV_32FC3</code>, <code>CV_32FC4</code>, <code>CV_32FC5</code>, <code>CV_32FC6</code>, or <code>CV_32FC7</code> (with at least 2 channels, and at least 3 channels for 3D). </td></tr>
<tr><tdclass="paramname">min</td><td>A reference to a <code>pcl::PointXYZ</code> object where the minimum 3D point (X, Y, Z) will be stored. </td></tr>
<tr><tdclass="paramname">max</td><td>A reference to a <code>pcl::PointXYZ</code> object where the maximum 3D point (X, Y, Z) will be stored.</td></tr>
</table>
</dd>
</dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if the input matrix is empty or has an invalid type. </td></tr>
<p>Projects a 2D point from the left image and its disparity into 3D space. </p>
<p>This function converts a 2D point from the left image and its corresponding disparity value into a 3D point in space using the provided stereo camera model.</p>
<p>The conversion follows the formula: </p><pclass="formulaDsp">
<li><code>baseline</code> is the distance between the left and right camera centers</li>
<li><code>f</code> is the focal length of the camera</li>
<li><code>cx1</code> and <code>cx0</code> are the x-coordinates of the principal points of the right and left cameras, respectively.</li>
</ul>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">pt</td><td>The 2D point in the left image (in pixels). </td></tr>
<tr><tdclass="paramname">disparity</td><td>The disparity value for the corresponding point (in pixels). </td></tr>
<tr><tdclass="paramname">model</td><td>The stereo camera model containing the intrinsic parameters.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A 3D point (x, y, z) in space corresponding to the input 2D point and disparity. If the disparity is invalid or any required camera parameters are not set, it returns a point containing NaN values.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function assumes that the disparity value is positive, and that the baseline and focal lengths are also positive. </dd></dl>
<p>Projects a 2D point from the left image and the disparity map into 3D space. </p>
<p>This function converts a 2D point from the left image and the disparity value from a disparity map into a 3D point in space using the provided stereo camera model.</p>
<p>The function first retrieves the disparity value for the given 2D point from the disparity map. It then calls the other <code>projectDisparityTo3D</code> function to perform the conversion to 3D.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">pt</td><td>The 2D point in the left image (in pixels). </td></tr>
<tr><tdclass="paramname">disparity</td><td>The disparity map (CV_32FC1 or CV_16SC1) from which the disparity value for the point is retrieved. </td></tr>
<tr><tdclass="paramname">model</td><td>The stereo camera model containing the intrinsic parameters.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A 3D point (x, y, z) in space corresponding to the input 2D point and the disparity value. If the point is outside the disparity map bounds or if the disparity value is invalid, it returns a point containing NaN values.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function checks that the input disparity matrix is not empty and has an appropriate type (either CV_32FC1 or CV_16SC1). </dd></dl>
<p>Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. </p>
<p>This function projects a laser scan (in /base_link coordinate system) into the camera frame of reference using the camera's intrinsic parameters and the camera's transform. The result is stored in a depth image (cv::Mat), where each pixel corresponds to the distance of the projected point in the camera frame.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageSize</td><td>The desired size of the output depth image (in pixels). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraMatrixK</td><td>The camera matrix (intrinsics), containing the focal lengths and principal points. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">laserScan</td><td>A matrix of laser scan points. The type can be CV_32FC2 (2D), CV_32FC3, CV_32FC4, etc., where the points are assumed to be in the /base_link coordinate system. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraTransform</td><td>The transform from /base_link to /camera_link, used to adjust the point cloud to the camera's reference frame.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A cv::Mat object representing the registered depth image, with each pixel corresponding to the projected point's depth (z value) in the camera frame.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if the input cameraTransform is null, the laser scan is empty, or the cameraMatrixK has incorrect dimensions. </td></tr>
<p>Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. </p>
<p>This function projects a laser scan (pcl::PointCloud) into the camera frame of reference using the camera's intrinsic parameters and the camera's transform. The result is stored in a depth image (cv::Mat), where each pixel corresponds to the distance of the projected point in the camera frame.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageSize</td><td>The desired size of the output depth image (in pixels). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraMatrixK</td><td>The camera matrix (intrinsics), containing the focal lengths and principal points. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">laserScan</td><td>A pointer to a pcl::PointCloud<pcl::PointXYZ> object containing the laser scan points. The points are assumed to be in the /base_link coordinate system. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraTransform</td><td>The transform from /base_link to /camera_link, used to adjust the point cloud to the camera's reference frame.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A cv::Mat object representing the registered depth image, with each pixel corresponding to the projected point's depth (z value) in the camera frame.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if the input cameraTransform is null, the laser scan is empty, or the cameraMatrixK has incorrect dimensions. </td></tr>
<p>Register a point cloud (laser scan) to the camera's frame of reference and return a registered depth image. </p>
<p>This function projects a laser scan (pcl::PCLPointCloud2) into the camera frame of reference using the camera's intrinsic parameters and the camera's transform. The result is stored in a depth image (cv::Mat), where each pixel corresponds to the distance of the projected point in the camera frame.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">imageSize</td><td>The desired size of the output depth image (in pixels). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraMatrixK</td><td>The camera matrix (intrinsics), containing the focal lengths and principal points. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">laserScan</td><td>A pointer to a pcl::PCLPointCloud2 object containing the laser scan points. The points are assumed to be in the /base_link coordinate system. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cameraTransform</td><td>The transform from /base_link to /camera_link, used to adjust the point cloud to the camera's reference frame.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A cv::Mat object representing the registered depth image, with each pixel corresponding to the projected point's depth (z value) in the camera frame.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if the input cameraTransform is null, the laser scan is empty, or the cameraMatrixK has incorrect dimensions. </td></tr>
<p>Fills holes (missing depth values) in a depth image by interpolating between non-zero values. </p>
<p>This function iterates through a depth image and fills holes by interpolating between the surrounding non-zero depth values. It works either vertically or horizontally, depending on the <code>verticalDirection</code> parameter. The interpolation method fills the missing values based on the linear slope between two valid depth values. Optionally, the interpolation can be extended to the border of the image if <code>fillToBorder</code> is set to <code>true</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">registeredDepth</td><td>A matrix representing the registered depth image, where missing depth values are assumed to be zero. The matrix must be of type <code>CV_32FC1</code>. </td></tr>
<tr><tdclass="paramname">verticalDirection</td><td>If <code>true</code>, the holes are filled vertically (by column), otherwise the holes are filled horizontally (by row). </td></tr>
<tr><tdclass="paramname">fillToBorder</td><td>If <code>true</code>, the interpolation will fill the depth holes all the way to the border of the image (i.e., it will propagate the nearest valid depth to the edges of the image).</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>The input <code>registeredDepth</code> matrix must be of type <code>CV_32FC1</code>, where depth values are stored as single-precision floating-point numbers. </dd>
<dd>
With <code>fillToBorder</code> enabled, the current implementation only fills up to last pixel, i.e., first/last rows or columns are not filled.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>This function modifies the input <code>registeredDepth</code> matrix in place. </dd></dl>
<p>Filters out points below a certain threshold in a depth image based on camera models. </p>
<p>This function processes a depth image and filters out points below a specified threshold, which are assumed to belong to the floor. It does this by projecting the depth pixels into 3D space (base frame) using the camera models, and if the z-coordinate of the projected point is less than the threshold, the corresponding depth value is set to 0.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">depth</td><td>The input depth image to be filtered. The matrix should contain depth values in either <code>CV_16UC1</code> (unsigned short) or <code>CV_32FC1</code> (float) format. </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>A vector of camera models used for reprojection. The camera models are used to convert the 2D image coordinates to 3D space. </td></tr>
<tr><tdclass="paramname">threshold</td><td>The z-threshold in meters, below which points are considered part of the floor and will be filtered out. </td></tr>
<tr><tdclass="paramname">depthBelow</td><td>A pointer to an optional output depth image where the filtered-out points (below the threshold) will be saved. If this is <code>nullptr</code>, no output is generated for filtered-out points.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new depth image where points below the specified threshold are set to zero.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>The function assumes that the depth image has valid depth values.</li>
<li>If the input <code>depthBelow</code> is provided, it will contain the depth values for the points that were considered as floor points.</li>
<li>The function assumes that all camera models have the same resolution and are valid for reprojection.</li>
</ul>
</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">std::invalid_argument</td><td>if the camera models are empty or invalid. </td></tr>
<p>Projects a 3D point cloud to the best camera (NodeID -> CameraIndex) for each point based on a policy. </p>
<p>This function takes a point cloud of type <code>pcl::PointXYZRGBNormal</code> and projects each point to the best camera that sees the point. The "best" camera is selected based on the distance, angle, and other parameters like Region of Interest (ROI) ratios and projection mask.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud of type <code>pcl::PointXYZRGBNormal</code> containing 3D points. </td></tr>
<tr><tdclass="paramname">cameraPoses</td><td>A map of camera IDs to their respective poses (transformations). </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>A map of camera IDs to their camera models (internal camera parameters). </td></tr>
<tr><tdclass="paramname">maxDistance</td><td>Maximum allowable distance from the camera for a point to be considered. </td></tr>
<tr><tdclass="paramname">maxAngle</td><td>Maximum allowable angle between the camera and the point normal for it to be considered. </td></tr>
<tr><tdclass="paramname">roiRatios</td><td>A vector of four floats defining the region of interest ratios for the camera image. See <aclass="el"href="group__RoiComputation.html#ga79d3f93673fb236980f0be532695f478"title="Computes a region of interest (ROI) in the image using string-defined ratios.">util2d::computeRoi()</a> for format. </td></tr>
<tr><tdclass="paramname">projMask</td><td>A binary mask for projection, which will be checked to ensure the point lies within the mask. </td></tr>
<tr><tdclass="paramname">distanceToCamPolicy</td><td>If true, the distance to the camera is considered in the decision of the best camera, otherwise distance to center of the camera is used. </td></tr>
<tr><tdclass="paramname">state</td><td>A <code><aclass="el"href="classrtabmap_1_1ProgressState.html">ProgressState</a></code> object to provide feedback on progress or cancellation.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of pairs, where each pair contains a pair of camera ID and camera index, and a 2D UV coordinate. The UV coordinate represents the projection of each point onto the best camera. </dd></dl>
<p>Projects a 3D point cloud to the best camera (NodeID -> CameraIndex) for each point based on a policy. </p>
<p>This function takes a point cloud of type <code>pcl::PointXYZINormal</code> and projects each point to the best camera that sees the point. The "best" camera is selected based on the distance, angle, and other parameters like Region of Interest (ROI) ratios and projection mask.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud of type <code>pcl::PointXYZINormal</code> containing 3D points. </td></tr>
<tr><tdclass="paramname">cameraPoses</td><td>A map of camera IDs to their respective poses (transformations). </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>A map of camera IDs to their camera models (internal camera parameters). </td></tr>
<tr><tdclass="paramname">maxDistance</td><td>Maximum allowable distance from the camera for a point to be considered. </td></tr>
<tr><tdclass="paramname">maxAngle</td><td>Maximum allowable angle between the camera and the point normal for it to be considered. </td></tr>
<tr><tdclass="paramname">roiRatios</td><td>A vector of four floats defining the region of interest ratios for the camera image. See <aclass="el"href="group__RoiComputation.html#ga79d3f93673fb236980f0be532695f478"title="Computes a region of interest (ROI) in the image using string-defined ratios.">util2d::computeRoi()</a> for format. </td></tr>
<tr><tdclass="paramname">projMask</td><td>A binary mask for projection, which will be checked to ensure the point lies within the mask. </td></tr>
<tr><tdclass="paramname">distanceToCamPolicy</td><td>If true, the distance to the camera is considered in the decision of the best camera, otherwise distance to center of the camera is used. </td></tr>
<tr><tdclass="paramname">state</td><td>A <code><aclass="el"href="classrtabmap_1_1ProgressState.html">ProgressState</a></code> object to provide feedback on progress or cancellation.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of pairs, where each pair contains a pair of camera ID and camera index, and a 2D UV coordinate. The UV coordinate represents the projection of each point onto the best camera. </dd></dl>
<p>Concatenates a list of PointXYZ point clouds into a single point cloud. </p>
<p>This function takes a list of shared pointers to <code>pcl::PointCloud<pcl::PointXYZ></code> objects, and merges them into a single point cloud by appending the points of each input cloud.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">clouds</td><td>A list of pointers to PointXYZ point clouds to concatenate. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <code>pcl::PointCloud<pcl::PointXYZ>::Ptr</code> containing all the points from the input clouds. </dd></dl>
<p>Concatenates a list of PointXYZRGB point clouds into a single point cloud. </p>
<p>This function takes a list of shared pointers to <code>pcl::PointCloud<pcl::PointXYZRGB></code> objects, and merges them into a single point cloud by appending the points of each input cloud.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">clouds</td><td>A list of pointers to PointXYZRGB point clouds to concatenate. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <code>pcl::PointCloud<pcl::PointXYZRGB>::Ptr</code> containing all the points from the input clouds. </dd></dl>
<p>Concatenates multiple sets of indices into a single index vector. </p>
<p>This function takes a vector of shared pointers to PCL index vectors and combines them into a single shared pointer containing all indices in the same order as they appear in the input.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">indices</td><td>A vector of <code>pcl::IndicesPtr</code> (shared pointers to index vectors). </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A single <code>pcl::IndicesPtr</code> containing the concatenated indices.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The output order preserves the original order of indices from each input set.</dd></dl>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#ac6c2019b1dad806d0c593e2ee3c21185"title="Concatenates two sets of indices into one.">concatenate(const pcl::IndicesPtr &, const pcl::IndicesPtr &)</a></dd></dl>
<p>Concatenates two sets of indices into one. </p>
<p>This function creates a new index vector containing all indices from <code>indicesA</code> followed by all indices from <code>indicesB</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">indicesA</td><td>The first set of indices to include. </td></tr>
<tr><tdclass="paramname">indicesB</td><td>The second set of indices to append. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code>pcl::IndicesPtr</code> containing the combined indices from both inputs.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The input index vectors are not modified.</dd></dl>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#aff3c61a08b0fcad7f1c3f7c847190969"title="Concatenates multiple sets of indices into a single index vector.">concatenate(const std::vector<pcl::IndicesPtr>&)</a></dd></dl>
<p>Saves 3D word points to a PCD file, applying a transform to each point. </p>
<p>This function takes a multimap of word identifiers and corresponding 3D PCL points, applies the given transform to each point, and saves the resulting point cloud to the specified PCD file.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">fileName</td><td>The path to the output PCD file. </td></tr>
<tr><tdclass="paramname">words</td><td>A multimap containing word IDs and their associated pcl::PointXYZ coordinates. </td></tr>
<tr><tdclass="paramname">transform</td><td>A transform to apply to each 3D point before saving. </td></tr>
<p>Saves 3D word points (as OpenCV points) to a PCD file, applying a transform to each point. </p>
<p>This function takes a multimap of word identifiers and corresponding 3D OpenCV points, converts them to PCL format after applying the given transform, and saves them as a point cloud to the specified PCD file.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">fileName</td><td>The path to the output PCD file. </td></tr>
<tr><tdclass="paramname">words</td><td>A multimap containing word IDs and their associated cv::Point3f coordinates. </td></tr>
<tr><tdclass="paramname">transform</td><td>A transform to apply to each 3D point before saving. </td></tr>
<p>Loads a KITTI-style Velodyne binary scan file into an OpenCV matrix. </p>
<p>This function assumes the binary file contains a series of 4-float values per point representing (X, Y, Z, Intensity). It loads the entire file into a <code>cv::Mat</code> with type <code>CV_32FC4</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">fileName</td><td>Path to the .bin file. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A 1-row <code>cv::Mat</code> with 4 channels (XYZI), one column per point. </dd></dl>
<p>Loads a KITTI-style Velodyne binary scan and converts it to a PCL point cloud. </p>
<p>Internally calls <code><aclass="el"href="namespacertabmap_1_1util3d.html#aefffe4f3418377f85659e7546668b190"title="Loads a 3D scan from a file (.pcd, .ply, or .bin format).">loadScan()</a></code> and converts the result into a <code>pcl::PointCloud<pcl::PointXYZ></code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">fileName</td><td>Path to the .bin file. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>Pointer to the loaded point cloud. </dd></dl>
<dlclass="section return"><dt>Returns</dt><dd>Pointer to the loaded point cloud. </dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000019">Deprecated:</a></b></dt><dd>This overload exists for compatibility but ignores the <code>dim</code> parameter. Use version without <code>dim</code> directly. </dd></dl>
<p>Loads a 3D scan from a file (.pcd, .ply, or .bin format). </p>
<p>This function detects the file type based on the extension and loads the scan accordingly. Binary .bin files are interpreted using the KITTI format (XYZI). For .pcd or .ply files, a PCL point cloud is loaded and optionally interpreted as 2D if all Z values are 0.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">path</td><td>Path to the scan file. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> object containing the loaded scan data. </dd></dl>
<p>Loads and optionally transforms/downsamples/voxelizes a point cloud. </p>
<p>This function loads a point cloud from a .bin, .pcd, or .ply file. It can apply a transformation, downsample using a step size, or filter using a voxel grid.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">path</td><td>Path to the scan file. </td></tr>
<tr><tdclass="paramname">transform</td><td>Transformation to apply to the cloud (must not be null). </td></tr>
<tr><tdclass="paramname">downsampleStep</td><td>Step size to downsample (1 = no downsampling). </td></tr>
<tr><tdclass="paramname">voxelSize</td><td>Size of the voxel grid filter in meters (0 = no filtering). </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>Transformed and optionally filtered <code>pcl::PointCloud<pcl::PointXYZ>::Ptr</code>. </dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000020">Deprecated:</a></b></dt><dd>Use <aclass="el"href="namespacertabmap_1_1util3d.html#aefffe4f3418377f85659e7546668b190"title="Loads a 3D scan from a file (.pcd, .ply, or .bin format).">loadScan()</a> instead. </dd></dl>
<p>Deskews a laser scan based on the velocity transform and timestamp information.</p>
<p>This function takes an input <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> with a time channel (<code>kXYZIT</code> format), and deskews the scan based on the provided velocity transform. It assumes that the scan has a time channel with time information for each point relative to <code>inputStamp</code>. The deskewing process involves calculating the pose of the laser at each point in time and correcting the scan data accordingly.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">input</td><td>The input <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> to be deskewed. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">inputStamp</td><td>The timestamp of the input scan (e.g., epoch time). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">velocity</td><td>The velocity transform (linear and angular velocities), in base frame.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> that has been deskewed based on the provided velocity and timestamps.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the velocity is null or if the input scan does not have the correct format, an error will be logged. If the first and last timestamps are identical, deskewing cannot be performed, and an error is logged.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>This function assumes that the input <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> is in the <code>kXYZIT</code> format (with time data). If not, an error will be logged and an empty <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> will be returned.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">exception</td><td>if velocity is null or the format is incorrect. </td></tr>
<p>Extracts 3D point correspondences between two sets of labeled 3D points. </p>
<p>This function identifies common point IDs (keys) between two multimap structures containing <code>pcl::PointXYZ</code> points. For each shared key that appears <b>exactly once</b> in both input maps, and where both corresponding points are finite, the matched points are added to two output point clouds.</p>
<p>The resulting <code>cloud1</code> and <code>cloud2</code> point clouds will contain points with a one-to-one correspondence, useful for geometric registration (e.g., ICP).</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">words1</td><td>Input multimap of point ID to 3D point for the first dataset. </td></tr>
<tr><tdclass="paramname">words2</td><td>Input multimap of point ID to 3D point for the second dataset. </td></tr>
<tr><tdclass="paramname">cloud1</td><td>Output point cloud (corresponding to points from <code>words1</code>). </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Output point cloud (corresponding to points from <code>words2</code>).</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>Only keys that appear exactly once in both <code>words1</code> and <code>words2</code>, and whose associated <code>pcl::PointXYZ</code> entries are finite, will be included in the output clouds. </dd></dl>
<p>Extracts reliable 3D point correspondences between two sets of labeled 3D points using RANSAC filtering. </p>
<p>This function finds correspondences between <code>words1</code> and <code>words2</code> based on shared unique keys. For each common key that appears exactly once in both maps, and where the corresponding 3D points are finite, a candidate correspondence is formed. If more than 7 such pairs exist, RANSAC is used via OpenCV’s <code>cv::findFundamentalMat</code> to reject outliers based on the geometric consistency of the 2D projections.</p>
<p>Only the inlier correspondences determined by RANSAC are returned in the output point clouds <code>cloud1</code> and <code>cloud2</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">words1</td><td>Input multimap of point ID to <code>pcl::PointXYZ</code> for the first set of 3D features. </td></tr>
<tr><tdclass="paramname">words2</td><td>Input multimap of point ID to <code>pcl::PointXYZ</code> for the second set of 3D features. </td></tr>
<tr><tdclass="paramname">cloud1</td><td>Output point cloud containing inlier points from <code>words1</code>. </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Output point cloud containing inlier points from <code>words2</code>.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>At least 8 valid point correspondences are required for RANSAC to compute a fundamental matrix. If fewer than 8 valid matches exist, the function does not modify the output clouds.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>Only 2D <code>(x, y)</code> components of the 3D points are used for RANSAC filtering. </dd></dl>
<p>Extracts 3D point correspondences from 2D pixel matches using depth images. </p>
<p>This function projects matched 2D keypoints (pixel correspondences) from two RGB-D images into 3D space using the provided camera intrinsic parameters. Only valid and finite 3D points are retained. If a <code>maxDepth</code> threshold is provided, points farther than this threshold are excluded.</p>
<p>The function returns two synchronized point clouds, <code>cloud1</code> and <code>cloud2</code>, where each point pair at the same index corresponds to a match between the two views.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">correspondences</td><td>List of 2D point correspondences between image 1 and image 2. </td></tr>
<tr><tdclass="paramname">depthImage1</td><td>Depth image corresponding to the first set of points (CV_32FC1 or CV_16UC1). </td></tr>
<tr><tdclass="paramname">depthImage2</td><td>Depth image corresponding to the second set of points (same format as depthImage1). </td></tr>
<tr><tdclass="paramname">cx</td><td>Principal point x-coordinate (camera intrinsic). </td></tr>
<tr><tdclass="paramname">cy</td><td>Principal point y-coordinate (camera intrinsic). </td></tr>
<tr><tdclass="paramname">fx</td><td>Focal length in x-direction (camera intrinsic). </td></tr>
<tr><tdclass="paramname">fy</td><td>Focal length in y-direction (camera intrinsic). </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>Maximum allowed depth for a correspondence to be considered valid. If <= 0, all depths are accepted. </td></tr>
<tr><tdclass="paramname">cloud1</td><td>Output point cloud with 3D points corresponding to the first image. </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Output point cloud with 3D points corresponding to the second image.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>Both output point clouds are resized to contain only the valid 3D matches after filtering.</li>
<li>Invalid, non-finite, or out-of-range depth values are automatically filtered out. </li>
<p>Extracts 3D correspondences from 2D feature matches using <code>pcl::PointXYZ</code> organized point clouds. </p>
<p>This function projects 2D keypoint matches into 3D using the corresponding organized point clouds (<code>cloud1</code> and <code>cloud2</code>). Points that are not finite are discarded.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">correspondences</td><td>List of 2D point correspondences between image 1 and image 2. </td></tr>
<tr><tdclass="paramname">cloud1</td><td>Organized <code>pcl::PointXYZ</code> point cloud corresponding to the first image. </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Organized <code>pcl::PointXYZ</code> point cloud corresponding to the second image. </td></tr>
<tr><tdclass="paramname">inliers1</td><td>Output 3D points from <code>cloud1</code> corresponding to valid 2D matches. </td></tr>
<tr><tdclass="paramname">inliers2</td><td>Output 3D points from <code>cloud2</code> corresponding to valid 2D matches.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>Only organized point clouds are supported (i.e., width × height layout must match image size from which 2D keypoints were taken). </li>
<p>Extracts 3D correspondences from 2D feature matches using <code>pcl::PointXYZRGB</code> organized point clouds. </p>
<p>This overload behaves identically to the <code>pcl::PointXYZ</code> version, but supports input point clouds that contain RGB color data. The color is not used—only the XYZ fields are extracted.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">correspondences</td><td>List of matched 2D keypoints between two images. </td></tr>
<tr><tdclass="paramname">cloud1</td><td>Organized <code>pcl::PointXYZRGB</code> point cloud for the first image. </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Organized <code>pcl::PointXYZRGB</code> point cloud for the second image. </td></tr>
<tr><tdclass="paramname">inliers1</td><td>Output 3D points from <code>cloud1</code> corresponding to valid 2D matches. </td></tr>
<tr><tdclass="paramname">inliers2</td><td>Output 3D points from <code>cloud2</code> corresponding to valid 2D matches. </td></tr>
<p>Counts the number of unique 3D point correspondences between two sets of word-indexed features. </p>
<p>This function iterates over the unique keys (word IDs) in <code>wordsA</code> and checks if the same key exists in <code>wordsB</code>. A pair is considered "unique" if both <code>wordsA</code> and <code>wordsB</code> contain exactly one 3D point (i.e., one <code>pcl::PointXYZ</code>) associated with the same key.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">wordsA</td><td>A multimap of word IDs to 3D points (e.g., from frame A). </td></tr>
<tr><tdclass="paramname">wordsB</td><td>A multimap of word IDs to 3D points (e.g., from frame B). </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The number of unique pairs where both <code>wordsA</code> and <code>wordsB</code> contain exactly one point for a given word ID. </dd></dl>
<p>Filters pairs of 3D points by maximum depth along a specified axis and optionally removes duplicates. </p>
<p>This function takes two point clouds (<code>inliers1</code> and <code>inliers2</code>) containing corresponding 3D points, and filters out pairs where either point exceeds a specified maximum depth value along the given axis. It can also optionally remove duplicate points in the first point cloud.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in,out]</td><tdclass="paramname">inliers1</td><td>The first point cloud of 3D points to be filtered. Points failing the filter will be removed. </td></tr>
<tr><tdclass="paramdir">[in,out]</td><tdclass="paramname">inliers2</td><td>The second point cloud of 3D points corresponding to <code>inliers1</code>. Points failing the filter will be removed. Must be the same size as <code>inliers1</code>. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>The maximum allowed depth value along the specified axis. Points with coordinate values greater or equal to this value on that axis will be removed. If <code>maxDepth</code> is less or equal to zero, no filtering is performed. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">depthAxis</td><td>The axis ('x', 'y', or 'z') along which to measure depth for filtering. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">removeDuplicates</td><td>If <code>true</code>, duplicate points in <code>inliers1</code> (exact coordinate matches) will be removed. Duplicates are detected only in <code>inliers1</code>.</td></tr>
</table>
</dd>
</dl>
<dlclass="section warning"><dt>Warning</dt><dd>The function modifies <code>inliers1</code> and <code>inliers2</code> in place, replacing them with filtered versions. </dd></dl>
<p>Finds 2D point correspondences between two sets of keypoints based on matching word IDs. </p>
<p>This function compares two multimap structures containing word IDs associated with <code>cv::KeyPoint</code>s. It extracts correspondences where the same word ID appears <b>exactly once</b> in each set.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">wordsA</td><td>A multimap from word ID to keypoints in set A. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">wordsB</td><td>A multimap from word ID to keypoints in set B. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">pairs</td><td>A list of matching 2D point correspondences (Point2f) between wordsA and wordsB.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>Only unique word ID matches (count == 1 in both sets) are considered valid correspondences.</dd></dl>
<dlclass="section user"><dt>Example</dt><dd>If <code>wordsA = [1 2 3 4 6 6]</code> and <code>wordsB = [1 1 2 4 5 6 6]</code>, the output <code>pairs</code> will contain correspondences for IDs <code>2</code> and <code>4</code>, because only those have exactly one match in both sets. </dd></dl>
<p>Finds 3D point correspondences between two sets of points based on matching word IDs. </p>
<p>This function compares two multimaps of 3D points (typically from different views or frames). It returns point pairs where the same word ID appears <b>once</b> in both maps, the points are finite and valid, and optionally filtered by a maximum X-depth.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">words1</td><td>A multimap of word IDs to 3D points in the first set. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">words2</td><td>A multimap of word IDs to 3D points in the second set. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">inliers1</td><td>Output vector of 3D points from <code>words1</code> with valid correspondences. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">inliers2</td><td>Output vector of corresponding 3D points from <code>words2</code>. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>Optional filter: only points with X-values in (0, maxDepth] are kept. Use <= 0 to disable. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">uniqueCorrespondences</td><td>(Optional) Vector of word IDs corresponding to each pair.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>Only pairs with exactly one occurrence in each map and non-zero, finite coordinates are kept. </dd></dl>
<p>Finds 3D point correspondences between two sets of uniquely indexed 3D points. </p>
<p>This overload works with <code>std::map</code>, where each word ID appears at most once. It finds matching IDs and returns valid point pairs based on similar criteria to the multimap version.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">words1</td><td>A map of word IDs to 3D points in the first set. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">words2</td><td>A map of word IDs to 3D points in the second set. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">inliers1</td><td>Output vector of 3D points from <code>words1</code> with valid correspondences. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">inliers2</td><td>Output vector of corresponding 3D points from <code>words2</code>. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">maxDepth</td><td>Optional filter: only points with X-values in (0, maxDepth] are kept. Use <= 0 to disable. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">correspondences</td><td>(Optional) Vector of word IDs corresponding to valid matched pairs.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>Finite, non-zero points are required. The function ignores word IDs not found in both sets. </dd></dl>
<p>Projects 2D keypoints to 3D space using the provided depth image and camera models. </p>
<p>This function takes a vector of 2D keypoints and projects them into 3D space by using depth values from a depth image and the associated camera models. It supports multi-camera setups by assuming the depth image is horizontally stacked with sub-images corresponding to each camera.</p>
<p>If a depth value at a keypoint location is invalid or outside the specified depth range (<code>minDepth</code>, <code>maxDepth</code>), the output 3D point will be set to NaN.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">keypoints</td><td>A vector of 2D keypoints (in image coordinates). </td></tr>
<tr><tdclass="paramname">depth</td><td>The depth image (must be either <code>CV_32FC1</code> or <code>CV_16UC1</code>). For multiple cameras, the depth images should be horizontally concatenated. </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>A vector of camera models, one per camera. Each model must provide intrinsic parameters and optionally a local transform to apply to the resulting 3D point. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>Minimum valid depth value. If negative, no minimum is enforced. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>Maximum valid depth value. If zero or negative, no maximum is enforced.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of 3D points (<code>cv::Point3f</code>) corresponding to the input keypoints. If the depth is invalid or outside the valid range, the point will contain NaNs.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">Assertion</td><td>failure if the depth image is empty or not of the expected type, or if the camera model vector is empty, or if camera index computation fails. </td></tr>
<p>Projects 2D keypoints to 3D space using the provided depth image and camera model. </p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#a785db0d55f5eccf209b9d3d712ec92b2"title="Projects 2D keypoints to 3D space using the provided depth image and camera models.">util3d::generateKeypoints3DDepth()</a></dd></dl>
<p>Projects 2D keypoints into 3D space using a disparity image and a stereo camera model. </p>
<p>This function computes 3D coordinates for each input 2D keypoint by using the disparity image and the stereo camera model. Invalid or out-of-range depth values result in 3D points with <code>NaN</code> components.</p>
<p>The function applies the local transform of the left camera (from the stereo model) to each valid 3D point, if the transform is not null or identity.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">keypoints</td><td>A vector of 2D keypoints (image coordinates) to be projected into 3D. </td></tr>
<tr><tdclass="paramname">disparity</td><td>The disparity image (must be of type <code>CV_16SC1</code> or <code>CV_32F</code>). Disparity values should correspond to the keypoints' locations. </td></tr>
<tr><tdclass="paramname">stereoCameraModel</td><td>A valid stereo camera model that provides projection parameters and an optional local transform. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>Minimum depth threshold. If negative, no minimum constraint is applied. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>Maximum depth threshold. If zero or negative, no maximum constraint is applied.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of 3D points (<code>cv::Point3f</code>) corresponding to the input keypoints. Points with invalid or out-of-range depth are returned as <code>(NaN, NaN, NaN)</code>.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">Assertion</td><td>failure if the disparity image is empty or of incorrect type, or if the stereo camera model is not valid for projection. </td></tr>
<p>Computes 3D keypoints from corresponding 2D points in a stereo image pair. </p>
<p>This function triangulates 3D points from pairs of corresponding 2D points (<code>leftCorners</code>, <code>rightCorners</code>) using a given stereo camera model. It optionally applies a validity mask and filters 3D points by depth range.</p>
<p>For each point pair, the disparity is computed as the x-coordinate difference between left and right corners. Only positive disparities are considered valid. If a mask is provided, only entries with a non-zero value are processed.</p>
<p>The resulting 3D points are optionally transformed using the stereo camera model's local transform, if one is defined and non-identity.</p>
<p>Invalid or out-of-range points are set to <code>(NaN, NaN, NaN)</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">leftCorners</td><td>A vector of 2D points from the left stereo image. </td></tr>
<tr><tdclass="paramname">rightCorners</td><td>A vector of corresponding 2D points from the right stereo image. </td></tr>
<tr><tdclass="paramname">model</td><td>The stereo camera model containing intrinsic parameters and optional local transform. </td></tr>
<tr><tdclass="paramname">mask</td><td>(Optional) A binary mask indicating which matches are valid (non-zero = valid). If empty, all matches are considered valid. </td></tr>
<tr><tdclass="paramname">minDepth</td><td>Minimum allowed depth value. If negative, no minimum is applied. </td></tr>
<tr><tdclass="paramname">maxDepth</td><td>Maximum allowed depth value. If zero or negative, no maximum is applied.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A vector of 3D points (<code>cv::Point3f</code>) corresponding to valid stereo matches. Invalid points or those outside the depth range are returned as <code>(NaN, NaN, NaN)</code>.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">Assertion</td><td>failure if the input vectors are inconsistent in size, or if the stereo camera model is invalid (e.g., non-positive focal length or baseline). </td></tr>
<p>Aggregates word IDs and corresponding keypoints into a multimap. </p>
<p>This function pairs each word ID from the input list with the corresponding keypoint from the input vector and stores them in a <code>std::multimap<int, cv::KeyPoint></code>.</p>
<p>It is assumed that the <code>wordIds</code> list and the <code>keypoints</code> vector are of the same length and ordered such that each word ID corresponds to the keypoint at the same index.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">wordIds</td><td>A list of integer word IDs (e.g., visual word identifiers). </td></tr>
<tr><tdclass="paramname">keypoints</td><td>A vector of keypoints associated with the word IDs.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A multimap where each key is a word ID and the value is the corresponding <code>cv::KeyPoint</code>. Multiple keypoints can be associated with the same word ID.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">Assertion</td><td>failure if <code>wordIds.size() != keypoints.size()</code>. </td></tr>
<p>Applies a common set of filters to a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>, including downsampling, range limits, voxel grid filtering, and normal estimation. </p>
<p>This function performs a sequence of optional preprocessing steps on the input <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>:</p><ul>
<li>Downsampling: Reduces the number of points by selecting every N-th point.</li>
<li>Range filtering: Removes points outside the specified minimum and maximum range.</li>
<li>Voxel grid filtering: Reduces point density using a voxel grid.</li>
<li>Normal estimation: Computes surface normals using k-nearest neighbors or radius search.</li>
<li>Normal reorientation: normals are first flipped to face the view point, then optionally oriented upward if this condition is fulfilled: for each normal, if normal.z <<code>-groundNormalsUp</code> and the corresponding point is below viewpoint, it is flipped upward. The view point is the sensor origin, as the scan is kept in sensor frame (its local transform is not applied), so "below" and "upward" are along the sensor Z axis.</li>
</ul>
<p>The function supports both 2D and 3D scans and adapts behavior based on whether the scan contains RGB or intensity data.</p>
<p>Depending on the filtering options used, the output point cloud may be dense if the input is organized.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">scanIn</td><td>Input <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> to be filtered. </td></tr>
<tr><tdclass="paramname">downsamplingStep</td><td>Step size for downsampling. A value >1 will reduce the scan resolution. For organized scans, only the largest dimension is downsampled and the result is dense. For example, if the input organized scan is 16x1024, the resulting scan will be 1x8192 (if all values are valid). </td></tr>
<tr><tdclass="paramname">rangeMin</td><td>Minimum range to keep points from the scan viewpoint. Points closer than this value will be discarded. Output point cloud will be dense. Set to 0 to disable. </td></tr>
<tr><tdclass="paramname">rangeMax</td><td>Maximum range to keep points from the scan viewpoint. Points farther than this value will be discarded. Output point cloud will be dense. Set to 0 to disable. </td></tr>
<tr><tdclass="paramname">voxelSize</td><td>Size of the voxel grid in meters. A value >0 enables voxel filtering. Output point cloud will be dense. </td></tr>
<tr><tdclass="paramname">normalK</td><td>Number of nearest neighbors to use for normal estimation. Set to 0 to disable. </td></tr>
<tr><tdclass="paramname">normalRadius</td><td>Radius used for normal estimation. Set to 0 to disable. </td></tr>
<tr><tdclass="paramname">groundNormalsUp</td><td>If >0, normal vectors close to -Z axis will be oriented upward (+Z). Expected value is around <code>0.8</code>.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> instance with the applied filters and potential normals. </dd></dl>
<p>Applies a common set of filters to a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>, including downsampling, range limits, voxel grid filtering, and normal estimation. </p>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000021">Deprecated:</a></b></dt><dd>Use version with groundNormalsUp as float. For forceGroundNormalsUp=true, set groundNormalsUpAngle=0.8, otherwise set groundNormalsUpAngle=0.0. </dd></dl>
<p>Filters a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> data on a minimum and maximum Euclidean range. </p>
<p>This function removes scan points from the input <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> that fall outside the specified minimum and maximum range (in meters) from the <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>'s viewpoint.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">scan</td><td>The input <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> object containing the scan data. </td></tr>
<tr><tdclass="paramname">rangeMin</td><td>The minimum range threshold. Points closer than this will be excluded. </td></tr>
<tr><tdclass="paramname">rangeMax</td><td>The maximum range threshold. Points farther than this will be excluded. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a> object containing only the points within the specified range. If the input scan is empty or the range limits are both zero, the original scan is returned.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The function handles both 2D and 3D scans based on the <code>scan.is2d()</code> flag. The function doesn't keep the scan organized if the input is. </dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">Assertion</td><td>failure if either <code>rangeMin</code> or <code>rangeMax</code> is negative. </td></tr>
<p>DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. </p>
<p>Performs uniform sampling of a point cloud by applying voxel grid filtering with the specified voxel size. This is a legacy wrapper for <code><aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a></code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud (pcl::PointXYZ). </td></tr>
<tr><tdclass="paramname">voxelSize</td><td>The voxel size (resolution) used for downsampling. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A downsampled point cloud using voxel grid filtering.</dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000022">Deprecated:</a></b></dt><dd>This function is deprecated. Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> for equivalent behavior. </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__filtering_8h_source.html#l00359">359</a> of file <aclass="el"href="util3d__filtering_8h_source.html">util3d_filtering.h</a>.</p>
<p>DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. </p>
<p>Performs uniform sampling of a point cloud by applying voxel grid filtering with the specified voxel size. This is a legacy wrapper for <code><aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a></code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud (pcl::PointXYZRGB). </td></tr>
<tr><tdclass="paramname">voxelSize</td><td>The voxel size (resolution) used for downsampling. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A downsampled point cloud using voxel grid filtering.</dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000023">Deprecated:</a></b></dt><dd>This function is deprecated. Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> for equivalent behavior. </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__filtering_8h_source.html#l00377">377</a> of file <aclass="el"href="util3d__filtering_8h_source.html">util3d_filtering.h</a>.</p>
<p>DEPRECATED: Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> instead. </p>
<p>Performs uniform sampling of a point cloud by applying voxel grid filtering with the specified voxel size. This is a legacy wrapper for <code><aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a></code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud (pcl::PointXYZRGBNormal). </td></tr>
<tr><tdclass="paramname">voxelSize</td><td>The voxel size (resolution) used for downsampling. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A downsampled point cloud using voxel grid filtering.</dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000024">Deprecated:</a></b></dt><dd>This function is deprecated. Use <aclass="el"href="group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89"title="Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.">voxelize()</a> for equivalent behavior. </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="util3d__filtering_8h_source.html#l00395">395</a> of file <aclass="el"href="util3d__filtering_8h_source.html">util3d_filtering.h</a>.</p>
<p>Performs adaptive radius-based subtraction filtering on a point cloud. </p>
<p>This function removes points from the input <code>cloud</code> that have at least <code>minNeighborsInRadius</code> neighbors within an adaptive radius in the <code>subtractCloud</code>. The search radius is scaled proportionally to the distance of each point from the <code>viewpoint</code>, using the <code>radiusSearchRatio</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud to filter. </td></tr>
<tr><tdclass="paramname">indices</td><td>The subset of points in <code>cloud</code> to consider. If empty, the entire cloud is used. </td></tr>
<tr><tdclass="paramname">subtractCloud</td><td>The reference point cloud to search against. </td></tr>
<tr><tdclass="paramname">subtractIndices</td><td>Optional indices for <code>subtractCloud</code>. If empty, the full cloud is used. </td></tr>
<tr><tdclass="paramname">radiusSearchRatio</td><td>The ratio to scale the radius based on distance to <code>viewpoint</code>. </td></tr>
<tr><tdclass="paramname">minNeighborsInRadius</td><td>Minimum number of neighbors required to consider a point "covered". </td></tr>
<tr><tdclass="paramname">viewpoint</td><td>The reference viewpoint used to compute adaptive search radius.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The retained point indices from <code>cloud</code>.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>Points with fewer than <code>minNeighborsInRadius</code> neighbors in the subtract cloud are retained. </dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>This version does not consider surface normals; it is purely geometric. </dd></dl>
<p>Performs adaptive radius-based subtraction filtering on a point cloud with normals, also considering normal direction differences. </p>
<p>This function removes points from the input <code>cloud</code> that have at least <code>minNeighborsInRadius</code> neighbors within an adaptive radius in the <code>subtractCloud</code>, unless the angular difference between normals exceeds <code>maxAngle</code>.</p>
<p>The search radius is scaled based on the distance of each point from the <code>viewpoint</code>, using the <code>radiusSearchRatio</code>. For neighbors found, the angle between their normals and the input point’s normal is evaluated. If the angle exceeds <code>maxAngle</code>, the neighbor is ignored.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud with normals to filter. </td></tr>
<tr><tdclass="paramname">indices</td><td>The subset of points in <code>cloud</code> to consider. If empty, the entire cloud is used. </td></tr>
<tr><tdclass="paramname">subtractCloud</td><td>The reference point cloud with normals to search against. </td></tr>
<tr><tdclass="paramname">subtractIndices</td><td>Optional indices for <code>subtractCloud</code>. If empty, the full cloud is used. </td></tr>
<tr><tdclass="paramname">radiusSearchRatio</td><td>The ratio to scale the radius based on distance to <code>viewpoint</code>. </td></tr>
<tr><tdclass="paramname">maxAngle</td><td>Maximum angle (in radians) allowed between normals of matched neighbors. </td></tr>
<tr><tdclass="paramname">minNeighborsInRadius</td><td>Minimum number of valid neighbors required to exclude a point. </td></tr>
<tr><tdclass="paramname">viewpoint</td><td>The reference viewpoint used to compute adaptive search radius.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The retained point indices from <code>cloud</code>.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>Neighbors with normals exceeding <code>maxAngle</code> from the input point's normal are discarded. Points with fewer than <code>minNeighborsInRadius</code> valid neighbors are retained. </dd></dl>
<p>Extracts the indices of the inliers that belong to a plane using RANSAC. </p>
<p>This function uses the RANSAC algorithm to fit a plane model to a set of 3D points and returns the indices of the points that are considered inliers (i.e., those that lie close to the fitted plane). It also optionally outputs the coefficients of the plane (normal and offset).</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud. </td></tr>
<tr><tdclass="paramname">indices</td><td>An optional set of indices in the point cloud to use for segmentation. If empty, the whole cloud is used. </td></tr>
<tr><tdclass="paramname">distanceThreshold</td><td>The distance threshold for considering points as inliers to the plane. Points within this threshold are classified as inliers. </td></tr>
<tr><tdclass="paramname">maxIterations</td><td>The maximum number of iterations the RANSAC algorithm should run. </td></tr>
<tr><tdclass="paramname">coefficientsOut</td><td>An optional output pointer to store the coefficients of the plane model. The coefficients include the plane normal and offset.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A list of indices of points that are considered inliers to the fitted plane.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If the input <code>indices</code> is empty, the entire point cloud will be used for segmentation. </dd>
<dd>
If the <code>coefficientsOut</code> is not null, it will be filled with the model coefficients of the plane. </dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000025">Deprecated:</a></b></dt><dd>Use the overload taking a <code>viewpoint</code>, so that ray tracing starts from the sensor and not from the base frame. </dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000026">Deprecated:</a></b></dt><dd>Use the overload taking <code>scanHit</code> / <code>scanNoHit</code>; passing a null <code>scanNoHit</code> is equivalent to this one. </dd></dl>
<p>Generates 2D occupancy grid maps (free and occupied cells) from laser scan data. </p>
<p>This function takes in a laser scan composed of hit and no-hit points and computes two 2D maps:</p><ul>
<li><code>empty</code>: 2D coordinates of free space (where the laser passed without hitting obstacles).</li>
<li><code>occupied</code>: precise 2D coordinates of obstacle hits (where the laser reflected).</li>
</ul>
<p>The internal representation uses a temporary occupancy map generated from <code><aclass="el"href="namespacertabmap_1_1util3d.html#ae7dca67101116f7de0114cea5442ec23">create2DMap()</a></code>, from which free cells are extracted. Obstacle points are directly passed through, potentially clipped by a maximum range filter.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">scanHitIn</td><td>CV_32FC2 or CV_32FC(n>=2) matrix representing obstacle hits in 2D or 3D space (relative to base frame, not laser frame). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">scanNoHitIn</td><td>CV_32FC2 or CV_32FC(n>=2) matrix representing laser rays that did not hit an obstacle (relative to base frame, not laser frame). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">viewpoint</td><td>The viewpoint (sensor origin) from which the scan was taken, in 3D space, relative to base frame. This used to determinate the origin of ray tracing. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">empty</td><td>Output matrix (CV_32FC2) of free space points derived from ray tracing. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">occupied</td><td>Output matrix (CV_32FC2) of occupied (hit) points, filtered by max range if required. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">cellSize</td><td>The resolution of the occupancy map grid (in meters per cell). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">unknownSpaceFilled</td><td>If true, unknown space between hits is also filled via ray tracing. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">scanMaxRange</td><td>Maximum range of the scan (in meters). Values beyond this are clipped.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>The function assumes a single scan already converted in base frame for internal processing. </dd>
<dd>
If <code>scanMaxRange <= cellSize</code>, no range filtering is applied to the occupied points.</dd></dl>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#ae7dca67101116f7de0114cea5442ec23">create2DMap()</a>, <aclass="el"href="namespacertabmap_1_1util3d.html#ae33bcf90896fbedc448097bed3bde0ae"title="Filters a LaserScan data on a minimum and maximum Euclidean range.">util3d::rangeFiltering()</a></dd></dl>
<p>Creates a 2D occupancy grid map from local occupancy data. </p>
<p>Generates a 2D occupancy grid (<code>CV_8S</code>) where:</p><ul>
<li>-1 indicates unknown space,</li>
<li>0 indicates free space,</li>
<li>100 indicates an occupied (obstacle) cell.</li>
</ul>
<p>This function transforms and merges local empty/occupied occupancy maps from multiple robot poses into a single global 2D grid map.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir"></td><tdclass="paramname">posesIn</td><td>Map of robot poses, indexed by node ID. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">occupancy</td><td>Map of local occupancy data, indexed by node ID. Each pair contains two cv::Mat elements:<ul>
<li>First: empty cells (CV_32FC2) relative to base frame,</li>
<li>Second: occupied cells (CV_32FC2) relative to base frame. </li>
</ul>
</td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">cellSize</td><td>The resolution of the map in meters per cell. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">xMin</td><td>Minimum x-coordinate (origin offset) of the resulting map (in meters). </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">yMin</td><td>Minimum y-coordinate (origin offset) of the resulting map (in meters). </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">minMapSize</td><td>Minimum width/height of the output map in meters. If 0, size is computed from poses and occupancy data. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">erode</td><td>Whether to post-process (erode) noisy obstacles. This helps remove isolated or thin obstacle artifacts. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">footprintRadius</td><td>Radius of the robot footprint (in meters). Free space will be cleared under the robot.</td></tr>
<dlclass="section warning"><dt>Warning</dt><dd>The output map can be very large if poses are far apart or cellSize is small. The function will not create a map if the estimated size exceeds reasonable limits (e.g. > 1.5 km).</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>The function will fill small holes surrounded by known cells and optionally erode noisy borders. </dd></dl>
<dlclass="deprecated"><dt><b><aclass="el"href="deprecated.html#_deprecated000027">Deprecated:</a></b></dt><dd>Use the overload taking <code>viewpoints</code>, so that ray tracing starts from the sensor and not from the base frame. </dd></dl>
<li><code>100</code> represents occupied space (obstacles).</li>
</ul>
<p>The scans are first transformed into the global map frame using the corresponding pose. Obstacles and free space are inserted using ray tracing. Optionally, unknown areas between known rays can also be filled using radial sweeping.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir"></td><tdclass="paramname">poses</td><td>A map of node IDs to 3D poses (used to transform local scans to the global frame). </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">scans</td><td>A map of node IDs to pairs of laser scans (<code><hit, no-hit></code>), each as a <code>cv::Mat</code> of type <code>CV_32FC2</code>.<ul>
<li><code>first</code>: endpoints of beams hitting obstacles (relative to base frame, not laser frame).</li>
<li><code>second</code>: endpoints of beams not hitting any obstacle (relative to base frame, not laser frame). </li>
</ul>
</td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">viewpoints</td><td>A map of node IDs to local sensor origin offsets relative to each pose (e.g., lidar offset /base_link -> /base_scan). This is used to determinate the starting point for each ray trace. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">cellSize</td><td>The size of each grid cell in meters. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">unknownSpaceFilled</td><td>If true, fills areas between known rays (fan sweeping) up to <code>scanMaxRange</code>. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">xMin</td><td>The minimum x value (in meters) of the grid origin relative to map coordinates. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">yMin</td><td>The minimum y value (in meters) of the grid origin relative to map coordinates. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">minMapSize</td><td>The minimum width and height (in meters) of the map. Ensures the output map has a minimum footprint. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">scanMaxRange</td><td>The maximum range (in meters) of the sensor. Used to limit ray tracing and padding.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A 2D occupancy grid map (<code>cv::Mat</code> of type <code>CV_8S</code>) where:<ul>
<li><code>-1</code> = unknown</li>
<li><code>0</code> = free space</li>
<li><code>100</code> = obstacle</li>
</ul>
</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>If <code>scanMaxRange <= 0</code>, map size is determined based on scan data bounds. </dd>
<dd>
Grid coordinates are calculated with padding to ensure all points fall within the map. </dd>
<dd>
This function uses ray tracing internally via the <code><aclass="el"href="namespacertabmap_1_1util3d.html#a281695150f5c02e6222d050f488a9d6b"title="Performs a 2D ray tracing operation between two points on a grid map.">rayTrace()</a></code> function. </dd></dl>
<p>Performs a 2D ray tracing operation between two points on a grid map. </p>
<p>This function draws a line from the <code>start</code> point to the <code>end</code> point on a grid (e.g., occupancy grid), marking all traversed cells as free (value = 0) unless an obstacle (value = 100) is encountered. The line follows an integer rasterization algorithm (like Bresenham’s line), accounting for steep slopes by transposing axes when needed.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">start</td><td>The starting point of the ray (2D grid coordinates). </td></tr>
<tr><tdclass="paramname">end</td><td>The ending point of the ray (2D grid coordinates). This point is clipped to the grid bounds. </td></tr>
<tr><tdclass="paramname">grid</td><td>A mutable 2D grid represented as a <code>cv::Mat</code> of signed char values. Assumes 100 denotes obstacles; 0 denotes free space. </td></tr>
<tr><tdclass="paramname">stopOnObstacle</td><td>If true, the ray trace stops upon hitting a cell marked with 100 (an obstacle).</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>If the slope of the line is steep (outside the range [-1, 1]), the algorithm swaps x and y axes for correctness.</li>
<li>The function ensures both the start and end points are within the bounds of the grid.</li>
<li>All visited cells along the path (except obstacles when <code>stopOnObstacle</code> is true) will be updated to 0 (free).</li>
<li>The grid must have type <code>CV_8SC1</code> (signed 8-bit single-channel matrix). </li>
<p>Converts an occupancy grid map (CV_8S) to a grayscale image (CV_8U). </p>
<p>This function takes a signed 8-bit occupancy grid map and produces a corresponding 8-bit unsigned grayscale image. The pixel values are mapped based on the occupancy values:</p>
<ul>
<li><code>0</code> (free space) → 178 (normal) or 254 (PGM format)</li>
<li><code>100</code> (obstacle) → 0 (black)</li>
<li><code>-2</code> (robot footprint) → 200 (normal) or 254 (PGM format)</li>
<li><code>-1</code> (unknown) → 89 (normal) or 205 (PGM format)</li>
<li><code>v > 50</code> (partial obstacle): scaled to range [0, 89]</li>
<li><code>v < 50</code> (partial free): scaled to range [89, 178]</li>
</ul>
<p>If <code>pgmFormat</code> is true, the vertical axis is flipped (for PGM format compatibility).</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">map8S</td><td>The input occupancy grid map as a CV_8S single-channel matrix. Must contain values such as -1 (unknown), 0 (free), 100 (occupied). </td></tr>
<tr><tdclass="paramname">pgmFormat</td><td>If true, output will be formatted for PGM file format (inverted Y-axis and different gray scale mapping).</td></tr>
<p>Converts a grayscale occupancy image (CV_8U) to an occupancy grid map (CV_8S). </p>
<p>This function interprets grayscale pixel values from an input image and converts them into occupancy values used in a typical occupancy grid map:</p><ul>
<li>100: Occupied</li>
<li>0: Free</li>
<li>-1: Unknown</li>
<li>-2: Free space under robot footprint (non-PGM only)</li>
</ul>
<p>The interpretation differs slightly depending on whether the input image is in PGM format (common in ROS map_server) or in standard grayscale.</p>
<p>Performs erosion on an occupancy grid map to reduce small noisy obstacles. </p>
<p>This function scans a given occupancy grid (<code>CV_8SC1</code> format) and removes obstacle cells (value <code>100</code>) that are surrounded by at least 3 empty cells (value <code>0</code>) and no adjacent unknown cells (value <code>-1</code>). These obstacles are likely noise and are converted into empty space (value <code>0</code>) in the resulting map.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">map</td><td>Input occupancy grid map of type <code>CV_8SC1</code> where:<ul>
<p>Segments ground and obstacle indices from a point cloud using surface normals and clustering. </p>
<p>This function analyzes a point cloud to identify flat surfaces (e.g., ground) and separates them from potential obstacles based on normal orientation, height constraints, and optional clustering. Optionally, flat obstacles (e.g., tables, ramps) can be segmented separately.</p>
<tr><tdclass="paramname">PointT</td><td>The type of point used in the point cloud (e.g., pcl::PointXYZ).</td></tr>
</table>
</dd>
</dl>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud</td><td>The input point cloud. </td></tr>
<tr><tdclass="paramname">indices</td><td>Optional input indices to consider from the cloud (e.g., from a prior ROI extraction). </td></tr>
<tr><tdclass="paramname">ground</td><td>Output pointer where indices corresponding to ground points will be stored. </td></tr>
<tr><tdclass="paramname">obstacles</td><td>Output pointer where indices corresponding to obstacle points will be stored. </td></tr>
<tr><tdclass="paramname">normalKSearch</td><td>Number of neighbors to use for normal estimation. </td></tr>
<tr><tdclass="paramname">groundNormalAngle</td><td>Maximum angle (in radians) between the estimated normal and the "up" direction for a surface to be considered ground. </td></tr>
<tr><tdclass="paramname">clusterRadius</td><td>The Euclidean distance threshold for clustering flat surfaces and obstacles. </td></tr>
<tr><tdclass="paramname">minClusterSize</td><td>The minimum number of points required to form a valid cluster. </td></tr>
<tr><tdclass="paramname">segmentFlatObstacles</td><td>If true, flat but non-ground surfaces (e.g., tables) are detected and optionally returned via <code>flatObstacles</code>. </td></tr>
<tr><tdclass="paramname">maxGroundHeight</td><td>Maximum Z-height for a surface to be considered ground (0 disables filtering). Note that all obstacle points under that threshold will be ignored (i.e., won't be returned in <code>obstacles</code>). </td></tr>
<tr><tdclass="paramname">flatObstacles</td><td>Optional output pointer where indices corresponding to flat obstacles will be stored (only valid if <code>segmentFlatObstacles</code> is true). </td></tr>
<tr><tdclass="paramname">viewPoint</td><td>The viewpoint to use for normal estimation (important for consistent orientation). </td></tr>
<tr><tdclass="paramname">groundNormalsUp</td><td>Threshold (between 0 and 1) used to detect and flip ground-facing normals (set to 0.0f to disable). If the Z component of a normal is less than <code>-groundNormalsUp</code> and the corresponding point is below the viewpoint, the normal will be flipped. </td></tr>
<p>Toggle a deterministic seed for OpenGV's internal RANSAC RNG. </p>
<p>OpenGV's <code>SampleConsensusProblem</code> (and its multi-camera sibling) seeds its internal <code>std::mt19937</code> from the system clock when default-constructed, which makes every <aclass="el"href="namespacertabmap_1_1util3d.html#a94321442a82f05368f8fd9c9a998284e">estimateMotion3DTo2D()</a> call non-reproducible across runs. Calling <code>setRansacDeterministicSeed(true)</code> reseeds OpenGV's RNG with the fixed value <code>12345</code> before each RANSAC pass so identical inputs always produce identical inlier sets, covariances and output transforms.</p>
<p>Intended for tests; production code should leave this off (default).</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">enable</td><td>If true, force the deterministic seed; if false (default), use OpenGV's system-clock seed.</td></tr>
<p>Estimates a 6-DOF camera transform from 3D-2D point correspondences using PnP RANSAC. </p>
<p>This function estimates the motion (transform) between two views by solving the Perspective-n-Point (PnP) problem using 3D points from one frame and their corresponding 2D keypoints in another frame. It optionally refines the result, computes covariance of the pose estimate, and handles degenerate cases.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">words3A</td><td>3D points in frame A, indexed by feature ID. </td></tr>
<tr><tdclass="paramname">words2B</td><td>2D keypoints in frame B, indexed by feature ID (shared with <code>words3A</code>). </td></tr>
<tr><tdclass="paramname">cameraModel</td><td>Intrinsic and extrinsic parameters of the camera (must be valid). </td></tr>
<tr><tdclass="paramname">minInliers</td><td>Minimum number of inliers required to accept the estimated transform. If the value is <4, it is set internally to 4. </td></tr>
<tr><tdclass="paramname">iterations</td><td>Number of RANSAC iterations for PnP. </td></tr>
<tr><tdclass="paramname">reprojError</td><td>Maximum allowed reprojection error (in pixels) to consider a point an inlier. </td></tr>
<tr><tdclass="paramname">flagsPnP</td><td>Flags to control the <code>cv::solvePnPRansac</code> behavior (e.g., <code>cv::SOLVEPNP_ITERATIVE</code>). </td></tr>
<tr><tdclass="paramname">refineIterations</td><td>Number of iterations for non-linear optimization (set to 0 to disable refinement). </td></tr>
<tr><tdclass="paramname">varianceMedianRatio</td><td>Index divisor used to select the robust variance threshold from sorted error residuals (e.g., 4 → use the 25% percentile). </td></tr>
<tr><tdclass="paramname">maxVariance</td><td>Maximum allowed median variance (linear error). Estimates with higher variance are rejected. </td></tr>
<tr><tdclass="paramname">guess</td><td>Initial guess for the camera pose (must not be null). Typically from odometry or motion model. </td></tr>
<tr><tdclass="paramname">words3B</td><td>Optional 3D points in frame B (if available). Used to better estimate 3D errors and variances. </td></tr>
<tr><tdclass="paramname">covariance</td><td>Optional output pointer for the estimated 6x6 pose covariance matrix. The matrix contains linear variance in the top-left 3x3 and angular variance in the bottom-right 3x3. </td></tr>
<tr><tdclass="paramname">matchesOut</td><td>Optional output vector of all matched IDs used (regardless of inlier status). </td></tr>
<tr><tdclass="paramname">inliersOut</td><td>Optional output vector of matched IDs that were determined to be inliers. </td></tr>
<tr><tdclass="paramname">splitLinearCovarianceComponents</td><td>Whether to split and compute variance for X, Y, Z components separately.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The estimated transformation from frame B to frame A. If estimation fails or is rejected due to variance, a null transform is returned (i.e., <code>transform.isNull()</code> will be true).</dd></dl>
<dlclass="section note"><dt>Note</dt><dd><ul>
<li>If <code>words3B</code> is provided, 3D variance is computed by comparing reprojected points to actual transformed points.</li>
<li>If <code>words3B</code> is empty, variance is estimated using reprojection error only.</li>
<li>The function assumes the camera model's local transform is known and factored into the pose estimation.</li>
<p>Estimates the 3D-to-2D motion (pose) transformation between a set of 3D points and their corresponding 2D keypoints using the OpenGV library. </p>
<p>This function uses a robust multi-camera Perspective-n-Point (PnP) algorithm to estimate the transformation from a 3D point cloud (scene A) to a set of 2D keypoints (scene B) given the corresponding camera models and initial pose guess. The method supports multiple camera models and uses RANSAC with OpenGV for outlier rejection.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">words3A</td><td>3D points in the source frame (scene A), indexed by feature ID. </td></tr>
<tr><tdclass="paramname">words2B</td><td>2D keypoints in the destination frame (scene B), indexed by feature ID. </td></tr>
<tr><tdclass="paramname">cameraModels</td><td>List of camera models (multi-camera rig setup) for the destination frame. </td></tr>
<tr><tdclass="paramname">minInliers</td><td>Minimum number of inliers required to consider the estimated transform as valid. </td></tr>
<tr><tdclass="paramname">iterations</td><td>Maximum number of RANSAC iterations. </td></tr>
<tr><tdclass="paramname">reprojError</td><td>Reprojection error threshold used by RANSAC. </td></tr>
<tr><tdclass="paramname">flagsPnP</td><td>PnP flags (not used internally). </td></tr>
<tr><tdclass="paramname">refineIterations</td><td>Number of pose refinement iterations after RANSAC (not used internally). </td></tr>
<tr><tdclass="paramname">varianceMedianRatio</td><td>Divider used to compute median-based variance from the error distribution. </td></tr>
<tr><tdclass="paramname">maxVariance</td><td>Maximum allowed variance to accept the transform. Higher values permit more noisy estimates. </td></tr>
<tr><tdclass="paramname">guess</td><td>Initial guess of the transformation. </td></tr>
<tr><tdclass="paramname">words3B</td><td>Optional 3D points in destination frame (scene B) to evaluate the covariance using 3D correspondences, otherwise covariance is estimated from reprojection errors. </td></tr>
<tr><tdclass="paramname">covariance</td><td>Optional output 6x6 covariance matrix of the estimated transform. </td></tr>
<tr><tdclass="paramname">matchesOut</td><td>Optional output: matches grouped per camera. </td></tr>
<tr><tdclass="paramname">inliersOut</td><td>Optional output: inliers grouped per camera. </td></tr>
<tr><tdclass="paramname">splitLinearCovarianceComponents</td><td>If true, linear covariance is split into separate x/y/z components.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The estimated <aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a> from scene A to scene B. Returns a null <aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a> if estimation fails or variance exceeds threshold.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function requires RTAB-Map to be built with OpenGV support.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>The function assumes all camera models have the same image width and valid intrinsic parameters.</dd></dl>
<p>Estimates the 3D-to-2D motion (pose) transformation between a set of 3D points and their corresponding 2D keypoints using the OpenGV library. </p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#a94321442a82f05368f8fd9c9a998284e"title="Estimates a 6-DOF camera transform from 3D-2D point correspondences using PnP RANSAC.">estimateMotion3DTo2D()</a>, the only difference is that output matches and inliers are combined in same vector instead of per camera </dd></dl>
<p>Estimates the 3D rigid transformation between two sets of 3D points. </p>
<p>This function matches 3D points from two frames (A and B) using their unique IDs, filters correspondences based on a minimum number of inliers and distance threshold, and estimates the 6DoF transformation using PCL's RANSAC-based method.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">words3A</td><td>A map of 3D points from the previous frame (id -> point). </td></tr>
<tr><tdclass="paramname">words3B</td><td>A map of 3D points from the current frame (id -> point). </td></tr>
<tr><tdclass="paramname">minInliers</td><td>Minimum number of inliers required to accept the transformation. </td></tr>
<tr><tdclass="paramname">inliersDistance</td><td>Maximum distance between correspondences to be considered inliers. </td></tr>
<tr><tdclass="paramname">iterations</td><td>Maximum number of RANSAC iterations. </td></tr>
<tr><tdclass="paramname">refineIterations</td><td>Number of iterations for refining the transformation after RANSAC. </td></tr>
<tr><tdclass="paramname">covariance</td><td>(Optional) Output 6x6 covariance matrix of the estimated transform. </td></tr>
<tr><tdclass="paramname">matchesOut</td><td>(Optional) Output vector of all matched point IDs (from words3A). </td></tr>
<tr><tdclass="paramname">inliersOut</td><td>(Optional) Output vector of inlier point IDs (subset of matchesOut).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a> object representing the estimated rigid body motion from frame B to A. If not enough inliers are found or the estimation fails, a null <aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a> is returned. </dd></dl>
<p>Estimates the camera pose using the PnP RANSAC algorithm and optionally refines it. </p>
<p>This function computes the rotation and translation vectors (rvec, tvec) that transform 3D object points into the camera frame, using the Perspective-n-Point (PnP) method with RANSAC for robust outlier rejection. After an initial estimation using OpenCV's <code>solvePnPRansac</code>, it optionally refines the model iteratively based on reprojection error thresholds.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">objectPoints</td><td>A vector of 3D points in the object coordinate space. </td></tr>
<tr><tdclass="paramname">imagePoints</td><td>A vector of corresponding 2D points in the image plane. </td></tr>
<tr><tdclass="paramname">cameraMatrix</td><td>The camera intrinsic matrix (3x3). </td></tr>
<tr><tdclass="paramname">useExtrinsicGuess</td><td>If true, uses the provided rvec and tvec as an initial guess. </td></tr>
<tr><tdclass="paramname">iterationsCount</td><td>The number of RANSAC iterations. </td></tr>
<tr><tdclass="paramname">reprojectionError</td><td>Maximum allowed reprojection error to classify an inlier. </td></tr>
<tr><tdclass="paramname">minInliersCount</td><td>Minimum number of inliers required to accept a model. </td></tr>
<tr><tdclass="paramname">inliers</td><td>Output vector of indices of inlier points. </td></tr>
<tr><tdclass="paramname">flags</td><td>Method for solving PnP (<code>cv::SOLVEPNP_*</code> flags). </td></tr>
<tr><tdclass="paramname">refineIterations</td><td>Number of refinement iterations after RANSAC. </td></tr>
<tr><tdclass="paramname">refineSigma</td><td>Multiplier for the reprojection error standard deviation to define adaptive inlier threshold.</td></tr>
</table>
</dd>
</dl>
<dlclass="section note"><dt>Note</dt><dd>This function uses OpenCV 3's implementation of <code>solvePnPRansac</code> for robustness. After RANSAC, the pose is optionally refined by minimizing reprojection error on inliers.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>Refinement may oscillate or terminate early if convergence is poor or the inlier set becomes unstable.</dd></dl>
<p>Estimates the rigid 3D transformation between two point clouds using SVD. </p>
<p>This function computes the transformation (rotation and translation) that best aligns <code>cloud2</code> to <code>cloud1</code> using Singular Value Decomposition (SVD) based on point correspondences. It assumes a one-to-one correspondence between points in the two clouds.</p>
<p>Internally, it uses PCL's <code>TransformationEstimationSVD</code> to compute the 4x4 transformation matrix, which is then converted to a <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code> object.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud1</td><td>Target point cloud (reference frame). </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Source point cloud to be aligned with <code>cloud1</code>. It must have the same number of points as <code>cloud1</code>, and the points should correspond to each other by index.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code> representing the rigid-body transformation from <code>cloud1</code> to <code>cloud2</code>.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function does not perform any outlier rejection or correspondence estimation— it assumes that the input clouds are already matched appropriately. </dd></dl>
<p>Estimates a rigid transformation between two point clouds using RANSAC with optional refinement. </p>
<p>This function finds a 3D rigid-body transform from <code>cloud1</code> to <code>cloud2</code> using one-to-one point correspondences. It applies a RANSAC-based outlier rejection and optionally refines the transformation with iterative model optimization.</p>
<p>It also optionally returns the inlier indices used to compute the final model and an approximate 6x6 covariance matrix of the transform.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">cloud1</td><td>Target point cloud (reference frame). Must contain at least 3 points and match <code>cloud2</code> in size. </td></tr>
<tr><tdclass="paramname">cloud2</td><td>Source point cloud to align to <code>cloud1</code>. Must be the same size as <code>cloud1</code>. </td></tr>
<tr><tdclass="paramname">inlierThreshold</td><td>Maximum Euclidean distance (in meters) between corresponding points for them to be considered inliers. </td></tr>
<tr><tdclass="paramname">iterations</td><td>Number of RANSAC iterations to perform. </td></tr>
<tr><tdclass="paramname">refineIterations</td><td>Number of refinement steps to perform after the initial RANSAC. If set to 0, no refinement is done. </td></tr>
<tr><tdclass="paramname">refineSigma</td><td>Multiplier for standard deviation used to adjust the inlier threshold during refinement. </td></tr>
<tr><tdclass="paramname">inliersOut</td><td>Optional pointer to a vector that will receive the indices of the inlier correspondences. </td></tr>
<tr><tdclass="paramname">covariance</td><td>Optional pointer to a 6x6 covariance matrix of the estimated transform (as <code>CV_64FC1</code>). Will be identity if set and no inliers are found.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code> representing the estimated pose from <code>cloud1</code> to <code>cloud2</code>. If no valid model is found, the returned transform will be identity.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>This function assumes a one-to-one correspondence between points in the two clouds (e.g., index <code>i</code> in <code>cloud1</code> corresponds to index <code>i</code> in <code>cloud2</code>). </dd>
<dd>
If fewer than 3 points are provided or point counts do not match, the identity transform is returned.</dd></dl>
<dlclass="section warning"><dt>Warning</dt><dd>Inlier refinement is sensitive to oscillation and may stop early if alternating inlier counts are detected. </dd></dl>
<p>Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting transform. </p>
<p>This function aligns the <code>cloud_source</code> to the <code>cloud_target</code> using PCL's ICP algorithm. It optionally supports 2D ICP, which constrains the estimated transformation to the XY-plane with rotation about the Z-axis.</p>
<p>The result is returned as a <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code> representing the transformation from source to target. The aligned version of the source cloud is written into <code>cloud_source_registered</code>.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir"></td><tdclass="paramname">cloud_source</td><td>The input source point cloud to align. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">cloud_target</td><td>The input target point cloud to align to. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">maxCorrespondenceDistance</td><td>Maximum distance threshold for point correspondences. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">maximumIterations</td><td>Maximum number of ICP iterations to perform. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">hasConverged</td><td>Set to true if ICP converged to a solution; false otherwise. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">cloud_source_registered</td><td>Output point cloud containing the source aligned to the target. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">epsilon</td><td>Convergence threshold for transformation changes between iterations (applied as squared value). </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">icp2D</td><td>If true, enforces 2D ICP using only XY translation and Z rotation (ignores Z and X/Y rotation).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a> The estimated transformation from <code>cloud_source</code> to <code>cloud_target</code>.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>All input points in both clouds must be finite (i.e., no NaNs or infinite values).</dd></dl>
<p>Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting transform. </p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#af9f16d681288b1f91ce6e5a8ee9f6967"title="Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting t...">util3d::icp()</a></dd></dl>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">ransacOutlierRatio</td><td>If > 0 and < 1, install a PCL RANSAC correspondence rejector with inlier threshold = ransacOutlierRatio * maxCorrespondenceDistance. 0 disables the rejector (default). </td></tr>
<p>Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric. </p>
<p>This function aligns a source point cloud to a target point cloud using PCL's point-to-plane ICP implementation with a linear least squares estimator. It returns the estimated transformation from the source to the target.</p>
<p>Optionally, if <code>icp2D</code> is true, the resulting transformation is projected to 3DoF (XY translation and rotation about Z).</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir"></td><tdclass="paramname">cloud_source</td><td>Input source point cloud with normals. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">cloud_target</td><td>Input target point cloud with normals. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">maxCorrespondenceDistance</td><td>Maximum distance for considering point correspondences. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">maximumIterations</td><td>Maximum number of ICP iterations to perform. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">hasConverged</td><td>Set to true if the ICP algorithm successfully converged. </td></tr>
<tr><tdclass="paramdir">[out]</td><tdclass="paramname">cloud_source_registered</td><td>Output cloud representing the aligned source. </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">epsilon</td><td>Convergence threshold for the transformation change (used as squared value). </td></tr>
<tr><tdclass="paramdir"></td><tdclass="paramname">icp2D</td><td>If true, the result is projected to 2D (XY + Yaw only).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>The transformation from the source to the target cloud.</dd></dl>
<dlclass="section note"><dt>Note</dt><dd>All points and normals in both input clouds must be finite (no NaNs or infinities).</dd></dl>
<p>Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric. </p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="namespacertabmap_1_1util3d.html#a6ac0f56608f1760d60eda7861b8dc303"title="Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric.">util3d::icpPointToPlane()</a></dd></dl>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">ransacOutlierRatio</td><td>If > 0 and < 1, install a PCL RANSAC correspondence rejector with inlier threshold = ransacOutlierRatio * maxCorrespondenceDistance. 0 disables the rejector (default). </td></tr>
<p>Given a set of polygons, create two indexes: polygons to neighbor polygons and vertices to polygons. </p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">polygons</td><td>the polygons to be indexed. </td></tr>
<tr><tdclass="paramname">cloudSize</td><td>the size of the cloud of the corresponding mesh to polygons (must be at least as high as the highest vertex value contained in the polygons). </td></tr>
<tr><tdclass="paramname">neighborPolygons</td><td>returned index from polygons to neighbor polygons (index size = polygons size). </td></tr>
<tr><tdclass="paramname">vertexPolygons</td><td>returned index from vertices to polygons (index size = cloudSize). </td></tr>
<p>Merge all textures in the mesh into "textureCount" textures of size "textureSize". </p><dlclass="section return"><dt>Returns</dt><dd>merged textures corresponding to new materials set in TextureMesh (height=textureSize, width=textureSize*materials) </dd></dl>
<p>Texture mesh with AliceVision's multiband texturing approach. See also <ahref="https://meshroom-manual.readthedocs.io/en/bibtex1/node-reference/nodes/Texturing.html">https://meshroom-manual.readthedocs.io/en/bibtex1/node-reference/nodes/Texturing.html</a>. </p><dlclass="params"><dt>Parameters</dt><dd>
<tr><tdclass="paramname">cloud</td><td>input Cloud of the mesh. </td></tr>
<tr><tdclass="paramname">polygons</td><td>Input polygons of the mesh. </td></tr>
<tr><tdclass="paramname">cameraPoses</td><td>Poses of the cameras. </td></tr>
<tr><tdclass="paramname">vertexToPixels</td><td>Output from <code>createTextureMesh()</code>. </td></tr>
<tr><tdclass="paramname">images</td><td>Images corresponding to cameraPoses, raw or compressed, can be empty if memory or dbDriver should be used. </td></tr>
<tr><tdclass="paramname">cameraModels</td><td><aclass="el"href="classrtabmap_1_1Camera.html">Camera</a> calibrations corresponding to cameraPoses. </td></tr>
<tr><tdclass="paramname">memory</td><td>Should be set if images and dbDriver are not set. </td></tr>
<tr><tdclass="paramname">dbDriver</td><td>Should be set if images and memory are not set. </td></tr>
<tr><tdclass="paramname">textureDownscale</td><td>Downscaling to 4 or 8 will reduce the texture quality but speed up the computation time. Set Texture Downscale to 1 instead of 2 to get the maximum possible resolution with the resolution of your images. The output texture size will be divided by this value, e.g., with texture size of 8192 and downscale value of 2, the output will be 4096. </td></tr>
<tr><tdclass="paramname">nbContrib</td><td>number of contributions per frequency band for the multi-band blending (should be 4 values) </td></tr>
<tr><tdclass="paramname">textureFormat</td><td>Output texture format: "png" or "jpg". </td></tr>
<tr><tdclass="paramname">gains</td><td>Optional output of <code><aclass="el"href="namespacertabmap_1_1util3d.html#aeec8dd0024231c36c089340895609238">mergeTextures()</a></code>. </td></tr>
<tr><tdclass="paramname">blendingGains</td><td>Optional output of <code><aclass="el"href="namespacertabmap_1_1util3d.html#aeec8dd0024231c36c089340895609238">mergeTextures()</a></code>. </td></tr>
<tr><tdclass="paramname">contrastValues</td><td>Optional output of <code><aclass="el"href="namespacertabmap_1_1util3d.html#aeec8dd0024231c36c089340895609238">mergeTextures()</a></code>. </td></tr>
<tr><tdclass="paramname">gainRGB</td><td>Apply gain compensation on each RGB channels separately, otherwise it is apply equally to all channels. </td></tr>
<tr><tdclass="paramname">unwrapMethod</td><td>Method to unwrap input mesh if it does not have UV coordinates 0=Basic (> 600k faces) fast and simple. Can generate multiple atlases 2=LSCM (<= 600k faces): optimize space. Generates one atlas 1=ABF (<= 300k faces): optimize space and stretch. Generates one atlas. </td></tr>
<tr><tdclass="paramname">fillHoles</td><td>Fill Texture holes with plausible values True/False. </td></tr>
<tr><tdclass="paramname">padding</td><td>Texture edge padding size in pixel (0-100). </td></tr>
<tr><tdclass="paramname">bestScoreThreshold</td><td>0.0 to disable filtering based on threshold to relative best score (0.0-1.0). </td></tr>
<tr><tdclass="paramname">angleHardThreshold</td><td>0.0 to disable angle hard threshold filtering (0.0, 180.0). </td></tr>
<tr><tdclass="paramname">forceVisibleByAllVertices</td><td>Triangle visibility is based on the union of vertices visibility. </td></tr>
<p><aclass="el"href="namespacertabmap_1_1util3d.html#ab138227ab6c0511088e846b2276e7afc">intersectRayTriangle()</a>: find the 3D intersection of a ray with a triangle Input: p = origin of the ray dir = direction of the ray v0 = point 0 of the triangle v1 = point 1 of the triangle v2 = point 2 of the triangle Output: distance = distance from origin along ray direction normal = normal of the triangle (not normalized) Return: true = intersect in unique point inside the triangle</p>
<p>Intersection point can be computed with "I = p + dir*distance"</p>
<p>Copyright 2001 softSurfer, 2012 Dan Sunday This code may be freely used and modified for any purpose providing that this copyright notice is included with it. SoftSurfer makes no warranty for this code, and cannot be held liable for any real or imagined damage resulting from its use. Users of this code must verify correctness for their application.</p>
<p>Applies a 3D transform to all points (and normals if present) in a <aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>. </p>
<p>This function transforms each point in the input <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> using the specified <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code>. The transformation is applied on a cloned copy of the scan data, preserving the original. It supports both 2D and 3D scans, and if normals are present, they are also properly transformed.</p>
<p>The transformation is only applied if it is neither null nor the identity transform.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramname">laserScan</td><td>The input <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> object containing scan data to be transformed. </td></tr>
<tr><tdclass="paramname">transform</td><td>A <code><aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a></code> representing the spatial transformation to apply (translation + rotation). Can be 3DoF or 6DoF depending on the scan dimensionality.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd>A new <code><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a></code> object with transformed points (and optionally normals), and the same metadata such as range limits, angle information, format, and local transform as the input scan.</dd></dl>
<h3>Behavior:</h3>
<ul>
<li>If the transform is null or identity, the scan is returned unchanged.</li>
<li>If the scan has normals (e.g., format is <code>kXYZNormal</code>, <code>kXYZINormal</code>, etc.), both positions and normals are transformed.</li>
<li>If the scan has no normals, only point positions are transformed.</li>
<li>Angle-based scans (2D with valid angle increment) retain angular properties in the returned object.</li>
<li>The <code>localTransform</code> of the original scan is preserved in the returned scan.</li>
</ul>
<h3>Supported Formats:</h3>
<p>This function works with all valid formats defined by <code><aclass="el"href="classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007"title="Enumeration of possible formats for laser scan data.">LaserScan::Format</a></code>, including:</p><ul>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="classrtabmap_1_1LaserScan.html"title="Represents 2D or 3D laser scan data with support for multiple point data formats.">LaserScan</a>, <aclass="el"href="classrtabmap_1_1Transform.html"title="Represents a 3D rigid body transformation (rotation + translation).">Transform</a>, <aclass="el"href="group__TransformPoint.html#ga88b4f827a105254bf08bdae73cebdbe9"title="Transforms cv::Point3f point type.">util3d::transformPoint()</a></dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<divid="nav-path"class="navpath"><!-- id is needed for treeview function! -->
<liclass="footer">Generated by <ahref="https://www.doxygen.org/index.html"><imgclass="footer"src="doxygen.svg"width="104"height="31"alt="doxygen"/></a> 1.9.8 </li>