RTAB-Map 0.23.10
Loading...
Searching...
No Matches
util2d.h
1/*
2Copyright (c) 2010-2025, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the Universite de Sherbrooke nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28#ifndef UTIL2D_H_
29#define UTIL2D_H_
30
31#include <rtabmap/core/rtabmap_core_export.h>
32
33#include <opencv2/core/core.hpp>
34#include <rtabmap/core/Transform.h>
35#include <rtabmap/core/Parameters.h>
36#include <rtabmap/core/CameraModel.h>
37#include <vector>
38
39namespace rtabmap
40{
41
45namespace util2d
46{
47
66float RTABMAP_CORE_EXPORT ssd(const cv::Mat & windowLeft, const cv::Mat & windowRight);
67
86float RTABMAP_CORE_EXPORT sad(const cv::Mat & windowLeft, const cv::Mat & windowRight);
87
120std::vector<cv::Point2f> RTABMAP_CORE_EXPORT calcStereoCorrespondences(
121 const cv::Mat & leftImage,
122 const cv::Mat & rightImage,
123 const std::vector<cv::Point2f> & leftCorners,
124 std::vector<unsigned char> & status,
125 cv::Size winSize = cv::Size(6,3),
126 int maxLevel = 3,
127 int iterations = 5,
128 float minDisparity = 0.0f,
129 float maxDisparity = 64.0f,
130 bool ssdApproach = true);
131
171void RTABMAP_CORE_EXPORT calcOpticalFlowPyrLKStereo( cv::InputArray _prevImg, cv::InputArray _nextImg,
172 cv::InputArray _prevPts, cv::InputOutputArray _nextPts,
173 cv::OutputArray _status, cv::OutputArray _err,
174 cv::Size winSize = cv::Size(15,3), int maxLevel = 3,
175 cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01),
176 int flags = 0, double minEigThreshold = 1e-4 );
177
207cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoImages(
208 const cv::Mat & leftImage,
209 const cv::Mat & rightImage,
210 const ParametersMap & parameters = ParametersMap());
211
232cv::Mat RTABMAP_CORE_EXPORT depthFromDisparity(const cv::Mat & disparity,
233 float fx, float baseline,
234 int type = CV_32FC1); // CV_32FC1 or CV_16UC1
235
258cv::Mat RTABMAP_CORE_EXPORT depthFromStereoImages(
259 const cv::Mat & leftImage,
260 const cv::Mat & rightImage,
261 const std::vector<cv::Point2f> & leftCorners,
262 float fx,
263 float baseline,
264 int flowWinSize = 9,
265 int flowMaxLevel = 4,
266 int flowIterations = 20,
267 double flowEps = 0.02);
268
293cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoCorrespondences(
294 const cv::Size & disparitySize,
295 const std::vector<cv::Point2f> & leftCorners,
296 const std::vector<cv::Point2f> & rightCorners,
297 const std::vector<unsigned char> & mask);
298
321cv::Mat RTABMAP_CORE_EXPORT depthFromStereoCorrespondences(
322 const cv::Mat & leftImage,
323 const std::vector<cv::Point2f> & leftCorners,
324 const std::vector<cv::Point2f> & rightCorners,
325 const std::vector<unsigned char> & mask,
326 float fx, float baseline);
327
349cv::Mat RTABMAP_CORE_EXPORT cvtDepthFromFloat(const cv::Mat & depth32F);
350
368cv::Mat RTABMAP_CORE_EXPORT cvtDepthToFloat(const cv::Mat & depth16U);
369
395float RTABMAP_CORE_EXPORT getDepth(
396 const cv::Mat & depthImage,
397 float x, float y,
398 bool smoothing,
399 float depthErrorRatio = 0.02f, //ratio
400 bool estWithNeighborsIfNull = false);
401
418cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat & image, const std::string & roiRatios);
419
428cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Size & imageSize, const std::string & roiRatios);
429
438cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat & image, const std::vector<float> & roiRatios);
439
449cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Size & imageSize, const std::vector<float> & roiRatios);
450
// end of RoiComputation group
452
467cv::Mat RTABMAP_CORE_EXPORT decimate(const cv::Mat & image, int d);
468
485cv::Mat RTABMAP_CORE_EXPORT interpolate(const cv::Mat & image, int factor, float depthErrorRatio = 0.02f);
486
510cv::Mat RTABMAP_CORE_EXPORT registerDepth(
511 const cv::Mat & depth,
512 const cv::Mat & depthK,
513 const cv::Size & colorSize,
514 const cv::Mat & colorK,
515 const rtabmap::Transform & transform);
516cv::Mat RTABMAP_CORE_EXPORT registerDepth(
517 const cv::Mat & depth,
518 const cv::Mat & confidence,
519 const cv::Mat & depthK,
520 const cv::Size & colorSize,
521 const cv::Mat & colorK,
522 const rtabmap::Transform & transform,
523 cv::Mat & registeredConfidence);
524
542cv::Mat RTABMAP_CORE_EXPORT fillDepthHoles(
543 const cv::Mat & depth,
544 int maximumHoleSize = 1,
545 float errorRatio = 0.02f);
546
574void RTABMAP_CORE_EXPORT fillRegisteredDepthHoles(
575 cv::Mat & depthRegistered,
576 bool vertical,
577 bool horizontal,
578 bool fillDoubleHoles = false);
579
603cv::Mat RTABMAP_CORE_EXPORT fastBilateralFiltering(
604 const cv::Mat & depth,
605 float sigmaS = 15.0f,
606 float sigmaR = 0.05f,
607 bool earlyDivision = false);
608
624void RTABMAP_CORE_EXPORT depthBleedingFiltering(
625 cv::Mat & depth,
626 float maxDepthError);
627
649cv::Mat RTABMAP_CORE_EXPORT brightnessAndContrastAuto(
650 const cv::Mat & src,
651 const cv::Mat & mask,
652 float clipLowHistPercent=0,
653 float clipHighHistPercent=0,
654 float * alphaOut = 0,
655 float * betaOut = 0);
656
675cv::Mat RTABMAP_CORE_EXPORT exposureFusion(
676 const std::vector<cv::Mat> & images);
677
696void RTABMAP_CORE_EXPORT HSVtoRGB( float *r, float *g, float *b, float h, float s, float v );
697
717void RTABMAP_CORE_EXPORT NMS(
718 const std::vector<cv::KeyPoint> & ptsIn,
719 const cv::Mat & descriptorsIn,
720 std::vector<cv::KeyPoint> & ptsOut,
721 cv::Mat & descriptorsOut,
722 int dist_thresh, int img_width, int img_height);
723
752std::vector<int> RTABMAP_CORE_EXPORT SSC(
753 const std::vector<cv::KeyPoint> & keypoints,
754 int maxKeypoints,
755 float tolerance,
756 int cols,
757 int rows,
758 const std::vector<int> & indx = {});
759
784bool RTABMAP_CORE_EXPORT rotateImagesUpsideUpIfNecessary(
785 CameraModel & model,
786 cv::Mat & rgb,
787 cv::Mat & depth);
788
789} // namespace util2d
790} // namespace rtabmap
791
792#endif /* UTIL2D_H_ */
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat &image, const std::string &roiRatios)
Computes a region of interest (ROI) in the image using string-defined ratios.
cv::Mat RTABMAP_CORE_EXPORT fastBilateralFiltering(const cv::Mat &depth, float sigmaS=15.0f, float sigmaR=0.05f, bool earlyDivision=false)
Applies a 2D fast bilateral filter to a depth image.
cv::Mat RTABMAP_CORE_EXPORT decimate(const cv::Mat &image, int d)
Downsamples an image by a given decimation factor.
cv::Mat RTABMAP_CORE_EXPORT cvtDepthToFloat(const cv::Mat &depth16U)
Converts a 16-bit unsigned depth image (in millimeters) to a 32-bit float depth image (in meters).
cv::Mat RTABMAP_CORE_EXPORT depthFromDisparity(const cv::Mat &disparity, float fx, float baseline, int type=CV_32FC1)
Converts a disparity map to a depth map using stereo camera parameters.
bool RTABMAP_CORE_EXPORT rotateImagesUpsideUpIfNecessary(CameraModel &model, cv::Mat &rgb, cv::Mat &depth)
Rotates the input RGB and depth images to make them appear upright based on the camera's roll angle.
float RTABMAP_CORE_EXPORT ssd(const cv::Mat &windowLeft, const cv::Mat &windowRight)
Computes the Sum of Squared Differences (SSD) between two image patches.
void RTABMAP_CORE_EXPORT calcOpticalFlowPyrLKStereo(cv::InputArray _prevImg, cv::InputArray _nextImg, cv::InputArray _prevPts, cv::InputOutputArray _nextPts, cv::OutputArray _status, cv::OutputArray _err, cv::Size winSize=cv::Size(15, 3), int maxLevel=3, cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4)
Computes sparse optical flow using a pyramidal Lucas-Kanade method constrained to the x-axis.
cv::Mat RTABMAP_CORE_EXPORT registerDepth(const cv::Mat &depth, const cv::Mat &depthK, const cv::Size &colorSize, const cv::Mat &colorK, const rtabmap::Transform &transform)
Registers a depth image to a different camera frame (typically RGB).
float RTABMAP_CORE_EXPORT getDepth(const cv::Mat &depthImage, float x, float y, bool smoothing, float depthErrorRatio=0.02f, bool estWithNeighborsIfNull=false)
Retrieves a depth value from a depth image at a subpixel coordinate.
float RTABMAP_CORE_EXPORT sad(const cv::Mat &windowLeft, const cv::Mat &windowRight)
Computes the Sum of Absolute Differences (SAD) between two image patches.
cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoCorrespondences(const cv::Size &disparitySize, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask)
Computes a disparity map from stereo correspondences between two images.
std::vector< cv::Point2f > RTABMAP_CORE_EXPORT calcStereoCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status, cv::Size winSize=cv::Size(6, 3), int maxLevel=3, int iterations=5, float minDisparity=0.0f, float maxDisparity=64.0f, bool ssdApproach=true)
Computes stereo correspondences between left and right images using a pyramidal window-based matching...
cv::Mat RTABMAP_CORE_EXPORT cvtDepthFromFloat(const cv::Mat &depth32F)
Converts a 32-bit float depth image (in meters) to a 16-bit unsigned depth image (in millimeters).
void RTABMAP_CORE_EXPORT depthBleedingFiltering(cv::Mat &depth, float maxDepthError)
Filters out depth bleeding artifacts in a depth image.
cv::Mat RTABMAP_CORE_EXPORT brightnessAndContrastAuto(const cv::Mat &src, const cv::Mat &mask, float clipLowHistPercent=0, float clipHighHistPercent=0, float *alphaOut=0, float *betaOut=0)
Automatic brightness and contrast optimization with optional histogram clipping.
std::vector< int > RTABMAP_CORE_EXPORT SSC(const std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, float tolerance, int cols, int rows, const std::vector< int > &indx={})
Applies the SSC (Suppression via Square Covering) algorithm to spatially select keypoints.
cv::Mat RTABMAP_CORE_EXPORT depthFromStereoImages(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, float fx, float baseline, int flowWinSize=9, int flowMaxLevel=4, int flowIterations=20, double flowEps=0.02)
Computes a depth map from stereo image pairs using optical flow tracking.
void RTABMAP_CORE_EXPORT NMS(const std::vector< cv::KeyPoint > &ptsIn, const cv::Mat &descriptorsIn, std::vector< cv::KeyPoint > &ptsOut, cv::Mat &descriptorsOut, int dist_thresh, int img_width, int img_height)
Applies Non-Maximum Suppression (NMS) to a set of keypoints.
void RTABMAP_CORE_EXPORT HSVtoRGB(float *r, float *g, float *b, float h, float s, float v)
Converts a color from HSV (Hue, Saturation, Value) to RGB.
cv::Mat RTABMAP_CORE_EXPORT exposureFusion(const std::vector< cv::Mat > &images)
Performs exposure fusion on a set of input images.
cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoImages(const cv::Mat &leftImage, const cv::Mat &rightImage, const ParametersMap &parameters=ParametersMap())
Computes the disparity map from a pair of stereo images.
cv::Mat RTABMAP_CORE_EXPORT depthFromStereoCorrespondences(const cv::Mat &leftImage, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask, float fx, float baseline)
Computes a sparse depth map from corresponding stereo feature points.
cv::Mat RTABMAP_CORE_EXPORT fillDepthHoles(const cv::Mat &depth, int maximumHoleSize=1, float errorRatio=0.02f)
Fills holes in the depth image using linear interpolation.
cv::Mat RTABMAP_CORE_EXPORT interpolate(const cv::Mat &image, int factor, float depthErrorRatio=0.02f)
Upsamples a depth image using bilinear interpolation with depth consistency check.
void RTABMAP_CORE_EXPORT fillRegisteredDepthHoles(cv::Mat &depthRegistered, bool vertical, bool horizontal, bool fillDoubleHoles=false)
Fill holes in a registered depth image using linear interpolation.