55 lines
1.7 KiB
C++
Executable File
55 lines
1.7 KiB
C++
Executable File
#ifndef OPENCV_TWIST_HPP
|
|
#define OPENCV_TWIST_HPP
|
|
|
|
#include "opencv2/core.hpp"
|
|
|
|
namespace cv
|
|
{
|
|
namespace detail
|
|
{
|
|
inline namespace tracking
|
|
{
|
|
//! @addtogroup tracking_detail
|
|
//! @{
|
|
|
|
/**
|
|
* @brief Compute the camera twist from a set of 2D pixel locations, their
|
|
* velocities, depth values and intrinsic parameters of the camera. The pixel
|
|
* velocities are usually obtained from optical flow algorithms, both dense and
|
|
* sparse flow can be used to compute the flow between images and \p duv computed by
|
|
* dividing the flow by the time interval between the images.
|
|
*
|
|
* @param uv 2xN matrix of 2D pixel locations
|
|
* @param duv 2Nx1 matrix of 2D pixel velocities
|
|
* @param depths 1xN matrix of depth values
|
|
* @param K 3x3 camera intrinsic matrix
|
|
*
|
|
* @return cv::Vec6d 6x1 camera twist
|
|
*/
|
|
CV_EXPORTS cv::Vec6d computeTwist(const cv::Mat& uv, const cv::Mat& duv, const cv::Mat& depths,
|
|
const cv::Mat& K);
|
|
|
|
/**
|
|
* @brief Compute the interaction matrix ( @cite Hutchinson1996ATO @cite chaumette:inria-00350283
|
|
* @cite chaumette:inria-00350638 ) for a set of 2D pixels. This is usually
|
|
* used in visual servoing applications to command a robot to move at desired pixel
|
|
* locations/velocities. By inverting this matrix, one can estimate camera spatial
|
|
* velocity i.e., the twist.
|
|
*
|
|
* @param uv 2xN matrix of 2D pixel locations
|
|
* @param depths 1xN matrix of depth values
|
|
* @param K 3x3 camera intrinsic matrix
|
|
* @param J 2Nx6 interaction matrix
|
|
*
|
|
*/
|
|
CV_EXPORTS void computeInteractionMatrix(const cv::Mat& uv, const cv::Mat& depths, const cv::Mat& K,
|
|
cv::Mat& J);
|
|
|
|
//! @}
|
|
|
|
} // namespace tracking
|
|
} // namespace detail
|
|
} // namespace cv
|
|
|
|
#endif
|