2012-01-19 10:43:13 +01:00
Images Warping
==============
.. highlight :: cpp
detail::RotationWarper
----------------------
.. ocv:class :: detail::RotationWarper
2012-01-26 13:44:32 +01:00
Rotation-only model image warper interface. ::
2012-01-19 10:43:13 +01:00
class CV_EXPORTS RotationWarper
{
public:
virtual ~RotationWarper() {}
virtual Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R) = 0;
virtual Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap) = 0;
virtual Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,
Mat &dst) = 0;
2012-05-28 16:36:15 +02:00
2012-01-19 10:43:13 +01:00
virtual void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,
Size dst_size, Mat &dst) = 0;
virtual Rect warpRoi(Size src_size, const Mat &K, const Mat &R) = 0;
};
2012-01-26 13:44:32 +01:00
detail::RotationWarper::warpPoint
---------------------------------
Projects the image point.
.. ocv:function :: Point2f detail::RotationWarper::warpPoint(const Point2f &pt, const Mat &K, const Mat &R)
:param pt: Source point
2012-05-28 16:36:15 +02:00
2012-01-26 13:44:32 +01:00
:param K: Camera intrinsic parameters
:param R: Camera rotation matrix
:return: Projected point
detail::RotationWarper::buildMaps
---------------------------------
Builds the projection maps according to the given camera data.
.. ocv:function :: Rect detail::RotationWarper::buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)
:param src_size: Source image size
2012-05-28 16:36:15 +02:00
2012-01-26 13:44:32 +01:00
:param K: Camera intrinsic parameters
:param R: Camera rotation matrix
:param xmap: Projection map for the x axis
:param ymap: Projection map for the y axis
:return: Projected image minimum bounding box
detail::RotationWarper::warp
----------------------------
Projects the image.
2012-05-28 22:11:38 +02:00
.. ocv:function :: Point detail::RotationWarper::warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode, Mat &dst)
2012-01-26 13:44:32 +01:00
:param src: Source image
2012-05-28 16:36:15 +02:00
2012-01-26 13:44:32 +01:00
:param K: Camera intrinsic parameters
:param R: Camera rotation matrix
:param interp_mode: Interpolation mode
:param border_mode: Border extrapolation mode
:param dst: Projected image
:return: Project image top-left corner
detail::RotationWarper::warpBackward
------------------------------------
Projects the image backward.
.. ocv:function :: void detail::RotationWarper::warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode, Size dst_size, Mat &dst)
:param src: Projected image
:param K: Camera intrinsic parameters
:param R: Camera rotation matrix
:param interp_mode: Interpolation mode
:param border_mode: Border extrapolation mode
:param dst_size: Backward-projected image size
2012-03-29 10:07:57 +02:00
:param dst: Backward-projected image
2012-01-26 13:44:32 +01:00
detail::RotationWarper::warpRoi
-------------------------------
.. ocv:function :: Rect detail::RotationWarper::warpRoi(Size src_size, const Mat &K, const Mat &R)
:param src_size: Source image bounding box
2012-05-28 16:36:15 +02:00
2012-01-26 13:44:32 +01:00
:param K: Camera intrinsic parameters
:param R: Camera rotation matrix
:return: Projected image minimum bounding box
detail::ProjectorBase
---------------------
.. ocv:struct :: detail::ProjectorBase
Base class for warping logic implementation. ::
struct CV_EXPORTS ProjectorBase
{
2012-05-28 16:36:15 +02:00
void setCameraParams(const Mat &K = Mat::eye(3, 3, CV_32F),
const Mat &R = Mat::eye(3, 3, CV_32F),
2012-01-26 13:44:32 +01:00
const Mat &T = Mat::zeros(3, 1, CV_32F));
float scale;
float k[9];
float rinv[9];
float r_kinv[9];
float k_rinv[9];
float t[3];
};
detail::RotationWarperBase
--------------------------
.. ocv:class :: detail::RotationWarperBase
Base class for rotation-based warper using a `detail::ProjectorBase`_ derived class. ::
template <class P>
class CV_EXPORTS RotationWarperBase : public RotationWarper
2012-05-28 16:36:15 +02:00
{
2012-01-26 13:44:32 +01:00
public:
Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R);
2012-05-28 16:36:15 +02:00
2012-01-26 13:44:32 +01:00
Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap);
Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,
Mat &dst);
void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,
Size dst_size, Mat &dst);
Rect warpRoi(Size src_size, const Mat &K, const Mat &R);
protected:
// Detects ROI of the destination image. It's correct for any projection.
virtual void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);
// Detects ROI of the destination image by walking over image border.
// Correctness for any projection isn't guaranteed.
void detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br);
P projector_;
};
2012-01-19 10:43:13 +01:00
detail::PlaneWarper
-------------------
2012-05-29 16:51:59 +02:00
.. ocv:class :: detail::PlaneWarper : public detail::RotationWarperBase<PlaneProjector>
2012-01-19 10:43:13 +01:00
Warper that maps an image onto the z = 1 plane. ::
class CV_EXPORTS PlaneWarper : public RotationWarperBase<PlaneProjector>
{
public:
PlaneWarper(float scale = 1.f) { projector_.scale = scale; }
void setScale(float scale) { projector_.scale = scale; }
Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R, const Mat &T);
Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, Mat &xmap, Mat &ymap);
Point warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,
Mat &dst);
Rect warpRoi(Size src_size, const Mat &K, const Mat &R, const Mat &T);
protected:
void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);
};
.. seealso :: :ocv:class: `detail::RotationWarper`
2012-01-27 08:40:23 +01:00
detail::PlaneWarper::PlaneWarper
--------------------------------
Construct an instance of the plane warper class.
.. ocv:function :: void detail::PlaneWarper::PlaneWarper(float scale = 1.f)
:param scale: Projected image scale multiplier
2012-01-19 10:43:13 +01:00
detail::SphericalWarper
-----------------------
2012-05-29 16:51:59 +02:00
.. ocv:class :: detail::SphericalWarper : public detail::RotationWarperBase<SphericalProjector>
2012-01-19 10:43:13 +01:00
Warper that maps an image onto the unit sphere located at the origin. ::
class CV_EXPORTS SphericalWarper : public RotationWarperBase<SphericalProjector>
{
public:
SphericalWarper(float scale) { projector_.scale = scale; }
protected:
void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);
};
.. seealso :: :ocv:class: `detail::RotationWarper`
2012-01-27 08:40:23 +01:00
detail::SphericalWarper::SphericalWarper
----------------------------------------
Construct an instance of the spherical warper class.
.. ocv:function :: void detail::SphericalWarper::SphericalWarper(float scale)
:param scale: Projected image scale multiplier
2012-05-28 16:36:15 +02:00
2012-01-19 10:43:13 +01:00
detail::CylindricalWarper
-------------------------
2012-05-29 16:51:59 +02:00
.. ocv:class :: detail::CylindricalWarper : public detail::RotationWarperBase<CylindricalProjector>
2012-01-19 10:43:13 +01:00
Warper that maps an image onto the x*x + z* z = 1 cylinder. ::
2012-05-28 16:36:15 +02:00
2012-01-19 10:43:13 +01:00
class CV_EXPORTS CylindricalWarper : public RotationWarperBase<CylindricalProjector>
{
public:
CylindricalWarper(float scale) { projector_.scale = scale; }
protected:
void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)
2012-05-28 16:36:15 +02:00
{
RotationWarperBase<CylindricalProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);
2012-01-19 10:43:13 +01:00
}
};
.. seealso :: :ocv:class: `detail::RotationWarper`
2012-01-27 08:40:23 +01:00
detail::CylindricalWarper::CylindricalWarper
--------------------------------------------
Construct an instance of the cylindrical warper class.
.. ocv:function :: void detail::CylindricalWarper::CylindricalWarper(float scale)
:param scale: Projected image scale multiplier