Home | History | Annotate | Download | only in shape
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                          License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
     14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
     15 // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
     16 // Third party copyrights are property of their respective owners.
     17 //
     18 // Redistribution and use in source and binary forms, with or without modification,
     19 // are permitted provided that the following conditions are met:
     20 //
     21 //   * Redistribution's of source code must retain the above copyright notice,
     22 //     this list of conditions and the following disclaimer.
     23 //
     24 //   * Redistribution's in binary form must reproduce the above copyright notice,
     25 //     this list of conditions and the following disclaimer in the documentation
     26 //     and/or other materials provided with the distribution.
     27 //
     28 //   * The name of the copyright holders may not be used to endorse or promote products
     29 //     derived from this software without specific prior written permission.
     30 //
     31 // This software is provided by the copyright holders and contributors "as is" and
     32 // any express or implied warranties, including, but not limited to, the implied
     33 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     34 // In no event shall the Intel Corporation or contributors be liable for any direct,
     35 // indirect, incidental, special, exemplary, or consequential damages
     36 // (including, but not limited to, procurement of substitute goods or services;
     37 // loss of use, data, or profits; or business interruption) however caused
     38 // and on any theory of liability, whether in contract, strict liability,
     39 // or tort (including negligence or otherwise) arising in any way out of
     40 // the use of this software, even if advised of the possibility of such damage.
     41 //
     42 //M*/
     43 
     44 #ifndef __OPENCV_SHAPE_SHAPE_TRANSFORM_HPP__
     45 #define __OPENCV_SHAPE_SHAPE_TRANSFORM_HPP__
     46 #include <vector>
     47 #include "opencv2/core.hpp"
     48 #include "opencv2/imgproc.hpp"
     49 
     50 namespace cv
     51 {
     52 
     53 //! @addtogroup shape
     54 //! @{
     55 
     56 /** @brief Abstract base class for shape transformation algorithms.
     57  */
     58 class CV_EXPORTS_W ShapeTransformer : public Algorithm
     59 {
     60 public:
     61     /** @brief Estimate the transformation parameters of the current transformer algorithm, based on point matches.
     62 
     63     @param transformingShape Contour defining first shape.
     64     @param targetShape Contour defining second shape (Target).
     65     @param matches Standard vector of Matches between points.
     66      */
     67     CV_WRAP virtual void estimateTransformation(InputArray transformingShape, InputArray targetShape,
     68                                                  std::vector<DMatch>& matches) = 0;
     69 
     70     /** @brief Apply a transformation, given a pre-estimated transformation parameters.
     71 
     72     @param input Contour (set of points) to apply the transformation.
     73     @param output Output contour.
     74      */
     75     CV_WRAP virtual float applyTransformation(InputArray input, OutputArray output=noArray()) = 0;
     76 
     77     /** @brief Apply a transformation, given a pre-estimated transformation parameters, to an Image.
     78 
     79     @param transformingImage Input image.
     80     @param output Output image.
     81     @param flags Image interpolation method.
     82     @param borderMode border style.
     83     @param borderValue border value.
     84      */
     85     CV_WRAP virtual void warpImage(InputArray transformingImage, OutputArray output,
     86                                    int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,
     87                                    const Scalar& borderValue=Scalar()) const = 0;
     88 };
     89 
     90 /***********************************************************************************/
     91 /***********************************************************************************/
     92 
     93 /** @brief Definition of the transformation
     94 
     95 ocupied in the paper "Principal Warps: Thin-Plate Splines and Decomposition of Deformations", by
     96 F.L. Bookstein (PAMI 1989). :
     97  */
     98 class CV_EXPORTS_W ThinPlateSplineShapeTransformer : public ShapeTransformer
     99 {
    100 public:
    101     /** @brief Set the regularization parameter for relaxing the exact interpolation requirements of the TPS
    102     algorithm.
    103 
    104     @param beta value of the regularization parameter.
    105      */
    106     CV_WRAP virtual void setRegularizationParameter(double beta) = 0;
    107     CV_WRAP virtual double getRegularizationParameter() const = 0;
    108 };
    109 
    110 /** Complete constructor */
    111 CV_EXPORTS_W Ptr<ThinPlateSplineShapeTransformer>
    112     createThinPlateSplineShapeTransformer(double regularizationParameter=0);
    113 
    114 /***********************************************************************************/
    115 /***********************************************************************************/
    116 
    117 /** @brief Wrapper class for the OpenCV Affine Transformation algorithm. :
    118  */
    119 class CV_EXPORTS_W AffineTransformer : public ShapeTransformer
    120 {
    121 public:
    122     CV_WRAP virtual void setFullAffine(bool fullAffine) = 0;
    123     CV_WRAP virtual bool getFullAffine() const = 0;
    124 };
    125 
    126 /** Complete constructor */
    127 CV_EXPORTS_W Ptr<AffineTransformer> createAffineTransformer(bool fullAffine);
    128 
    129 //! @}
    130 
    131 } // cv
    132 #endif
    133