parent
9c1ec1ce84
commit
69b670bdaa
8 changed files with 426 additions and 2 deletions
@ -0,0 +1,33 @@ |
|||||||
|
Autocalibration |
||||||
|
=============== |
||||||
|
|
||||||
|
.. highlight:: cpp |
||||||
|
|
||||||
|
detail::focalsFromHomography |
||||||
|
---------------------------- |
||||||
|
Tries to estimate focal lengths from the given homography under the assumption that the camera undergoes rotations around its centre only. |
||||||
|
|
||||||
|
.. ocv:function:: void focalsFromHomography(const Mat &H, double &f0, double &f1, bool &f0_ok, bool &f1_ok) |
||||||
|
|
||||||
|
:param H: Homography. |
||||||
|
|
||||||
|
:param f0: Estimated focal length along X axis. |
||||||
|
|
||||||
|
:param f1: Estimated focal length along Y axis. |
||||||
|
|
||||||
|
:param f0_ok: True, if f0 was estimated successfully, false otherwise. |
||||||
|
|
||||||
|
:param f1_ok: True, if f1 was estimated successfully, false otherwise. |
||||||
|
|
||||||
|
detail::estimateFocal |
||||||
|
--------------------- |
||||||
|
Estimates focal lengths for each given camera. |
||||||
|
|
||||||
|
.. ocv:function:: void estimateFocal(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches, std::vector<double> &focals) |
||||||
|
|
||||||
|
:param features: Features of images. |
||||||
|
|
||||||
|
:param pairwise_matches: Matches between all images pairs. |
||||||
|
|
||||||
|
:param focals: Estimated focal lengths for each camera. |
||||||
|
|
@ -0,0 +1,86 @@ |
|||||||
|
Image Blenders |
||||||
|
============== |
||||||
|
|
||||||
|
.. highlight:: cpp |
||||||
|
|
||||||
|
detail::Blender |
||||||
|
--------------- |
||||||
|
.. ocv:class:: detail::Blender |
||||||
|
|
||||||
|
Base class for all blenders. :: |
||||||
|
|
||||||
|
class CV_EXPORTS Blender |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual ~Blender() {} |
||||||
|
|
||||||
|
enum { NO, FEATHER, MULTI_BAND }; |
||||||
|
static Ptr<Blender> createDefault(int type, bool try_gpu = false); |
||||||
|
|
||||||
|
void prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes); |
||||||
|
virtual void prepare(Rect dst_roi); |
||||||
|
virtual void feed(const Mat &img, const Mat &mask, Point tl); |
||||||
|
virtual void blend(Mat &dst, Mat &dst_mask); |
||||||
|
|
||||||
|
protected: |
||||||
|
Mat dst_, dst_mask_; |
||||||
|
Rect dst_roi_; |
||||||
|
}; |
||||||
|
|
||||||
|
detail::FeatherBlender |
||||||
|
---------------------- |
||||||
|
.. ocv:class:: detail::FeatherBlender |
||||||
|
|
||||||
|
Simple blender which mixes images at its borders. :: |
||||||
|
|
||||||
|
class CV_EXPORTS FeatherBlender : public Blender |
||||||
|
{ |
||||||
|
public: |
||||||
|
FeatherBlender(float sharpness = 0.02f) { setSharpness(sharpness); } |
||||||
|
|
||||||
|
float sharpness() const { return sharpness_; } |
||||||
|
void setSharpness(float val) { sharpness_ = val; } |
||||||
|
|
||||||
|
void prepare(Rect dst_roi); |
||||||
|
void feed(const Mat &img, const Mat &mask, Point tl); |
||||||
|
void blend(Mat &dst, Mat &dst_mask); |
||||||
|
|
||||||
|
// Creates weight maps for fixed set of source images by their masks and top-left corners. |
||||||
|
// Final image can be obtained by simple weighting of the source images. |
||||||
|
Rect createWeightMaps(const std::vector<Mat> &masks, const std::vector<Point> &corners, |
||||||
|
std::vector<Mat> &weight_maps); |
||||||
|
|
||||||
|
private: |
||||||
|
float sharpness_; |
||||||
|
Mat weight_map_; |
||||||
|
Mat dst_weight_map_; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::Blender` |
||||||
|
|
||||||
|
detail::MultiBandBlender |
||||||
|
------------------------ |
||||||
|
.. ocv:class:: detail::MultiBandBlender |
||||||
|
|
||||||
|
Blender which uses multi-band blending algorithm (see [BA83]_). :: |
||||||
|
|
||||||
|
class CV_EXPORTS MultiBandBlender : public Blender |
||||||
|
{ |
||||||
|
public: |
||||||
|
MultiBandBlender(int try_gpu = false, int num_bands = 5); |
||||||
|
int numBands() const { return actual_num_bands_; } |
||||||
|
void setNumBands(int val) { actual_num_bands_ = val; } |
||||||
|
|
||||||
|
void prepare(Rect dst_roi); |
||||||
|
void feed(const Mat &img, const Mat &mask, Point tl); |
||||||
|
void blend(Mat &dst, Mat &dst_mask); |
||||||
|
|
||||||
|
private: |
||||||
|
int actual_num_bands_, num_bands_; |
||||||
|
std::vector<Mat> dst_pyr_laplace_; |
||||||
|
std::vector<Mat> dst_band_weights_; |
||||||
|
Rect dst_roi_final_; |
||||||
|
bool can_use_gpu_; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::Blender` |
@ -0,0 +1,84 @@ |
|||||||
|
Exposure Compensation |
||||||
|
===================== |
||||||
|
|
||||||
|
.. highlight:: cpp |
||||||
|
|
||||||
|
detail::ExposureCompensation |
||||||
|
---------------------------- |
||||||
|
.. ocv:class:: detail::ExposureCompensation |
||||||
|
|
||||||
|
Base class for all exposure compensators. :: |
||||||
|
|
||||||
|
class CV_EXPORTS ExposureCompensator |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual ~ExposureCompensator() {} |
||||||
|
|
||||||
|
enum { NO, GAIN, GAIN_BLOCKS }; |
||||||
|
static Ptr<ExposureCompensator> createDefault(int type); |
||||||
|
|
||||||
|
void feed(const std::vector<Point> &corners, const std::vector<Mat> &images, |
||||||
|
const std::vector<Mat> &masks); |
||||||
|
virtual void feed(const std::vector<Point> &corners, const std::vector<Mat> &images, |
||||||
|
const std::vector<std::pair<Mat,uchar> > &masks) = 0; |
||||||
|
virtual void apply(int index, Point corner, Mat &image, const Mat &mask) = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
detail::NoExposureCompensator |
||||||
|
----------------------------- |
||||||
|
.. ocv:class:: detail::NoExposureCompensator |
||||||
|
|
||||||
|
Stub exposure compensator which does nothing. :: |
||||||
|
|
||||||
|
class CV_EXPORTS NoExposureCompensator : public ExposureCompensator |
||||||
|
{ |
||||||
|
public: |
||||||
|
void feed(const std::vector<Point> &/*corners*/, const std::vector<Mat> &/*images*/, |
||||||
|
const std::vector<std::pair<Mat,uchar> > &/*masks*/) {}; |
||||||
|
void apply(int /*index*/, Point /*corner*/, Mat &/*image*/, const Mat &/*mask*/) {}; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::ExposureCompensation` |
||||||
|
|
||||||
|
detail::GainCompensator |
||||||
|
----------------------- |
||||||
|
.. ocv:class:: detail::GainCompensator |
||||||
|
|
||||||
|
Exposure compensator which tries to remove exposure related artifacts by adjusting image intensities. :: |
||||||
|
|
||||||
|
class CV_EXPORTS GainCompensator : public ExposureCompensator |
||||||
|
{ |
||||||
|
public: |
||||||
|
void feed(const std::vector<Point> &corners, const std::vector<Mat> &images, |
||||||
|
const std::vector<std::pair<Mat,uchar> > &masks); |
||||||
|
void apply(int index, Point corner, Mat &image, const Mat &mask); |
||||||
|
std::vector<double> gains() const; |
||||||
|
|
||||||
|
private: |
||||||
|
Mat_<double> gains_; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::ExposureCompensation` |
||||||
|
|
||||||
|
detail::BlocksGainCompensator |
||||||
|
----------------------------- |
||||||
|
.. ocv:class:: detail::BlocksGainCompensator |
||||||
|
|
||||||
|
Exposure compensator which tries to remove exposure related artifacts by adjusting image block intensities. :: |
||||||
|
|
||||||
|
class CV_EXPORTS BlocksGainCompensator : public ExposureCompensator |
||||||
|
{ |
||||||
|
public: |
||||||
|
BlocksGainCompensator(int bl_width = 32, int bl_height = 32) |
||||||
|
: bl_width_(bl_width), bl_height_(bl_height) {} |
||||||
|
void feed(const std::vector<Point> &corners, const std::vector<Mat> &images, |
||||||
|
const std::vector<std::pair<Mat,uchar> > &masks); |
||||||
|
void apply(int index, Point corner, Mat &image, const Mat &mask); |
||||||
|
|
||||||
|
private: |
||||||
|
int bl_width_, bl_height_; |
||||||
|
std::vector<Mat_<float> > gain_maps_; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::ExposureCompensation` |
||||||
|
|
@ -0,0 +1,14 @@ |
|||||||
|
References |
||||||
|
========== |
||||||
|
|
||||||
|
.. [BL07] M. Brown and D. Lowe. Automatic Panoramic Image Stitching using Invariant Features. International Journal of Computer Vision, 74(1), pages 59-73, 2007. |
||||||
|
|
||||||
|
.. [RS10] Richard Szeliski. Computer Vision: Algorithms and Applications. Springer, New York, 2010. |
||||||
|
|
||||||
|
.. [RS04] Richard Szeliski. Image alignment and stitching: A tutorial. Technical Report MSR-TR-2004-92, Microsoft Research, December 2004. |
||||||
|
|
||||||
|
.. [SS00] Heung-Yeung Shum and Richard Szeliski. Construction of panoramic mosaics with global and local alignment. International Journal of Computer Vision, 36(2):101-130, February 2000. Erratum published July 2002, 48(2):151-152. |
||||||
|
|
||||||
|
.. [V03] Vivek Kwatra, Arno Schödl, Irfan Essa, Greg Turk and Aaron Bobick. Graphcut Textures: Image and Video Synthesis Using Graph Cuts. To appear in Proc. ACM Transactions on Graphics, SIGGRAPH 2003. |
||||||
|
|
||||||
|
.. [BA83] Burt, P., and Adelson, E. H., A Multiresolution Spline with Application to Image Mosaics. ACM Transactions on Graphics, 2(4):217-236, 1983. |
@ -0,0 +1,108 @@ |
|||||||
|
Seam Estimation |
||||||
|
=============== |
||||||
|
|
||||||
|
.. highlight:: cpp |
||||||
|
|
||||||
|
detail::SeamFinder |
||||||
|
------------------ |
||||||
|
.. ocv:class:: detail::SeamFinder |
||||||
|
|
||||||
|
Base class for seam estimators. :: |
||||||
|
|
||||||
|
class CV_EXPORTS SeamFinder |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual ~SeamFinder() {} |
||||||
|
virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners, |
||||||
|
std::vector<Mat> &masks) = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
detail::NoSeamFinder |
||||||
|
-------------------- |
||||||
|
.. ocv:class:: detail::NoSeamFinder |
||||||
|
|
||||||
|
Stub seam estimator which does nothing. :: |
||||||
|
|
||||||
|
class CV_EXPORTS NoSeamFinder : public SeamFinder |
||||||
|
{ |
||||||
|
public: |
||||||
|
void find(const std::vector<Mat>&, const std::vector<Point>&, std::vector<Mat>&) {} |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::SeamFinder` |
||||||
|
|
||||||
|
detail::PairwiseSeamFinder |
||||||
|
-------------------------- |
||||||
|
.. ocv:class:: detail::PairwiseSeamFinder |
||||||
|
|
||||||
|
Base class for all pairwise seam estimators. :: |
||||||
|
|
||||||
|
class CV_EXPORTS PairwiseSeamFinder : public SeamFinder |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners, |
||||||
|
std::vector<Mat> &masks); |
||||||
|
|
||||||
|
protected: |
||||||
|
void run(); |
||||||
|
virtual void findInPair(size_t first, size_t second, Rect roi) = 0; |
||||||
|
|
||||||
|
std::vector<Mat> images_; |
||||||
|
std::vector<Size> sizes_; |
||||||
|
std::vector<Point> corners_; |
||||||
|
std::vector<Mat> masks_; |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::SeamFinder` |
||||||
|
|
||||||
|
detail::VoronoiSeamFinder |
||||||
|
------------------------- |
||||||
|
.. ocv:class:: detail::VoronoiSeamFinder |
||||||
|
|
||||||
|
Voronoi diagram-based seam estimator. :: |
||||||
|
|
||||||
|
class CV_EXPORTS VoronoiSeamFinder : public PairwiseSeamFinder |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual void find(const std::vector<Size> &size, const std::vector<Point> &corners, |
||||||
|
std::vector<Mat> &masks); |
||||||
|
private: |
||||||
|
void findInPair(size_t first, size_t second, Rect roi); |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::PairwiseSeamFinder` |
||||||
|
|
||||||
|
detail::GraphCutSeamFinderBase |
||||||
|
------------------------------ |
||||||
|
.. ocv:class:: detail::GraphCutSeamFinderBase |
||||||
|
|
||||||
|
Base class for all minimum graph cut-based seam estimators. :: |
||||||
|
|
||||||
|
class CV_EXPORTS GraphCutSeamFinderBase |
||||||
|
{ |
||||||
|
public: |
||||||
|
enum { COST_COLOR, COST_COLOR_GRAD }; |
||||||
|
}; |
||||||
|
|
||||||
|
detail::GraphCutSeamFinder |
||||||
|
-------------------------- |
||||||
|
.. ocv:class:: detail::GraphCutSeamFinder |
||||||
|
|
||||||
|
Minimum graph cut-based seam estimator. :: |
||||||
|
|
||||||
|
class CV_EXPORTS GraphCutSeamFinder : public GraphCutSeamFinderBase, public SeamFinder |
||||||
|
{ |
||||||
|
public: |
||||||
|
GraphCutSeamFinder(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f, |
||||||
|
float bad_region_penalty = 1000.f); |
||||||
|
|
||||||
|
void find(const std::vector<Mat> &src, const std::vector<Point> &corners, |
||||||
|
std::vector<Mat> &masks); |
||||||
|
|
||||||
|
private: |
||||||
|
/* hidden */ |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: |
||||||
|
:ocv:class:`detail::GraphCutSeamFinderBase`, |
||||||
|
:ocv:class:`detail::SeamFinder` |
@ -0,0 +1,94 @@ |
|||||||
|
Images Warping |
||||||
|
============== |
||||||
|
|
||||||
|
.. highlight:: cpp |
||||||
|
|
||||||
|
detail::RotationWarper |
||||||
|
---------------------- |
||||||
|
.. ocv:class:: detail::RotationWarper |
||||||
|
|
||||||
|
Rotation-only model image warpers interface. :: |
||||||
|
|
||||||
|
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; |
||||||
|
|
||||||
|
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; |
||||||
|
}; |
||||||
|
|
||||||
|
detail::PlaneWarper |
||||||
|
------------------- |
||||||
|
.. ocv:class:: detail::PlaneWarper |
||||||
|
|
||||||
|
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` |
||||||
|
|
||||||
|
detail::SphericalWarper |
||||||
|
----------------------- |
||||||
|
.. ocv:class:: detail::SphericalWarper |
||||||
|
|
||||||
|
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` |
||||||
|
|
||||||
|
detail::CylindricalWarper |
||||||
|
------------------------- |
||||||
|
.. ocv:class:: detail::CylindricalWarper |
||||||
|
|
||||||
|
Warper that maps an image onto the x*x + z*z = 1 cylinder. :: |
||||||
|
|
||||||
|
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) |
||||||
|
{ |
||||||
|
RotationWarperBase<CylindricalProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
.. seealso:: :ocv:class:`detail::RotationWarper` |
||||||
|
|
Loading…
Reference in new issue