Renesas GR-PEACH OpenCV Development / gr-peach-opencv-project-sd-card_update

Fork of gr-peach-opencv-project-sd-card by the do

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers core.hpp Source File

core.hpp

00001 /*M///////////////////////////////////////////////////////////////////////////////////////
00002 //
00003 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
00004 //
00005 //  By downloading, copying, installing or using the software you agree to this license.
00006 //  If you do not agree to this license, do not download, install,
00007 //  copy or use the software.
00008 //
00009 //
00010 //                           License Agreement
00011 //                For Open Source Computer Vision Library
00012 //
00013 // Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
00014 // Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
00015 // Copyright (C) 2015, OpenCV Foundation, all rights reserved.
00016 // Copyright (C) 2015, Itseez Inc., all rights reserved.
00017 // Third party copyrights are property of their respective owners.
00018 //
00019 // Redistribution and use in source and binary forms, with or without modification,
00020 // are permitted provided that the following conditions are met:
00021 //
00022 //   * Redistribution's of source code must retain the above copyright notice,
00023 //     this list of conditions and the following disclaimer.
00024 //
00025 //   * Redistribution's in binary form must reproduce the above copyright notice,
00026 //     this list of conditions and the following disclaimer in the documentation
00027 //     and/or other materials provided with the distribution.
00028 //
00029 //   * The name of the copyright holders may not be used to endorse or promote products
00030 //     derived from this software without specific prior written permission.
00031 //
00032 // This software is provided by the copyright holders and contributors "as is" and
00033 // any express or implied warranties, including, but not limited to, the implied
00034 // warranties of merchantability and fitness for a particular purpose are disclaimed.
00035 // In no event shall the Intel Corporation or contributors be liable for any direct,
00036 // indirect, incidental, special, exemplary, or consequential damages
00037 // (including, but not limited to, procurement of substitute goods or services;
00038 // loss of use, data, or profits; or business interruption) however caused
00039 // and on any theory of liability, whether in contract, strict liability,
00040 // or tort (including negligence or otherwise) arising in any way out of
00041 // the use of this software, even if advised of the possibility of such damage.
00042 //
00043 //M*/
00044 
00045 #ifndef __OPENCV_CORE_HPP__
00046 #define __OPENCV_CORE_HPP__
00047 
00048 #ifndef __cplusplus
00049 #  error core.hpp header must be compiled as C++
00050 #endif
00051 
00052 #include "opencv2/core/cvdef.h"
00053 #include "opencv2/core/version.hpp"
00054 #include "opencv2/core/base.hpp"
00055 #include "opencv2/core/cvstd.hpp"
00056 #include "opencv2/core/traits.hpp"
00057 #include "opencv2/core/matx.hpp"
00058 #include "opencv2/core/types.hpp"
00059 #include "opencv2/core/mat.hpp"
00060 #include "opencv2/core/persistence.hpp"
00061 
00062 /**
00063 @defgroup core Core functionality
00064 @{
00065     @defgroup core_basic Basic structures
00066     @defgroup core_c C structures and operations
00067     @{
00068         @defgroup core_c_glue Connections with C++
00069     @}
00070     @defgroup core_array Operations on arrays
00071     @defgroup core_xml XML/YAML Persistence
00072     @defgroup core_cluster Clustering
00073     @defgroup core_utils Utility and system functions and macros
00074     @{
00075         @defgroup core_utils_sse SSE utilities
00076         @defgroup core_utils_neon NEON utilities
00077     @}
00078     @defgroup core_opengl OpenGL interoperability
00079     @defgroup core_ipp Intel IPP Asynchronous C/C++ Converters
00080     @defgroup core_optim Optimization Algorithms
00081     @defgroup core_directx DirectX interoperability
00082     @defgroup core_eigen Eigen support
00083     @defgroup core_opencl OpenCL support
00084     @defgroup core_va_intel Intel VA-API/OpenCL (CL-VA) interoperability
00085     @defgroup core_hal Hardware Acceleration Layer
00086     @{
00087         @defgroup core_hal_functions Functions
00088         @defgroup core_hal_interface Interface
00089         @defgroup core_hal_intrin Universal intrinsics
00090         @{
00091             @defgroup core_hal_intrin_impl Private implementation helpers
00092         @}
00093     @}
00094 @}
00095  */
00096 
00097 namespace cv {
00098 
00099 //! @addtogroup core_utils
00100 //! @{
00101 
00102 /*! @brief Class passed to an error.
00103 
00104 This class encapsulates all or almost all necessary
00105 information about the error happened in the program. The exception is
00106 usually constructed and thrown implicitly via CV_Error and CV_Error_ macros.
00107 @see error
00108  */
00109 class CV_EXPORTS Exception : public std::exception
00110 {
00111 public:
00112     /*!
00113      Default constructor
00114      */
00115     Exception();
00116     /*!
00117      Full constructor. Normally the constuctor is not called explicitly.
00118      Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used.
00119     */
00120     Exception(int _code, const String& _err, const String& _func, const String& _file, int _line);
00121     virtual ~Exception() throw();
00122 
00123     /*!
00124      \return the error description and the context as a text string.
00125     */
00126     virtual const char *what() const throw();
00127     void formatMessage();
00128 
00129     String msg; ///< the formatted error message
00130 
00131     int code; ///< error code @see CVStatus
00132     String err; ///< error description
00133     String func; ///< function name. Available only when the compiler supports getting it
00134     String file; ///< source file name where the error has occured
00135     int line; ///< line number in the source file where the error has occured
00136 };
00137 
00138 /*! @brief Signals an error and raises the exception.
00139 
00140 By default the function prints information about the error to stderr,
00141 then it either stops if cv::setBreakOnError() had been called before or raises the exception.
00142 It is possible to alternate error processing by using cv::redirectError().
00143 @param exc the exception raisen.
00144 @deprecated drop this version
00145  */
00146 CV_EXPORTS void error( const Exception& exc );
00147 
00148 enum SortFlags  { SORT_EVERY_ROW    = 0, //!< each matrix row is sorted independently
00149                  SORT_EVERY_COLUMN = 1, //!< each matrix column is sorted
00150                                         //!< independently; this flag and the previous one are
00151                                         //!< mutually exclusive.
00152                  SORT_ASCENDING    = 0, //!< each matrix row is sorted in the ascending
00153                                         //!< order.
00154                  SORT_DESCENDING   = 16 //!< each matrix row is sorted in the
00155                                         //!< descending order; this flag and the previous one are also
00156                                         //!< mutually exclusive.
00157                };
00158 
00159 //! @} core_utils
00160 
00161 //! @addtogroup core
00162 //! @{
00163 
00164 //! Covariation flags
00165 enum CovarFlags {
00166     /** The output covariance matrix is calculated as:
00167        \f[\texttt{scale}   \cdot  [  \texttt{vects}  [0]-  \texttt{mean}  , \texttt{vects}  [1]-  \texttt{mean}  ,...]^T  \cdot  [ \texttt{vects}  [0]- \texttt{mean}  , \texttt{vects}  [1]- \texttt{mean}  ,...],\f]
00168        The covariance matrix will be nsamples x nsamples. Such an unusual covariance matrix is used
00169        for fast PCA of a set of very large vectors (see, for example, the EigenFaces technique for
00170        face recognition). Eigenvalues of this "scrambled" matrix match the eigenvalues of the true
00171        covariance matrix. The "true" eigenvectors can be easily calculated from the eigenvectors of
00172        the "scrambled" covariance matrix. */
00173     COVAR_SCRAMBLED = 0,
00174     /**The output covariance matrix is calculated as:
00175         \f[\texttt{scale}   \cdot  [  \texttt{vects}  [0]-  \texttt{mean}  , \texttt{vects}  [1]-  \texttt{mean}  ,...]  \cdot  [ \texttt{vects}  [0]- \texttt{mean}  , \texttt{vects}  [1]- \texttt{mean}  ,...]^T,\f]
00176         covar will be a square matrix of the same size as the total number of elements in each input
00177         vector. One and only one of COVAR_SCRAMBLED and COVAR_NORMAL must be specified.*/
00178     COVAR_NORMAL    = 1,
00179     /** If the flag is specified, the function does not calculate mean from
00180         the input vectors but, instead, uses the passed mean vector. This is useful if mean has been
00181         pre-calculated or known in advance, or if the covariance matrix is calculated by parts. In
00182         this case, mean is not a mean vector of the input sub-set of vectors but rather the mean
00183         vector of the whole set.*/
00184     COVAR_USE_AVG   = 2,
00185     /** If the flag is specified, the covariance matrix is scaled. In the
00186         "normal" mode, scale is 1./nsamples . In the "scrambled" mode, scale is the reciprocal of the
00187         total number of elements in each input vector. By default (if the flag is not specified), the
00188         covariance matrix is not scaled ( scale=1 ).*/
00189     COVAR_SCALE     = 4,
00190     /** If the flag is
00191         specified, all the input vectors are stored as rows of the samples matrix. mean should be a
00192         single-row vector in this case.*/
00193     COVAR_ROWS      = 8,
00194     /** If the flag is
00195         specified, all the input vectors are stored as columns of the samples matrix. mean should be a
00196         single-column vector in this case.*/
00197     COVAR_COLS      = 16
00198 };
00199 
00200 //! k-Means flags
00201 enum KmeansFlags {
00202     /** Select random initial centers in each attempt.*/
00203     KMEANS_RANDOM_CENTERS     = 0,
00204     /** Use kmeans++ center initialization by Arthur and Vassilvitskii [Arthur2007].*/
00205     KMEANS_PP_CENTERS         = 2,
00206     /** During the first (and possibly the only) attempt, use the
00207         user-supplied labels instead of computing them from the initial centers. For the second and
00208         further attempts, use the random or semi-random centers. Use one of KMEANS_\*_CENTERS flag
00209         to specify the exact method.*/
00210     KMEANS_USE_INITIAL_LABELS = 1
00211 };
00212 
00213 //! type of line
00214 enum LineTypes {
00215     FILLED  = -1,
00216     LINE_4  = 4, //!< 4-connected line
00217     LINE_8  = 8, //!< 8-connected line
00218     LINE_AA = 16 //!< antialiased line
00219 };
00220 
00221 //! Only a subset of Hershey fonts
00222 //! <http://sources.isc.org/utils/misc/hershey-font.txt> are supported
00223 enum HersheyFonts {
00224     FONT_HERSHEY_SIMPLEX        = 0, //!< normal size sans-serif font
00225     FONT_HERSHEY_PLAIN          = 1, //!< small size sans-serif font
00226     FONT_HERSHEY_DUPLEX         = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)
00227     FONT_HERSHEY_COMPLEX        = 3, //!< normal size serif font
00228     FONT_HERSHEY_TRIPLEX        = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX)
00229     FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< smaller version of FONT_HERSHEY_COMPLEX
00230     FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style font
00231     FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX
00232     FONT_ITALIC                 = 16 //!< flag for italic font
00233 };
00234 
00235 enum ReduceTypes  { REDUCE_SUM = 0, //!< the output is the sum of all rows/columns of the matrix.
00236                    REDUCE_AVG = 1, //!< the output is the mean vector of all rows/columns of the matrix.
00237                    REDUCE_MAX = 2, //!< the output is the maximum (column/row-wise) of all rows/columns of the matrix.
00238                    REDUCE_MIN = 3  //!< the output is the minimum (column/row-wise) of all rows/columns of the matrix.
00239                  };
00240 
00241 
00242 /** @brief Swaps two matrices
00243 */
00244 CV_EXPORTS void swap(Mat& a, Mat& b);
00245 /** @overload */
00246 CV_EXPORTS void swap( UMat& a, UMat& b );
00247 
00248 //! @} core
00249 
00250 //! @addtogroup core_array
00251 //! @{
00252 
00253 /** @brief Computes the source location of an extrapolated pixel.
00254 
00255 The function computes and returns the coordinate of a donor pixel corresponding to the specified
00256 extrapolated pixel when using the specified extrapolation border mode. For example, if you use
00257 cv::BORDER_WRAP mode in the horizontal direction, cv::BORDER_REFLECT_101 in the vertical direction and
00258 want to compute value of the "virtual" pixel Point(-5, 100) in a floating-point image img , it
00259 looks like:
00260 @code{.cpp}
00261     float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101),
00262                               borderInterpolate(-5, img.cols, cv::BORDER_WRAP));
00263 @endcode
00264 Normally, the function is not called directly. It is used inside filtering functions and also in
00265 copyMakeBorder.
00266 @param p 0-based coordinate of the extrapolated pixel along one of the axes, likely <0 or >= len
00267 @param len Length of the array along the corresponding axis.
00268 @param borderType Border type, one of the cv::BorderTypes, except for cv::BORDER_TRANSPARENT and
00269 cv::BORDER_ISOLATED . When borderType==cv::BORDER_CONSTANT , the function always returns -1, regardless
00270 of p and len.
00271 
00272 @sa copyMakeBorder
00273 */
00274 CV_EXPORTS_W int borderInterpolate(int p, int len, int borderType);
00275 
00276 /** @brief Forms a border around an image.
00277 
00278 The function copies the source image into the middle of the destination image. The areas to the
00279 left, to the right, above and below the copied source image will be filled with extrapolated
00280 pixels. This is not what filtering functions based on it do (they extrapolate pixels on-fly), but
00281 what other more complex functions, including your own, may do to simplify image boundary handling.
00282 
00283 The function supports the mode when src is already in the middle of dst . In this case, the
00284 function does not copy src itself but simply constructs the border, for example:
00285 
00286 @code{.cpp}
00287     // let border be the same in all directions
00288     int border=2;
00289     // constructs a larger image to fit both the image and the border
00290     Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth());
00291     // select the middle part of it w/o copying data
00292     Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows));
00293     // convert image from RGB to grayscale
00294     cvtColor(rgb, gray, COLOR_RGB2GRAY);
00295     // form a border in-place
00296     copyMakeBorder(gray, gray_buf, border, border,
00297                    border, border, BORDER_REPLICATE);
00298     // now do some custom filtering ...
00299     ...
00300 @endcode
00301 @note When the source image is a part (ROI) of a bigger image, the function will try to use the
00302 pixels outside of the ROI to form a border. To disable this feature and always do extrapolation, as
00303 if src was not a ROI, use borderType | BORDER_ISOLATED.
00304 
00305 @param src Source image.
00306 @param dst Destination image of the same type as src and the size Size(src.cols+left+right,
00307 src.rows+top+bottom) .
00308 @param top
00309 @param bottom
00310 @param left
00311 @param right Parameter specifying how many pixels in each direction from the source image rectangle
00312 to extrapolate. For example, top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs
00313 to be built.
00314 @param borderType Border type. See borderInterpolate for details.
00315 @param value Border value if borderType==BORDER_CONSTANT .
00316 
00317 @sa  borderInterpolate
00318 */
00319 CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
00320                                  int top, int bottom, int left, int right,
00321                                  int borderType, const Scalar& value = Scalar() );
00322 
00323 /** @brief Calculates the per-element sum of two arrays or an array and a scalar.
00324 
00325 The function add calculates:
00326 - Sum of two arrays when both input arrays have the same size and the same number of channels:
00327 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\f]
00328 - Sum of an array and a scalar when src2 is constructed from Scalar or has the same number of
00329 elements as `src1.channels()`:
00330 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\f]
00331 - Sum of a scalar and an array when src1 is constructed from Scalar or has the same number of
00332 elements as `src2.channels()`:
00333 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} +  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\f]
00334 where `I` is a multi-dimensional index of array elements. In case of multi-channel arrays, each
00335 channel is processed independently.
00336 
00337 The first function in the list above can be replaced with matrix expressions:
00338 @code{.cpp}
00339     dst = src1 + src2;
00340     dst += src1; // equivalent to add(dst, src1, dst);
00341 @endcode
00342 The input arrays and the output array can all have the same or different depths. For example, you
00343 can add a 16-bit unsigned array to a 8-bit signed array and store the sum as a 32-bit
00344 floating-point array. Depth of the output array is determined by the dtype parameter. In the second
00345 and third cases above, as well as in the first case, when src1.depth() == src2.depth(), dtype can
00346 be set to the default -1. In this case, the output array will have the same depth as the input
00347 array, be it src1, src2 or both.
00348 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
00349 result of an incorrect sign in the case of overflow.
00350 @param src1 first input array or a scalar.
00351 @param src2 second input array or a scalar.
00352 @param dst output array that has the same size and number of channels as the input array(s); the
00353 depth is defined by dtype or src1/src2.
00354 @param mask optional operation mask - 8-bit single channel array, that specifies elements of the
00355 output array to be changed.
00356 @param dtype optional depth of the output array (see the discussion below).
00357 @sa subtract, addWeighted, scaleAdd, Mat::convertTo
00358 */
00359 CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,
00360                       InputArray mask = noArray(), int dtype = -1);
00361 
00362 /** @brief Calculates the per-element difference between two arrays or array and a scalar.
00363 
00364 The function subtract calculates:
00365 - Difference between two arrays, when both input arrays have the same size and the same number of
00366 channels:
00367     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\f]
00368 - Difference between an array and a scalar, when src2 is constructed from Scalar or has the same
00369 number of elements as `src1.channels()`:
00370     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\f]
00371 - Difference between a scalar and an array, when src1 is constructed from Scalar or has the same
00372 number of elements as `src2.channels()`:
00373     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} -  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\f]
00374 - The reverse difference between a scalar and an array in the case of `SubRS`:
00375     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src2} -  \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0\f]
00376 where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
00377 channel is processed independently.
00378 
00379 The first function in the list above can be replaced with matrix expressions:
00380 @code{.cpp}
00381     dst = src1 - src2;
00382     dst -= src1; // equivalent to subtract(dst, src1, dst);
00383 @endcode
00384 The input arrays and the output array can all have the same or different depths. For example, you
00385 can subtract to 8-bit unsigned arrays and store the difference in a 16-bit signed array. Depth of
00386 the output array is determined by dtype parameter. In the second and third cases above, as well as
00387 in the first case, when src1.depth() == src2.depth(), dtype can be set to the default -1. In this
00388 case the output array will have the same depth as the input array, be it src1, src2 or both.
00389 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
00390 result of an incorrect sign in the case of overflow.
00391 @param src1 first input array or a scalar.
00392 @param src2 second input array or a scalar.
00393 @param dst output array of the same size and the same number of channels as the input array.
00394 @param mask optional operation mask; this is an 8-bit single channel array that specifies elements
00395 of the output array to be changed.
00396 @param dtype optional depth of the output array
00397 @sa  add, addWeighted, scaleAdd, Mat::convertTo
00398   */
00399 CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,
00400                            InputArray mask = noArray(), int dtype = -1);
00401 
00402 
00403 /** @brief Calculates the per-element scaled product of two arrays.
00404 
00405 The function multiply calculates the per-element product of two arrays:
00406 
00407 \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I)  \cdot \texttt{src2} (I))\f]
00408 
00409 There is also a @ref MatrixExpressions -friendly variant of the first function. See Mat::mul .
00410 
00411 For a not-per-element matrix product, see gemm .
00412 
00413 @note Saturation is not applied when the output array has the depth
00414 CV_32S. You may even get result of an incorrect sign in the case of
00415 overflow.
00416 @param src1 first input array.
00417 @param src2 second input array of the same size and the same type as src1.
00418 @param dst output array of the same size and type as src1.
00419 @param scale optional scale factor.
00420 @param dtype optional depth of the output array
00421 @sa add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare,
00422 Mat::convertTo
00423 */
00424 CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,
00425                            OutputArray dst, double scale = 1, int dtype = -1);
00426 
00427 /** @brief Performs per-element division of two arrays or a scalar by an array.
00428 
00429 The functions divide divide one array by another:
00430 \f[\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\f]
00431 or a scalar by an array when there is no src1 :
00432 \f[\texttt{dst(I) = saturate(scale/src2(I))}\f]
00433 
00434 When src2(I) is zero, dst(I) will also be zero. Different channels of
00435 multi-channel arrays are processed independently.
00436 
00437 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
00438 result of an incorrect sign in the case of overflow.
00439 @param src1 first input array.
00440 @param src2 second input array of the same size and type as src1.
00441 @param scale scalar factor.
00442 @param dst output array of the same size and type as src2.
00443 @param dtype optional depth of the output array; if -1, dst will have depth src2.depth(), but in
00444 case of an array-by-array division, you can only pass -1 when src1.depth()==src2.depth().
00445 @sa  multiply, add, subtract
00446 */
00447 CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,
00448                          double scale = 1, int dtype = -1);
00449 
00450 /** @overload */
00451 CV_EXPORTS_W void divide(double scale, InputArray src2,
00452                          OutputArray dst, int dtype = -1);
00453 
00454 /** @brief Calculates the sum of a scaled array and another array.
00455 
00456 The function scaleAdd is one of the classical primitive linear algebra operations, known as DAXPY
00457 or SAXPY in [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms). It calculates
00458 the sum of a scaled array and another array:
00459 \f[\texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) +  \texttt{src2} (I)\f]
00460 The function can also be emulated with a matrix expression, for example:
00461 @code{.cpp}
00462     Mat A(3, 3, CV_64F);
00463     ...
00464     A.row(0) = A.row(1)*2 + A.row(2);
00465 @endcode
00466 @param src1 first input array.
00467 @param alpha scale factor for the first array.
00468 @param src2 second input array of the same size and type as src1.
00469 @param dst output array of the same size and type as src1.
00470 @sa add, addWeighted, subtract, Mat::dot, Mat::convertTo
00471 */
00472 CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);
00473 
00474 /** @brief Calculates the weighted sum of two arrays.
00475 
00476 The function addWeighted calculates the weighted sum of two arrays as follows:
00477 \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} +  \texttt{src2} (I)* \texttt{beta} +  \texttt{gamma} )\f]
00478 where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
00479 channel is processed independently.
00480 The function can be replaced with a matrix expression:
00481 @code{.cpp}
00482     dst = src1*alpha + src2*beta + gamma;
00483 @endcode
00484 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
00485 result of an incorrect sign in the case of overflow.
00486 @param src1 first input array.
00487 @param alpha weight of the first array elements.
00488 @param src2 second input array of the same size and channel number as src1.
00489 @param beta weight of the second array elements.
00490 @param gamma scalar added to each sum.
00491 @param dst output array that has the same size and number of channels as the input arrays.
00492 @param dtype optional depth of the output array; when both input arrays have the same depth, dtype
00493 can be set to -1, which will be equivalent to src1.depth().
00494 @sa  add, subtract, scaleAdd, Mat::convertTo
00495 */
00496 CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
00497                               double beta, double gamma, OutputArray dst, int dtype = -1);
00498 
00499 /** @brief Scales, calculates absolute values, and converts the result to 8-bit.
00500 
00501 On each element of the input array, the function convertScaleAbs
00502 performs three operations sequentially: scaling, taking an absolute
00503 value, conversion to an unsigned 8-bit type:
00504 \f[\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} +  \texttt{beta} |)\f]
00505 In case of multi-channel arrays, the function processes each channel
00506 independently. When the output is not 8-bit, the operation can be
00507 emulated by calling the Mat::convertTo method (or by using matrix
00508 expressions) and then by calculating an absolute value of the result.
00509 For example:
00510 @code{.cpp}
00511     Mat_<float> A(30,30);
00512     randu(A, Scalar(-100), Scalar(100));
00513     Mat_<float> B = A*5 + 3;
00514     B = abs(B);
00515     // Mat_<float> B = abs(A*5+3) will also do the job,
00516     // but it will allocate a temporary matrix
00517 @endcode
00518 @param src input array.
00519 @param dst output array.
00520 @param alpha optional scale factor.
00521 @param beta optional delta added to the scaled values.
00522 @sa  Mat::convertTo, cv::abs(const Mat&)
00523 */
00524 CV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst,
00525                                   double alpha = 1, double beta = 0);
00526 
00527 /** @brief Performs a look-up table transform of an array.
00528 
00529 The function LUT fills the output array with values from the look-up table. Indices of the entries
00530 are taken from the input array. That is, the function processes each element of src as follows:
00531 \f[\texttt{dst} (I)  \leftarrow \texttt{lut(src(I) + d)}\f]
00532 where
00533 \f[d =  \fork{0}{if \(\texttt{src}\) has depth \(\texttt{CV_8U}\)}{128}{if \(\texttt{src}\) has depth \(\texttt{CV_8S}\)}\f]
00534 @param src input array of 8-bit elements.
00535 @param lut look-up table of 256 elements; in case of multi-channel input array, the table should
00536 either have a single channel (in this case the same table is used for all channels) or the same
00537 number of channels as in the input array.
00538 @param dst output array of the same size and number of channels as src, and the same depth as lut.
00539 @sa  convertScaleAbs, Mat::convertTo
00540 */
00541 CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst);
00542 
00543 /** @brief Calculates the sum of array elements.
00544 
00545 The functions sum calculate and return the sum of array elements,
00546 independently for each channel.
00547 @param src input array that must have from 1 to 4 channels.
00548 @sa  countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce
00549 */
00550 CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);
00551 
00552 /** @brief Counts non-zero array elements.
00553 
00554 The function returns the number of non-zero elements in src :
00555 \f[\sum _{I: \; \texttt{src} (I) \ne0 } 1\f]
00556 @param src single-channel array.
00557 @sa  mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix
00558 */
00559 CV_EXPORTS_W int countNonZero( InputArray src );
00560 
00561 /** @brief Returns the list of locations of non-zero pixels
00562 
00563 Given a binary matrix (likely returned from an operation such
00564 as threshold(), compare(), >, ==, etc, return all of
00565 the non-zero indices as a cv::Mat or std::vector<cv::Point> (x,y)
00566 For example:
00567 @code{.cpp}
00568     cv::Mat binaryImage; // input, binary image
00569     cv::Mat locations;   // output, locations of non-zero pixels
00570     cv::findNonZero(binaryImage, locations);
00571 
00572     // access pixel coordinates
00573     Point pnt = locations.at<Point>(i);
00574 @endcode
00575 or
00576 @code{.cpp}
00577     cv::Mat binaryImage; // input, binary image
00578     vector<Point> locations;   // output, locations of non-zero pixels
00579     cv::findNonZero(binaryImage, locations);
00580 
00581     // access pixel coordinates
00582     Point pnt = locations[i];
00583 @endcode
00584 @param src single-channel array (type CV_8UC1)
00585 @param idx the output array, type of cv::Mat or std::vector<Point>, corresponding to non-zero indices in the input
00586 */
00587 CV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx );
00588 
00589 /** @brief Calculates an average (mean) of array elements.
00590 
00591 The function mean calculates the mean value M of array elements,
00592 independently for each channel, and return it:
00593 \f[\begin{array}{l} N =  \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c =  \left ( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N \end{array}\f]
00594 When all the mask elements are 0's, the functions return Scalar::all(0)
00595 @param src input array that should have from 1 to 4 channels so that the result can be stored in
00596 Scalar_ .
00597 @param mask optional operation mask.
00598 @sa  countNonZero, meanStdDev, norm, minMaxLoc
00599 */
00600 CV_EXPORTS_W Scalar mean(InputArray src, InputArray mask = noArray());
00601 
00602 /** Calculates a mean and standard deviation of array elements.
00603 
00604 The function meanStdDev calculates the mean and the standard deviation M
00605 of array elements independently for each channel and returns it via the
00606 output parameters:
00607 \f[\begin{array}{l} N =  \sum _{I, \texttt{mask} (I)  \ne 0} 1 \\ \texttt{mean} _c =  \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c =  \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c -  \texttt{mean} _c \right )^2}{N}} \end{array}\f]
00608 When all the mask elements are 0's, the functions return
00609 mean=stddev=Scalar::all(0).
00610 @note The calculated standard deviation is only the diagonal of the
00611 complete normalized covariance matrix. If the full matrix is needed, you
00612 can reshape the multi-channel array M x N to the single-channel array
00613 M\*N x mtx.channels() (only possible when the matrix is continuous) and
00614 then pass the matrix to calcCovarMatrix .
00615 @param src input array that should have from 1 to 4 channels so that the results can be stored in
00616 Scalar_ 's.
00617 @param mean output parameter: calculated mean value.
00618 @param stddev output parameter: calculateded standard deviation.
00619 @param mask optional operation mask.
00620 @sa  countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
00621 */
00622 CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,
00623                              InputArray mask=noArray());
00624 
00625 /** @brief Calculates an absolute array norm, an absolute difference norm, or a
00626 relative difference norm.
00627 
00628 The functions norm calculate an absolute norm of src1 (when there is no
00629 src2 ):
00630 
00631 \f[norm =  \forkthree{\|\texttt{src1}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I)|}{if  \(\texttt{normType} = \texttt{NORM_INF}\) }
00632 { \| \texttt{src1} \| _{L_1} =  \sum _I | \texttt{src1} (I)|}{if  \(\texttt{normType} = \texttt{NORM_L1}\) }
00633 { \| \texttt{src1} \| _{L_2} =  \sqrt{\sum_I \texttt{src1}(I)^2} }{if  \(\texttt{normType} = \texttt{NORM_L2}\) }\f]
00634 
00635 or an absolute or relative difference norm if src2 is there:
00636 
00637 \f[norm =  \forkthree{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  \(\texttt{normType} = \texttt{NORM_INF}\) }
00638 { \| \texttt{src1} - \texttt{src2} \| _{L_1} =  \sum _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  \(\texttt{normType} = \texttt{NORM_L1}\) }
00639 { \| \texttt{src1} - \texttt{src2} \| _{L_2} =  \sqrt{\sum_I (\texttt{src1}(I) - \texttt{src2}(I))^2} }{if  \(\texttt{normType} = \texttt{NORM_L2}\) }\f]
00640 
00641 or
00642 
00643 \f[norm =  \forkthree{\frac{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}}    }{\|\texttt{src2}\|_{L_{\infty}} }}{if  \(\texttt{normType} = \texttt{NORM_RELATIVE_INF}\) }
00644 { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_1} }{\|\texttt{src2}\|_{L_1}} }{if  \(\texttt{normType} = \texttt{NORM_RELATIVE_L1}\) }
00645 { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_2} }{\|\texttt{src2}\|_{L_2}} }{if  \(\texttt{normType} = \texttt{NORM_RELATIVE_L2}\) }\f]
00646 
00647 The functions norm return the calculated norm.
00648 
00649 When the mask parameter is specified and it is not empty, the norm is
00650 calculated only over the region specified by the mask.
00651 
00652 A multi-channel input arrays are treated as a single-channel, that is,
00653 the results for all channels are combined.
00654 
00655 @param src1 first input array.
00656 @param normType type of the norm (see cv::NormTypes).
00657 @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
00658 */
00659 CV_EXPORTS_W double norm(InputArray src1, int normType = NORM_L2, InputArray mask = noArray());
00660 
00661 /** @overload
00662 @param src1 first input array.
00663 @param src2 second input array of the same size and the same type as src1.
00664 @param normType type of the norm (cv::NormTypes).
00665 @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
00666 */
00667 CV_EXPORTS_W double norm(InputArray src1, InputArray src2,
00668                          int normType = NORM_L2, InputArray mask = noArray());
00669 /** @overload
00670 @param src first input array.
00671 @param normType type of the norm (see cv::NormTypes).
00672 */
00673 CV_EXPORTS double norm( const SparseMat& src, int normType );
00674 
00675 /** @brief computes PSNR image/video quality metric
00676 
00677 see http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio for details
00678 @todo document
00679   */
00680 CV_EXPORTS_W double PSNR(InputArray src1, InputArray src2);
00681 
00682 /** @brief naive nearest neighbor finder
00683 
00684 see http://en.wikipedia.org/wiki/Nearest_neighbor_search
00685 @todo document
00686   */
00687 CV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2,
00688                                 OutputArray dist, int dtype, OutputArray nidx,
00689                                 int normType = NORM_L2, int K = 0,
00690                                 InputArray mask = noArray(), int update = 0,
00691                                 bool crosscheck = false);
00692 
00693 /** @brief Normalizes the norm or value range of an array.
00694 
00695 The functions normalize scale and shift the input array elements so that
00696 \f[\| \texttt{dst} \| _{L_p}= \texttt{alpha}\f]
00697 (where p=Inf, 1 or 2) when normType=NORM_INF, NORM_L1, or NORM_L2, respectively; or so that
00698 \f[\min _I  \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I  \texttt{dst} (I)= \texttt{beta}\f]
00699 
00700 when normType=NORM_MINMAX (for dense arrays only). The optional mask specifies a sub-array to be
00701 normalized. This means that the norm or min-n-max are calculated over the sub-array, and then this
00702 sub-array is modified to be normalized. If you want to only use the mask to calculate the norm or
00703 min-max but modify the whole array, you can use norm and Mat::convertTo.
00704 
00705 In case of sparse matrices, only the non-zero values are analyzed and transformed. Because of this,
00706 the range transformation for sparse matrices is not allowed since it can shift the zero level.
00707 
00708 Possible usage with some positive example data:
00709 @code{.cpp}
00710     vector<double> positiveData = { 2.0, 8.0, 10.0 };
00711     vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax;
00712 
00713     // Norm to probability (total count)
00714     // sum(numbers) = 20.0
00715     // 2.0      0.1     (2.0/20.0)
00716     // 8.0      0.4     (8.0/20.0)
00717     // 10.0     0.5     (10.0/20.0)
00718     normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1);
00719 
00720     // Norm to unit vector: ||positiveData|| = 1.0
00721     // 2.0      0.15
00722     // 8.0      0.62
00723     // 10.0     0.77
00724     normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2);
00725 
00726     // Norm to max element
00727     // 2.0      0.2     (2.0/10.0)
00728     // 8.0      0.8     (8.0/10.0)
00729     // 10.0     1.0     (10.0/10.0)
00730     normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF);
00731 
00732     // Norm to range [0.0;1.0]
00733     // 2.0      0.0     (shift to left border)
00734     // 8.0      0.75    (6.0/8.0)
00735     // 10.0     1.0     (shift to right border)
00736     normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);
00737 @endcode
00738 
00739 @param src input array.
00740 @param dst output array of the same size as src .
00741 @param alpha norm value to normalize to or the lower range boundary in case of the range
00742 normalization.
00743 @param beta upper range boundary in case of the range normalization; it is not used for the norm
00744 normalization.
00745 @param norm_type normalization type (see cv::NormTypes).
00746 @param dtype when negative, the output array has the same type as src; otherwise, it has the same
00747 number of channels as src and the depth =CV_MAT_DEPTH(dtype).
00748 @param mask optional operation mask.
00749 @sa norm, Mat::convertTo, SparseMat::convertTo
00750 */
00751 CV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
00752                              int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
00753 
00754 /** @overload
00755 @param src input array.
00756 @param dst output array of the same size as src .
00757 @param alpha norm value to normalize to or the lower range boundary in case of the range
00758 normalization.
00759 @param normType normalization type (see cv::NormTypes).
00760 */
00761 CV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );
00762 
00763 /** @brief Finds the global minimum and maximum in an array.
00764 
00765 The functions minMaxLoc find the minimum and maximum element values and their positions. The
00766 extremums are searched across the whole array or, if mask is not an empty array, in the specified
00767 array region.
00768 
00769 The functions do not work with multi-channel arrays. If you need to find minimum or maximum
00770 elements across all the channels, use Mat::reshape first to reinterpret the array as
00771 single-channel. Or you may extract the particular channel using either extractImageCOI , or
00772 mixChannels , or split .
00773 @param src input single-channel array.
00774 @param minVal pointer to the returned minimum value; NULL is used if not required.
00775 @param maxVal pointer to the returned maximum value; NULL is used if not required.
00776 @param minLoc pointer to the returned minimum location (in 2D case); NULL is used if not required.
00777 @param maxLoc pointer to the returned maximum location (in 2D case); NULL is used if not required.
00778 @param mask optional mask used to select a sub-array.
00779 @sa max, min, compare, inRange, extractImageCOI, mixChannels, split, Mat::reshape
00780 */
00781 CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,
00782                             CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
00783                             CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
00784 
00785 
00786 /** @brief Finds the global minimum and maximum in an array
00787 
00788 The function minMaxIdx finds the minimum and maximum element values and their positions. The
00789 extremums are searched across the whole array or, if mask is not an empty array, in the specified
00790 array region. The function does not work with multi-channel arrays. If you need to find minimum or
00791 maximum elements across all the channels, use Mat::reshape first to reinterpret the array as
00792 single-channel. Or you may extract the particular channel using either extractImageCOI , or
00793 mixChannels , or split . In case of a sparse matrix, the minimum is found among non-zero elements
00794 only.
00795 @note When minIdx is not NULL, it must have at least 2 elements (as well as maxIdx), even if src is
00796 a single-row or single-column matrix. In OpenCV (following MATLAB) each array has at least 2
00797 dimensions, i.e. single-column matrix is Mx1 matrix (and therefore minIdx/maxIdx will be
00798 (i1,0)/(i2,0)) and single-row matrix is 1xN matrix (and therefore minIdx/maxIdx will be
00799 (0,j1)/(0,j2)).
00800 @param src input single-channel array.
00801 @param minVal pointer to the returned minimum value; NULL is used if not required.
00802 @param maxVal pointer to the returned maximum value; NULL is used if not required.
00803 @param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;
00804 Otherwise, it must point to an array of src.dims elements, the coordinates of the minimum element
00805 in each dimension are stored there sequentially.
00806 @param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.
00807 @param mask specified array region
00808 */
00809 CV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal = 0,
00810                           int* minIdx = 0, int* maxIdx = 0, InputArray mask = noArray());
00811 
00812 /** @overload
00813 @param a input single-channel array.
00814 @param minVal pointer to the returned minimum value; NULL is used if not required.
00815 @param maxVal pointer to the returned maximum value; NULL is used if not required.
00816 @param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;
00817 Otherwise, it must point to an array of src.dims elements, the coordinates of the minimum element
00818 in each dimension are stored there sequentially.
00819 @param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.
00820 */
00821 CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,
00822                           double* maxVal, int* minIdx = 0, int* maxIdx = 0);
00823 
00824 /** @brief Reduces a matrix to a vector.
00825 
00826 The function reduce reduces the matrix to a vector by treating the matrix rows/columns as a set of
00827 1D vectors and performing the specified operation on the vectors until a single row/column is
00828 obtained. For example, the function can be used to compute horizontal and vertical projections of a
00829 raster image. In case of REDUCE_SUM and REDUCE_AVG , the output may have a larger element
00830 bit-depth to preserve accuracy. And multi-channel arrays are also supported in these two reduction
00831 modes.
00832 @param src input 2D matrix.
00833 @param dst output vector. Its size and type is defined by dim and dtype parameters.
00834 @param dim dimension index along which the matrix is reduced. 0 means that the matrix is reduced to
00835 a single row. 1 means that the matrix is reduced to a single column.
00836 @param rtype reduction operation that could be one of cv::ReduceTypes
00837 @param dtype when negative, the output vector will have the same type as the input matrix,
00838 otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()).
00839 @sa repeat
00840 */
00841 CV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype = -1);
00842 
00843 /** @brief Creates one multi-channel array out of several single-channel ones.
00844 
00845 The function merge merges several arrays to make a single multi-channel array. That is, each
00846 element of the output array will be a concatenation of the elements of the input arrays, where
00847 elements of i-th input array are treated as mv[i].channels()-element vectors.
00848 
00849 The function cv::split does the reverse operation. If you need to shuffle channels in some other
00850 advanced way, use cv::mixChannels.
00851 @param mv input array of matrices to be merged; all the matrices in mv must have the same
00852 size and the same depth.
00853 @param count number of input matrices when mv is a plain C array; it must be greater than zero.
00854 @param dst output array of the same size and the same depth as mv[0]; The number of channels will
00855 be equal to the parameter count.
00856 @sa  mixChannels, split, Mat::reshape
00857 */
00858 CV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);
00859 
00860 /** @overload
00861 @param mv input vector of matrices to be merged; all the matrices in mv must have the same
00862 size and the same depth.
00863 @param dst output array of the same size and the same depth as mv[0]; The number of channels will
00864 be the total number of channels in the matrix array.
00865   */
00866 CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst);
00867 
00868 /** @brief Divides a multi-channel array into several single-channel arrays.
00869 
00870 The functions split split a multi-channel array into separate single-channel arrays:
00871 \f[\texttt{mv} [c](I) =  \texttt{src} (I)_c\f]
00872 If you need to extract a single channel or do some other sophisticated channel permutation, use
00873 mixChannels .
00874 @param src input multi-channel array.
00875 @param mvbegin output array; the number of arrays must match src.channels(); the arrays themselves are
00876 reallocated, if needed.
00877 @sa merge, mixChannels, cvtColor
00878 */
00879 CV_EXPORTS void split(const Mat& src, Mat* mvbegin);
00880 
00881 /** @overload
00882 @param m input multi-channel array.
00883 @param mv output vector of arrays; the arrays themselves are reallocated, if needed.
00884 */
00885 CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);
00886 
00887 /** @brief Copies specified channels from input arrays to the specified channels of
00888 output arrays.
00889 
00890 The function cv::mixChannels provides an advanced mechanism for shuffling image channels.
00891 
00892 cv::split and cv::merge and some forms of cv::cvtColor are partial cases of cv::mixChannels .
00893 
00894 In the example below, the code splits a 4-channel BGRA image into a 3-channel BGR (with B and R
00895 channels swapped) and a separate alpha-channel image:
00896 @code{.cpp}
00897     Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) );
00898     Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );
00899     Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );
00900 
00901     // forming an array of matrices is a quite efficient operation,
00902     // because the matrix data is not copied, only the headers
00903     Mat out[] = { bgr, alpha };
00904     // bgra[0] -> bgr[2], bgra[1] -> bgr[1],
00905     // bgra[2] -> bgr[0], bgra[3] -> alpha[0]
00906     int from_to[] = { 0,2, 1,1, 2,0, 3,3 };
00907     mixChannels( &bgra, 1, out, 2, from_to, 4 );
00908 @endcode
00909 @note Unlike many other new-style C++ functions in OpenCV (see the introduction section and
00910 Mat::create ), cv::mixChannels requires the output arrays to be pre-allocated before calling the
00911 function.
00912 @param src input array or vector of matrices; all of the matrices must have the same size and the
00913 same depth.
00914 @param nsrcs number of matrices in `src`.
00915 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
00916 depth must be the same as in `src[0]`.
00917 @param ndsts number of matrices in `dst`.
00918 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
00919 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
00920 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
00921 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
00922 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
00923 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
00924 filled with zero .
00925 @param npairs number of index pairs in `fromTo`.
00926 @sa cv::split, cv::merge, cv::cvtColor
00927 */
00928 CV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,
00929                             const int* fromTo, size_t npairs);
00930 
00931 /** @overload
00932 @param src input array or vector of matrices; all of the matrices must have the same size and the
00933 same depth.
00934 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
00935 depth must be the same as in src[0].
00936 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
00937 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
00938 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
00939 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
00940 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
00941 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
00942 filled with zero .
00943 @param npairs number of index pairs in fromTo.
00944 */
00945 CV_EXPORTS void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
00946                             const int* fromTo, size_t npairs);
00947 
00948 /** @overload
00949 @param src input array or vector of matrices; all of the matrices must have the same size and the
00950 same depth.
00951 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
00952 depth must be the same as in src[0].
00953 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
00954 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
00955 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
00956 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
00957 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
00958 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
00959 filled with zero .
00960 */
00961 CV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
00962                               const std::vector<int>& fromTo);
00963 
00964 /** @brief extracts a single channel from src (coi is 0-based index)
00965 @todo document
00966 */
00967 CV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi);
00968 
00969 /** @brief inserts a single channel to dst (coi is 0-based index)
00970 @todo document
00971 */
00972 CV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi);
00973 
00974 /** @brief Flips a 2D array around vertical, horizontal, or both axes.
00975 
00976 The function flip flips the array in one of three different ways (row
00977 and column indices are 0-based):
00978 \f[\texttt{dst} _{ij} =
00979 \left\{
00980 \begin{array}{l l}
00981 \texttt{src} _{\texttt{src.rows}-i-1,j} & if\;  \texttt{flipCode} = 0 \\
00982 \texttt{src} _{i, \texttt{src.cols} -j-1} & if\;  \texttt{flipCode} > 0 \\
00983 \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\
00984 \end{array}
00985 \right.\f]
00986 The example scenarios of using the function are the following:
00987 *   Vertical flipping of the image (flipCode == 0) to switch between
00988     top-left and bottom-left image origin. This is a typical operation
00989     in video processing on Microsoft Windows\* OS.
00990 *   Horizontal flipping of the image with the subsequent horizontal
00991     shift and absolute difference calculation to check for a
00992     vertical-axis symmetry (flipCode > 0).
00993 *   Simultaneous horizontal and vertical flipping of the image with
00994     the subsequent shift and absolute difference calculation to check
00995     for a central symmetry (flipCode < 0).
00996 *   Reversing the order of point arrays (flipCode > 0 or
00997     flipCode == 0).
00998 @param src input array.
00999 @param dst output array of the same size and type as src.
01000 @param flipCode a flag to specify how to flip the array; 0 means
01001 flipping around the x-axis and positive value (for example, 1) means
01002 flipping around y-axis. Negative value (for example, -1) means flipping
01003 around both axes.
01004 @sa transpose , repeat , completeSymm
01005 */
01006 CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);
01007 
01008 /** @brief Fills the output array with repeated copies of the input array.
01009 
01010 The functions repeat duplicate the input array one or more times along each of the two axes:
01011 \f[\texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }\f]
01012 The second variant of the function is more convenient to use with @ref MatrixExpressions.
01013 @param src input array to replicate.
01014 @param dst output array of the same type as src.
01015 @param ny Flag to specify how many times the src is repeated along the
01016 vertical axis.
01017 @param nx Flag to specify how many times the src is repeated along the
01018 horizontal axis.
01019 @sa reduce
01020 */
01021 CV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst);
01022 
01023 /** @overload
01024 @param src input array to replicate.
01025 @param ny Flag to specify how many times the src is repeated along the
01026 vertical axis.
01027 @param nx Flag to specify how many times the src is repeated along the
01028 horizontal axis.
01029   */
01030 CV_EXPORTS Mat repeat(const Mat& src, int ny, int nx);
01031 
01032 /** @brief Applies horizontal concatenation to given matrices.
01033 
01034 The function horizontally concatenates two or more cv::Mat matrices (with the same number of rows).
01035 @code{.cpp}
01036     cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
01037                            cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
01038                            cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
01039 
01040     cv::Mat out;
01041     cv::hconcat( matArray, 3, out );
01042     //out:
01043     //[1, 2, 3;
01044     // 1, 2, 3;
01045     // 1, 2, 3;
01046     // 1, 2, 3]
01047 @endcode
01048 @param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
01049 @param nsrc number of matrices in src.
01050 @param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.
01051 @sa cv::vconcat(const Mat*, size_t, OutputArray), @sa cv::vconcat(InputArrayOfArrays, OutputArray) and @sa cv::vconcat(InputArray, InputArray, OutputArray)
01052 */
01053 CV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);
01054 /** @overload
01055  @code{.cpp}
01056     cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 4,
01057                                                   2, 5,
01058                                                   3, 6);
01059     cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 7, 10,
01060                                                   8, 11,
01061                                                   9, 12);
01062 
01063     cv::Mat C;
01064     cv::hconcat(A, B, C);
01065     //C:
01066     //[1, 4, 7, 10;
01067     // 2, 5, 8, 11;
01068     // 3, 6, 9, 12]
01069  @endcode
01070  @param src1 first input array to be considered for horizontal concatenation.
01071  @param src2 second input array to be considered for horizontal concatenation.
01072  @param dst output array. It has the same number of rows and depth as the src1 and src2, and the sum of cols of the src1 and src2.
01073  */
01074 CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);
01075 /** @overload
01076  @code{.cpp}
01077     std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
01078                                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
01079                                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
01080 
01081     cv::Mat out;
01082     cv::hconcat( matrices, out );
01083     //out:
01084     //[1, 2, 3;
01085     // 1, 2, 3;
01086     // 1, 2, 3;
01087     // 1, 2, 3]
01088  @endcode
01089  @param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
01090  @param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.
01091 same depth.
01092  */
01093 CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);
01094 
01095 /** @brief Applies vertical concatenation to given matrices.
01096 
01097 The function vertically concatenates two or more cv::Mat matrices (with the same number of cols).
01098 @code{.cpp}
01099     cv::Mat matArray[] = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
01100                            cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
01101                            cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
01102 
01103     cv::Mat out;
01104     cv::vconcat( matArray, 3, out );
01105     //out:
01106     //[1,   1,   1,   1;
01107     // 2,   2,   2,   2;
01108     // 3,   3,   3,   3]
01109 @endcode
01110 @param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth.
01111 @param nsrc number of matrices in src.
01112 @param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.
01113 @sa cv::hconcat(const Mat*, size_t, OutputArray), @sa cv::hconcat(InputArrayOfArrays, OutputArray) and @sa cv::hconcat(InputArray, InputArray, OutputArray)
01114 */
01115 CV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);
01116 /** @overload
01117  @code{.cpp}
01118     cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 7,
01119                                                   2, 8,
01120                                                   3, 9);
01121     cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 4, 10,
01122                                                   5, 11,
01123                                                   6, 12);
01124 
01125     cv::Mat C;
01126     cv::vconcat(A, B, C);
01127     //C:
01128     //[1, 7;
01129     // 2, 8;
01130     // 3, 9;
01131     // 4, 10;
01132     // 5, 11;
01133     // 6, 12]
01134  @endcode
01135  @param src1 first input array to be considered for vertical concatenation.
01136  @param src2 second input array to be considered for vertical concatenation.
01137  @param dst output array. It has the same number of cols and depth as the src1 and src2, and the sum of rows of the src1 and src2.
01138  */
01139 CV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);
01140 /** @overload
01141  @code{.cpp}
01142     std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
01143                                       cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
01144                                       cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
01145 
01146     cv::Mat out;
01147     cv::vconcat( matrices, out );
01148     //out:
01149     //[1,   1,   1,   1;
01150     // 2,   2,   2,   2;
01151     // 3,   3,   3,   3]
01152  @endcode
01153  @param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth
01154  @param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.
01155 same depth.
01156  */
01157 CV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);
01158 
01159 /** @brief computes bitwise conjunction of the two arrays (dst = src1 & src2)
01160 Calculates the per-element bit-wise conjunction of two arrays or an
01161 array and a scalar.
01162 
01163 The function calculates the per-element bit-wise logical conjunction for:
01164 *   Two arrays when src1 and src2 have the same size:
01165     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01166 *   An array and a scalar when src2 is constructed from Scalar or has
01167     the same number of elements as `src1.channels()`:
01168     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
01169 *   A scalar and an array when src1 is constructed from Scalar or has
01170     the same number of elements as `src2.channels()`:
01171     \f[\texttt{dst} (I) =  \texttt{src1}  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01172 In case of floating-point arrays, their machine-specific bit
01173 representations (usually IEEE754-compliant) are used for the operation.
01174 In case of multi-channel arrays, each channel is processed
01175 independently. In the second and third cases above, the scalar is first
01176 converted to the array type.
01177 @param src1 first input array or a scalar.
01178 @param src2 second input array or a scalar.
01179 @param dst output array that has the same size and type as the input
01180 arrays.
01181 @param mask optional operation mask, 8-bit single channel array, that
01182 specifies elements of the output array to be changed.
01183 */
01184 CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
01185                               OutputArray dst, InputArray mask = noArray());
01186 
01187 /** @brief Calculates the per-element bit-wise disjunction of two arrays or an
01188 array and a scalar.
01189 
01190 The function calculates the per-element bit-wise logical disjunction for:
01191 *   Two arrays when src1 and src2 have the same size:
01192     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01193 *   An array and a scalar when src2 is constructed from Scalar or has
01194     the same number of elements as `src1.channels()`:
01195     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
01196 *   A scalar and an array when src1 is constructed from Scalar or has
01197     the same number of elements as `src2.channels()`:
01198     \f[\texttt{dst} (I) =  \texttt{src1}  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01199 In case of floating-point arrays, their machine-specific bit
01200 representations (usually IEEE754-compliant) are used for the operation.
01201 In case of multi-channel arrays, each channel is processed
01202 independently. In the second and third cases above, the scalar is first
01203 converted to the array type.
01204 @param src1 first input array or a scalar.
01205 @param src2 second input array or a scalar.
01206 @param dst output array that has the same size and type as the input
01207 arrays.
01208 @param mask optional operation mask, 8-bit single channel array, that
01209 specifies elements of the output array to be changed.
01210 */
01211 CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,
01212                              OutputArray dst, InputArray mask = noArray());
01213 
01214 /** @brief Calculates the per-element bit-wise "exclusive or" operation on two
01215 arrays or an array and a scalar.
01216 
01217 The function calculates the per-element bit-wise logical "exclusive-or"
01218 operation for:
01219 *   Two arrays when src1 and src2 have the same size:
01220     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01221 *   An array and a scalar when src2 is constructed from Scalar or has
01222     the same number of elements as `src1.channels()`:
01223     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
01224 *   A scalar and an array when src1 is constructed from Scalar or has
01225     the same number of elements as `src2.channels()`:
01226     \f[\texttt{dst} (I) =  \texttt{src1}  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
01227 In case of floating-point arrays, their machine-specific bit
01228 representations (usually IEEE754-compliant) are used for the operation.
01229 In case of multi-channel arrays, each channel is processed
01230 independently. In the 2nd and 3rd cases above, the scalar is first
01231 converted to the array type.
01232 @param src1 first input array or a scalar.
01233 @param src2 second input array or a scalar.
01234 @param dst output array that has the same size and type as the input
01235 arrays.
01236 @param mask optional operation mask, 8-bit single channel array, that
01237 specifies elements of the output array to be changed.
01238 */
01239 CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,
01240                               OutputArray dst, InputArray mask = noArray());
01241 
01242 /** @brief  Inverts every bit of an array.
01243 
01244 The function calculates per-element bit-wise inversion of the input
01245 array:
01246 \f[\texttt{dst} (I) =  \neg \texttt{src} (I)\f]
01247 In case of a floating-point input array, its machine-specific bit
01248 representation (usually IEEE754-compliant) is used for the operation. In
01249 case of multi-channel arrays, each channel is processed independently.
01250 @param src input array.
01251 @param dst output array that has the same size and type as the input
01252 array.
01253 @param mask optional operation mask, 8-bit single channel array, that
01254 specifies elements of the output array to be changed.
01255 */
01256 CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,
01257                               InputArray mask = noArray());
01258 
01259 /** @brief Calculates the per-element absolute difference between two arrays or between an array and a scalar.
01260 
01261 The function absdiff calculates:
01262 *   Absolute difference between two arrays when they have the same
01263     size and type:
01264     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2}(I)|)\f]
01265 *   Absolute difference between an array and a scalar when the second
01266     array is constructed from Scalar or has as many elements as the
01267     number of channels in `src1`:
01268     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2} |)\f]
01269 *   Absolute difference between a scalar and an array when the first
01270     array is constructed from Scalar or has as many elements as the
01271     number of channels in `src2`:
01272     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1} -  \texttt{src2}(I) |)\f]
01273     where I is a multi-dimensional index of array elements. In case of
01274     multi-channel arrays, each channel is processed independently.
01275 @note Saturation is not applied when the arrays have the depth CV_32S.
01276 You may even get a negative value in the case of overflow.
01277 @param src1 first input array or a scalar.
01278 @param src2 second input array or a scalar.
01279 @param dst output array that has the same size and type as input arrays.
01280 @sa cv::abs(const Mat&)
01281 */
01282 CV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst);
01283 
01284 /** @brief  Checks if array elements lie between the elements of two other arrays.
01285 
01286 The function checks the range as follows:
01287 -   For every element of a single-channel input array:
01288     \f[\texttt{dst} (I)= \texttt{lowerb} (I)_0  \leq \texttt{src} (I)_0 \leq  \texttt{upperb} (I)_0\f]
01289 -   For two-channel arrays:
01290     \f[\texttt{dst} (I)= \texttt{lowerb} (I)_0  \leq \texttt{src} (I)_0 \leq  \texttt{upperb} (I)_0  \land \texttt{lowerb} (I)_1  \leq \texttt{src} (I)_1 \leq  \texttt{upperb} (I)_1\f]
01291 -   and so forth.
01292 
01293 That is, dst (I) is set to 255 (all 1 -bits) if src (I) is within the
01294 specified 1D, 2D, 3D, ... box and 0 otherwise.
01295 
01296 When the lower and/or upper boundary parameters are scalars, the indexes
01297 (I) at lowerb and upperb in the above formulas should be omitted.
01298 @param src first input array.
01299 @param lowerb inclusive lower boundary array or a scalar.
01300 @param upperb inclusive upper boundary array or a scalar.
01301 @param dst output array of the same size as src and CV_8U type.
01302 */
01303 CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,
01304                           InputArray upperb, OutputArray dst);
01305 
01306 /** @brief Performs the per-element comparison of two arrays or an array and scalar value.
01307 
01308 The function compares:
01309 *   Elements of two arrays when src1 and src2 have the same size:
01310     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \,\texttt{cmpop}\, \texttt{src2} (I)\f]
01311 *   Elements of src1 with a scalar src2 when src2 is constructed from
01312     Scalar or has a single element:
01313     \f[\texttt{dst} (I) =  \texttt{src1}(I) \,\texttt{cmpop}\,  \texttt{src2}\f]
01314 *   src1 with elements of src2 when src1 is constructed from Scalar or
01315     has a single element:
01316     \f[\texttt{dst} (I) =  \texttt{src1}  \,\texttt{cmpop}\, \texttt{src2} (I)\f]
01317 When the comparison result is true, the corresponding element of output
01318 array is set to 255. The comparison operations can be replaced with the
01319 equivalent matrix expressions:
01320 @code{.cpp}
01321     Mat dst1 = src1 >= src2;
01322     Mat dst2 = src1 < 8;
01323     ...
01324 @endcode
01325 @param src1 first input array or a scalar; when it is an array, it must have a single channel.
01326 @param src2 second input array or a scalar; when it is an array, it must have a single channel.
01327 @param dst output array of type ref CV_8U that has the same size and the same number of channels as
01328     the input arrays.
01329 @param cmpop a flag, that specifies correspondence between the arrays (cv::CmpTypes)
01330 @sa checkRange, min, max, threshold
01331 */
01332 CV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);
01333 
01334 /** @brief Calculates per-element minimum of two arrays or an array and a scalar.
01335 
01336 The functions min calculate the per-element minimum of two arrays:
01337 \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))\f]
01338 or array and a scalar:
01339 \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )\f]
01340 @param src1 first input array.
01341 @param src2 second input array of the same size and type as src1.
01342 @param dst output array of the same size and type as src1.
01343 @sa max, compare, inRange, minMaxLoc
01344 */
01345 CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst);
01346 /** @overload
01347 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
01348 */
01349 CV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst);
01350 /** @overload
01351 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
01352 */
01353 CV_EXPORTS void min(const UMat& src1, const UMat& src2, UMat& dst);
01354 
01355 /** @brief Calculates per-element maximum of two arrays or an array and a scalar.
01356 
01357 The functions max calculate the per-element maximum of two arrays:
01358 \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))\f]
01359 or array and a scalar:
01360 \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )\f]
01361 @param src1 first input array.
01362 @param src2 second input array of the same size and type as src1 .
01363 @param dst output array of the same size and type as src1.
01364 @sa  min, compare, inRange, minMaxLoc, @ref MatrixExpressions
01365 */
01366 CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst);
01367 /** @overload
01368 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
01369 */
01370 CV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst);
01371 /** @overload
01372 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
01373 */
01374 CV_EXPORTS void max(const UMat& src1, const UMat& src2, UMat& dst);
01375 
01376 /** @brief Calculates a square root of array elements.
01377 
01378 The functions sqrt calculate a square root of each input array element.
01379 In case of multi-channel arrays, each channel is processed
01380 independently. The accuracy is approximately the same as of the built-in
01381 std::sqrt .
01382 @param src input floating-point array.
01383 @param dst output array of the same size and type as src.
01384 */
01385 CV_EXPORTS_W void sqrt(InputArray src, OutputArray dst);
01386 
01387 /** @brief Raises every array element to a power.
01388 
01389 The function pow raises every element of the input array to power :
01390 \f[\texttt{dst} (I) =  \fork{\texttt{src}(I)^{power}}{if \(\texttt{power}\) is integer}{|\texttt{src}(I)|^{power}}{otherwise}\f]
01391 
01392 So, for a non-integer power exponent, the absolute values of input array
01393 elements are used. However, it is possible to get true values for
01394 negative values using some extra operations. In the example below,
01395 computing the 5th root of array src shows:
01396 @code{.cpp}
01397     Mat mask = src < 0;
01398     pow(src, 1./5, dst);
01399     subtract(Scalar::all(0), dst, dst, mask);
01400 @endcode
01401 For some values of power, such as integer values, 0.5 and -0.5,
01402 specialized faster algorithms are used.
01403 
01404 Special values (NaN, Inf) are not handled.
01405 @param src input array.
01406 @param power exponent of power.
01407 @param dst output array of the same size and type as src.
01408 @sa sqrt, exp, log, cartToPolar, polarToCart
01409 */
01410 CV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst);
01411 
01412 /** @brief Calculates the exponent of every array element.
01413 
01414 The function exp calculates the exponent of every element of the input
01415 array:
01416 \f[\texttt{dst} [I] = e^{ src(I) }\f]
01417 
01418 The maximum relative error is about 7e-6 for single-precision input and
01419 less than 1e-10 for double-precision input. Currently, the function
01420 converts denormalized values to zeros on output. Special values (NaN,
01421 Inf) are not handled.
01422 @param src input array.
01423 @param dst output array of the same size and type as src.
01424 @sa log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude
01425 */
01426 CV_EXPORTS_W void exp(InputArray src, OutputArray dst);
01427 
01428 /** @brief Calculates the natural logarithm of every array element.
01429 
01430 The function log calculates the natural logarithm of the absolute value
01431 of every element of the input array:
01432 \f[\texttt{dst} (I) =  \fork{\log |\texttt{src}(I)|}{if \(\texttt{src}(I) \ne 0\) }{\texttt{C}}{otherwise}\f]
01433 
01434 where C is a large negative number (about -700 in the current
01435 implementation). The maximum relative error is about 7e-6 for
01436 single-precision input and less than 1e-10 for double-precision input.
01437 Special values (NaN, Inf) are not handled.
01438 @param src input array.
01439 @param dst output array of the same size and type as src .
01440 @sa exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude
01441 */
01442 CV_EXPORTS_W void log(InputArray src, OutputArray dst);
01443 
01444 /** @brief Calculates x and y coordinates of 2D vectors from their magnitude and angle.
01445 
01446 The function polarToCart calculates the Cartesian coordinates of each 2D
01447 vector represented by the corresponding elements of magnitude and angle:
01448 \f[\begin{array}{l} \texttt{x} (I) =  \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) =  \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array}\f]
01449 
01450 The relative accuracy of the estimated coordinates is about 1e-6.
01451 @param magnitude input floating-point array of magnitudes of 2D vectors;
01452 it can be an empty matrix (=Mat()), in this case, the function assumes
01453 that all the magnitudes are =1; if it is not empty, it must have the
01454 same size and type as angle.
01455 @param angle input floating-point array of angles of 2D vectors.
01456 @param x output array of x-coordinates of 2D vectors; it has the same
01457 size and type as angle.
01458 @param y output array of y-coordinates of 2D vectors; it has the same
01459 size and type as angle.
01460 @param angleInDegrees when true, the input angles are measured in
01461 degrees, otherwise, they are measured in radians.
01462 @sa cartToPolar, magnitude, phase, exp, log, pow, sqrt
01463 */
01464 CV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle,
01465                               OutputArray x, OutputArray y, bool angleInDegrees = false);
01466 
01467 /** @brief Calculates the magnitude and angle of 2D vectors.
01468 
01469 The function cartToPolar calculates either the magnitude, angle, or both
01470 for every 2D vector (x(I),y(I)):
01471 \f[\begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}\f]
01472 
01473 The angles are calculated with accuracy about 0.3 degrees. For the point
01474 (0,0), the angle is set to 0.
01475 @param x array of x-coordinates; this must be a single-precision or
01476 double-precision floating-point array.
01477 @param y array of y-coordinates, that must have the same size and same type as x.
01478 @param magnitude output array of magnitudes of the same size and type as x.
01479 @param angle output array of angles that has the same size and type as
01480 x; the angles are measured in radians (from 0 to 2\*Pi) or in degrees (0 to 360 degrees).
01481 @param angleInDegrees a flag, indicating whether the angles are measured
01482 in radians (which is by default), or in degrees.
01483 @sa Sobel, Scharr
01484 */
01485 CV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,
01486                               OutputArray magnitude, OutputArray angle,
01487                               bool angleInDegrees = false);
01488 
01489 /** @brief Calculates the rotation angle of 2D vectors.
01490 
01491 The function phase calculates the rotation angle of each 2D vector that
01492 is formed from the corresponding elements of x and y :
01493 \f[\texttt{angle} (I) =  \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\f]
01494 
01495 The angle estimation accuracy is about 0.3 degrees. When x(I)=y(I)=0 ,
01496 the corresponding angle(I) is set to 0.
01497 @param x input floating-point array of x-coordinates of 2D vectors.
01498 @param y input array of y-coordinates of 2D vectors; it must have the
01499 same size and the same type as x.
01500 @param angle output array of vector angles; it has the same size and
01501 same type as x .
01502 @param angleInDegrees when true, the function calculates the angle in
01503 degrees, otherwise, they are measured in radians.
01504 */
01505 CV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle,
01506                         bool angleInDegrees = false);
01507 
01508 /** @brief Calculates the magnitude of 2D vectors.
01509 
01510 The function magnitude calculates the magnitude of 2D vectors formed
01511 from the corresponding elements of x and y arrays:
01512 \f[\texttt{dst} (I) =  \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}\f]
01513 @param x floating-point array of x-coordinates of the vectors.
01514 @param y floating-point array of y-coordinates of the vectors; it must
01515 have the same size as x.
01516 @param magnitude output array of the same size and type as x.
01517 @sa cartToPolar, polarToCart, phase, sqrt
01518 */
01519 CV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);
01520 
01521 /** @brief Checks every element of an input array for invalid values.
01522 
01523 The functions checkRange check that every array element is neither NaN nor infinite. When minVal >
01524 -DBL_MAX and maxVal < DBL_MAX, the functions also check that each value is between minVal and
01525 maxVal. In case of multi-channel arrays, each channel is processed independently. If some values
01526 are out of range, position of the first outlier is stored in pos (when pos != NULL). Then, the
01527 functions either return false (when quiet=true) or throw an exception.
01528 @param a input array.
01529 @param quiet a flag, indicating whether the functions quietly return false when the array elements
01530 are out of range or they throw an exception.
01531 @param pos optional output parameter, when not NULL, must be a pointer to array of src.dims
01532 elements.
01533 @param minVal inclusive lower boundary of valid values range.
01534 @param maxVal exclusive upper boundary of valid values range.
01535 */
01536 CV_EXPORTS_W bool checkRange(InputArray a, bool quiet = true, CV_OUT Point* pos = 0,
01537                             double minVal = -DBL_MAX, double maxVal = DBL_MAX);
01538 
01539 /** @brief converts NaN's to the given number
01540 */
01541 CV_EXPORTS_W void patchNaNs(InputOutputArray a, double val = 0);
01542 
01543 /** @brief Performs generalized matrix multiplication.
01544 
01545 The function performs generalized matrix multiplication similar to the
01546 gemm functions in BLAS level 3. For example,
01547 `gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)`
01548 corresponds to
01549 \f[\texttt{dst} =  \texttt{alpha} \cdot \texttt{src1} ^T  \cdot \texttt{src2} +  \texttt{beta} \cdot \texttt{src3} ^T\f]
01550 
01551 In case of complex (two-channel) data, performed a complex matrix
01552 multiplication.
01553 
01554 The function can be replaced with a matrix expression. For example, the
01555 above call can be replaced with:
01556 @code{.cpp}
01557     dst = alpha*src1.t()*src2 + beta*src3.t();
01558 @endcode
01559 @param src1 first multiplied input matrix that could be real(CV_32FC1,
01560 CV_64FC1) or complex(CV_32FC2, CV_64FC2).
01561 @param src2 second multiplied input matrix of the same type as src1.
01562 @param alpha weight of the matrix product.
01563 @param src3 third optional delta matrix added to the matrix product; it
01564 should have the same type as src1 and src2.
01565 @param beta weight of src3.
01566 @param dst output matrix; it has the proper size and the same type as
01567 input matrices.
01568 @param flags operation flags (cv::GemmFlags)
01569 @sa mulTransposed , transform
01570 */
01571 CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,
01572                        InputArray src3, double beta, OutputArray dst, int flags = 0);
01573 
01574 /** @brief Calculates the product of a matrix and its transposition.
01575 
01576 The function mulTransposed calculates the product of src and its
01577 transposition:
01578 \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\f]
01579 if aTa=true , and
01580 \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\f]
01581 otherwise. The function is used to calculate the covariance matrix. With
01582 zero delta, it can be used as a faster substitute for general matrix
01583 product A\*B when B=A'
01584 @param src input single-channel matrix. Note that unlike gemm, the
01585 function can multiply not only floating-point matrices.
01586 @param dst output square matrix.
01587 @param aTa Flag specifying the multiplication ordering. See the
01588 description below.
01589 @param delta Optional delta matrix subtracted from src before the
01590 multiplication. When the matrix is empty ( delta=noArray() ), it is
01591 assumed to be zero, that is, nothing is subtracted. If it has the same
01592 size as src , it is simply subtracted. Otherwise, it is "repeated" (see
01593 repeat ) to cover the full src and then subtracted. Type of the delta
01594 matrix, when it is not empty, must be the same as the type of created
01595 output matrix. See the dtype parameter description below.
01596 @param scale Optional scale factor for the matrix product.
01597 @param dtype Optional type of the output matrix. When it is negative,
01598 the output matrix will have the same type as src . Otherwise, it will be
01599 type=CV_MAT_DEPTH(dtype) that should be either CV_32F or CV_64F .
01600 @sa calcCovarMatrix, gemm, repeat, reduce
01601 */
01602 CV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa,
01603                                  InputArray delta = noArray(),
01604                                  double scale = 1, int dtype = -1 );
01605 
01606 /** @brief Transposes a matrix.
01607 
01608 The function transpose transposes the matrix src :
01609 \f[\texttt{dst} (i,j) =  \texttt{src} (j,i)\f]
01610 @note No complex conjugation is done in case of a complex matrix. It it
01611 should be done separately if needed.
01612 @param src input array.
01613 @param dst output array of the same type as src.
01614 */
01615 CV_EXPORTS_W void transpose(InputArray src, OutputArray dst);
01616 
01617 /** @brief Performs the matrix transformation of every array element.
01618 
01619 The function transform performs the matrix transformation of every
01620 element of the array src and stores the results in dst :
01621 \f[\texttt{dst} (I) =  \texttt{m} \cdot \texttt{src} (I)\f]
01622 (when m.cols=src.channels() ), or
01623 \f[\texttt{dst} (I) =  \texttt{m} \cdot [ \texttt{src} (I); 1]\f]
01624 (when m.cols=src.channels()+1 )
01625 
01626 Every element of the N -channel array src is interpreted as N -element
01627 vector that is transformed using the M x N or M x (N+1) matrix m to
01628 M-element vector - the corresponding element of the output array dst .
01629 
01630 The function may be used for geometrical transformation of
01631 N -dimensional points, arbitrary linear color space transformation (such
01632 as various kinds of RGB to YUV transforms), shuffling the image
01633 channels, and so forth.
01634 @param src input array that must have as many channels (1 to 4) as
01635 m.cols or m.cols-1.
01636 @param dst output array of the same size and depth as src; it has as
01637 many channels as m.rows.
01638 @param m transformation 2x2 or 2x3 floating-point matrix.
01639 @sa perspectiveTransform, getAffineTransform, estimateRigidTransform, warpAffine, warpPerspective
01640 */
01641 CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m );
01642 
01643 /** @brief Performs the perspective matrix transformation of vectors.
01644 
01645 The function perspectiveTransform transforms every element of src by
01646 treating it as a 2D or 3D vector, in the following way:
01647 \f[(x, y, z)  \rightarrow (x'/w, y'/w, z'/w)\f]
01648 where
01649 \f[(x', y', z', w') =  \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1  \end{bmatrix}\f]
01650 and
01651 \f[w =  \fork{w'}{if \(w' \ne 0\)}{\infty}{otherwise}\f]
01652 
01653 Here a 3D vector transformation is shown. In case of a 2D vector
01654 transformation, the z component is omitted.
01655 
01656 @note The function transforms a sparse set of 2D or 3D vectors. If you
01657 want to transform an image using perspective transformation, use
01658 warpPerspective . If you have an inverse problem, that is, you want to
01659 compute the most probable perspective transformation out of several
01660 pairs of corresponding points, you can use getPerspectiveTransform or
01661 findHomography .
01662 @param src input two-channel or three-channel floating-point array; each
01663 element is a 2D/3D vector to be transformed.
01664 @param dst output array of the same size and type as src.
01665 @param m 3x3 or 4x4 floating-point transformation matrix.
01666 @sa  transform, warpPerspective, getPerspectiveTransform, findHomography
01667 */
01668 CV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m );
01669 
01670 /** @brief Copies the lower or the upper half of a square matrix to another half.
01671 
01672 The function completeSymm copies the lower half of a square matrix to
01673 its another half. The matrix diagonal remains unchanged:
01674 *   \f$\texttt{mtx}_{ij}=\texttt{mtx}_{ji}\f$ for \f$i > j\f$ if
01675     lowerToUpper=false
01676 *   \f$\texttt{mtx}_{ij}=\texttt{mtx}_{ji}\f$ for \f$i < j\f$ if
01677     lowerToUpper=true
01678 @param mtx input-output floating-point square matrix.
01679 @param lowerToUpper operation flag; if true, the lower half is copied to
01680 the upper half. Otherwise, the upper half is copied to the lower half.
01681 @sa flip, transpose
01682 */
01683 CV_EXPORTS_W void completeSymm(InputOutputArray mtx, bool lowerToUpper = false);
01684 
01685 /** @brief Initializes a scaled identity matrix.
01686 
01687 The function setIdentity initializes a scaled identity matrix:
01688 \f[\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{otherwise}\f]
01689 
01690 The function can also be emulated using the matrix initializers and the
01691 matrix expressions:
01692 @code
01693     Mat A = Mat::eye(4, 3, CV_32F)*5;
01694     // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]
01695 @endcode
01696 @param mtx matrix to initialize (not necessarily square).
01697 @param s value to assign to diagonal elements.
01698 @sa Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=
01699 */
01700 CV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s = Scalar(1));
01701 
01702 /** @brief Returns the determinant of a square floating-point matrix.
01703 
01704 The function determinant calculates and returns the determinant of the
01705 specified matrix. For small matrices ( mtx.cols=mtx.rows<=3 ), the
01706 direct method is used. For larger matrices, the function uses LU
01707 factorization with partial pivoting.
01708 
01709 For symmetric positively-determined matrices, it is also possible to use
01710 eigen decomposition to calculate the determinant.
01711 @param mtx input matrix that must have CV_32FC1 or CV_64FC1 type and
01712 square size.
01713 @sa trace, invert, solve, eigen, @ref MatrixExpressions
01714 */
01715 CV_EXPORTS_W double determinant(InputArray mtx);
01716 
01717 /** @brief Returns the trace of a matrix.
01718 
01719 The function trace returns the sum of the diagonal elements of the
01720 matrix mtx .
01721 \f[\mathrm{tr} ( \texttt{mtx} ) =  \sum _i  \texttt{mtx} (i,i)\f]
01722 @param mtx input matrix.
01723 */
01724 CV_EXPORTS_W Scalar trace(InputArray mtx);
01725 
01726 /** @brief Finds the inverse or pseudo-inverse of a matrix.
01727 
01728 The function invert inverts the matrix src and stores the result in dst
01729 . When the matrix src is singular or non-square, the function calculates
01730 the pseudo-inverse matrix (the dst matrix) so that norm(src\*dst - I) is
01731 minimal, where I is an identity matrix.
01732 
01733 In case of the DECOMP_LU method, the function returns non-zero value if
01734 the inverse has been successfully calculated and 0 if src is singular.
01735 
01736 In case of the DECOMP_SVD method, the function returns the inverse
01737 condition number of src (the ratio of the smallest singular value to the
01738 largest singular value) and 0 if src is singular. The SVD method
01739 calculates a pseudo-inverse matrix if src is singular.
01740 
01741 Similarly to DECOMP_LU, the method DECOMP_CHOLESKY works only with
01742 non-singular square matrices that should also be symmetrical and
01743 positively defined. In this case, the function stores the inverted
01744 matrix in dst and returns non-zero. Otherwise, it returns 0.
01745 
01746 @param src input floating-point M x N matrix.
01747 @param dst output matrix of N x M size and the same type as src.
01748 @param flags inversion method (cv::DecompTypes)
01749 @sa solve, SVD
01750 */
01751 CV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags = DECOMP_LU);
01752 
01753 /** @brief Solves one or more linear systems or least-squares problems.
01754 
01755 The function solve solves a linear system or least-squares problem (the
01756 latter is possible with SVD or QR methods, or by specifying the flag
01757 DECOMP_NORMAL ):
01758 \f[\texttt{dst} =  \arg \min _X \| \texttt{src1} \cdot \texttt{X} -  \texttt{src2} \|\f]
01759 
01760 If DECOMP_LU or DECOMP_CHOLESKY method is used, the function returns 1
01761 if src1 (or \f$\texttt{src1}^T\texttt{src1}\f$ ) is non-singular. Otherwise,
01762 it returns 0. In the latter case, dst is not valid. Other methods find a
01763 pseudo-solution in case of a singular left-hand side part.
01764 
01765 @note If you want to find a unity-norm solution of an under-defined
01766 singular system \f$\texttt{src1}\cdot\texttt{dst}=0\f$ , the function solve
01767 will not do the work. Use SVD::solveZ instead.
01768 
01769 @param src1 input matrix on the left-hand side of the system.
01770 @param src2 input matrix on the right-hand side of the system.
01771 @param dst output solution.
01772 @param flags solution (matrix inversion) method (cv::DecompTypes)
01773 @sa invert, SVD, eigen
01774 */
01775 CV_EXPORTS_W bool solve(InputArray src1, InputArray src2,
01776                         OutputArray dst, int flags = DECOMP_LU);
01777 
01778 /** @brief Sorts each row or each column of a matrix.
01779 
01780 The function sort sorts each matrix row or each matrix column in
01781 ascending or descending order. So you should pass two operation flags to
01782 get desired behaviour. If you want to sort matrix rows or columns
01783 lexicographically, you can use STL std::sort generic function with the
01784 proper comparison predicate.
01785 
01786 @param src input single-channel array.
01787 @param dst output array of the same size and type as src.
01788 @param flags operation flags, a combination of cv::SortFlags
01789 @sa sortIdx, randShuffle
01790 */
01791 CV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags);
01792 
01793 /** @brief Sorts each row or each column of a matrix.
01794 
01795 The function sortIdx sorts each matrix row or each matrix column in the
01796 ascending or descending order. So you should pass two operation flags to
01797 get desired behaviour. Instead of reordering the elements themselves, it
01798 stores the indices of sorted elements in the output array. For example:
01799 @code
01800     Mat A = Mat::eye(3,3,CV_32F), B;
01801     sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING);
01802     // B will probably contain
01803     // (because of equal elements in A some permutations are possible):
01804     // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]
01805 @endcode
01806 @param src input single-channel array.
01807 @param dst output integer array of the same size as src.
01808 @param flags operation flags that could be a combination of cv::SortFlags
01809 @sa sort, randShuffle
01810 */
01811 CV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags);
01812 
01813 /** @brief Finds the real roots of a cubic equation.
01814 
01815 The function solveCubic finds the real roots of a cubic equation:
01816 -   if coeffs is a 4-element vector:
01817 \f[\texttt{coeffs} [0] x^3 +  \texttt{coeffs} [1] x^2 +  \texttt{coeffs} [2] x +  \texttt{coeffs} [3] = 0\f]
01818 -   if coeffs is a 3-element vector:
01819 \f[x^3 +  \texttt{coeffs} [0] x^2 +  \texttt{coeffs} [1] x +  \texttt{coeffs} [2] = 0\f]
01820 
01821 The roots are stored in the roots array.
01822 @param coeffs equation coefficients, an array of 3 or 4 elements.
01823 @param roots output array of real roots that has 1 or 3 elements.
01824 */
01825 CV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots);
01826 
01827 /** @brief Finds the real or complex roots of a polynomial equation.
01828 
01829 The function solvePoly finds real and complex roots of a polynomial equation:
01830 \f[\texttt{coeffs} [n] x^{n} +  \texttt{coeffs} [n-1] x^{n-1} + ... +  \texttt{coeffs} [1] x +  \texttt{coeffs} [0] = 0\f]
01831 @param coeffs array of polynomial coefficients.
01832 @param roots output (complex) array of roots.
01833 @param maxIters maximum number of iterations the algorithm does.
01834 */
01835 CV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters = 300);
01836 
01837 /** @brief Calculates eigenvalues and eigenvectors of a symmetric matrix.
01838 
01839 The functions eigen calculate just eigenvalues, or eigenvalues and eigenvectors of the symmetric
01840 matrix src:
01841 @code
01842     src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
01843 @endcode
01844 @note in the new and the old interfaces different ordering of eigenvalues and eigenvectors
01845 parameters is used.
01846 @param src input matrix that must have CV_32FC1 or CV_64FC1 type, square size and be symmetrical
01847 (src ^T^ == src).
01848 @param eigenvalues output vector of eigenvalues of the same type as src; the eigenvalues are stored
01849 in the descending order.
01850 @param eigenvectors output matrix of eigenvectors; it has the same size and type as src; the
01851 eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding
01852 eigenvalues.
01853 @sa completeSymm , PCA
01854 */
01855 CV_EXPORTS_W bool eigen(InputArray src, OutputArray eigenvalues,
01856                         OutputArray eigenvectors = noArray());
01857 
01858 /** @brief Calculates the covariance matrix of a set of vectors.
01859 
01860 The functions calcCovarMatrix calculate the covariance matrix and, optionally, the mean vector of
01861 the set of input vectors.
01862 @param samples samples stored as separate matrices
01863 @param nsamples number of samples
01864 @param covar output covariance matrix of the type ctype and square size.
01865 @param mean input or output (depending on the flags) array as the average value of the input vectors.
01866 @param flags operation flags as a combination of cv::CovarFlags
01867 @param ctype type of the matrixl; it equals 'CV_64F' by default.
01868 @sa PCA, mulTransposed, Mahalanobis
01869 @todo InputArrayOfArrays
01870 */
01871 CV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean,
01872                                  int flags, int ctype = CV_64F);
01873 
01874 /** @overload
01875 @note use cv::COVAR_ROWS or cv::COVAR_COLS flag
01876 @param samples samples stored as rows/columns of a single matrix.
01877 @param covar output covariance matrix of the type ctype and square size.
01878 @param mean input or output (depending on the flags) array as the average value of the input vectors.
01879 @param flags operation flags as a combination of cv::CovarFlags
01880 @param ctype type of the matrixl; it equals 'CV_64F' by default.
01881 */
01882 CV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,
01883                                    InputOutputArray mean, int flags, int ctype = CV_64F);
01884 
01885 /** wrap PCA::operator() */
01886 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
01887                              OutputArray eigenvectors, int maxComponents = 0);
01888 
01889 /** wrap PCA::operator() */
01890 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
01891                              OutputArray eigenvectors, double retainedVariance);
01892 
01893 /** wrap PCA::project */
01894 CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,
01895                              InputArray eigenvectors, OutputArray result);
01896 
01897 /** wrap PCA::backProject */
01898 CV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean,
01899                                  InputArray eigenvectors, OutputArray result);
01900 
01901 /** wrap SVD::compute */
01902 CV_EXPORTS_W void SVDecomp( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags = 0 );
01903 
01904 /** wrap SVD::backSubst */
01905 CV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt,
01906                                InputArray rhs, OutputArray dst );
01907 
01908 /** @brief Calculates the Mahalanobis distance between two vectors.
01909 
01910 The function Mahalanobis calculates and returns the weighted distance between two vectors:
01911 \f[d( \texttt{vec1} , \texttt{vec2} )= \sqrt{\sum_{i,j}{\texttt{icovar(i,j)}\cdot(\texttt{vec1}(I)-\texttt{vec2}(I))\cdot(\texttt{vec1(j)}-\texttt{vec2(j)})} }\f]
01912 The covariance matrix may be calculated using the cv::calcCovarMatrix function and then inverted using
01913 the invert function (preferably using the cv::DECOMP_SVD method, as the most accurate).
01914 @param v1 first 1D input vector.
01915 @param v2 second 1D input vector.
01916 @param icovar inverse covariance matrix.
01917 */
01918 CV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar);
01919 
01920 /** @brief Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array.
01921 
01922 The function performs one of the following:
01923 -   Forward the Fourier transform of a 1D vector of N elements:
01924     \f[Y = F^{(N)}  \cdot X,\f]
01925     where \f$F^{(N)}_{jk}=\exp(-2\pi i j k/N)\f$ and \f$i=\sqrt{-1}\f$
01926 -   Inverse the Fourier transform of a 1D vector of N elements:
01927     \f[\begin{array}{l} X'=  \left (F^{(N)} \right )^{-1}  \cdot Y =  \left (F^{(N)} \right )^*  \cdot y  \\ X = (1/N)  \cdot X, \end{array}\f]
01928     where \f$F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\f$
01929 -   Forward the 2D Fourier transform of a M x N matrix:
01930     \f[Y = F^{(M)}  \cdot X  \cdot F^{(N)}\f]
01931 -   Inverse the 2D Fourier transform of a M x N matrix:
01932     \f[\begin{array}{l} X'=  \left (F^{(M)} \right )^*  \cdot Y  \cdot \left (F^{(N)} \right )^* \\ X =  \frac{1}{M \cdot N} \cdot X' \end{array}\f]
01933 
01934 In case of real (single-channel) data, the output spectrum of the forward Fourier transform or input
01935 spectrum of the inverse Fourier transform can be represented in a packed format called *CCS*
01936 (complex-conjugate-symmetrical). It was borrowed from IPL (Intel\* Image Processing Library). Here
01937 is how 2D *CCS* spectrum looks:
01938 \f[\begin{bmatrix} Re Y_{0,0} & Re Y_{0,1} & Im Y_{0,1} & Re Y_{0,2} & Im Y_{0,2} &  \cdots & Re Y_{0,N/2-1} & Im Y_{0,N/2-1} & Re Y_{0,N/2}  \\ Re Y_{1,0} & Re Y_{1,1} & Im Y_{1,1} & Re Y_{1,2} & Im Y_{1,2} &  \cdots & Re Y_{1,N/2-1} & Im Y_{1,N/2-1} & Re Y_{1,N/2}  \\ Im Y_{1,0} & Re Y_{2,1} & Im Y_{2,1} & Re Y_{2,2} & Im Y_{2,2} &  \cdots & Re Y_{2,N/2-1} & Im Y_{2,N/2-1} & Im Y_{1,N/2}  \\ \hdotsfor{9} \\ Re Y_{M/2-1,0} &  Re Y_{M-3,1}  & Im Y_{M-3,1} &  \hdotsfor{3} & Re Y_{M-3,N/2-1} & Im Y_{M-3,N/2-1}& Re Y_{M/2-1,N/2}  \\ Im Y_{M/2-1,0} &  Re Y_{M-2,1}  & Im Y_{M-2,1} &  \hdotsfor{3} & Re Y_{M-2,N/2-1} & Im Y_{M-2,N/2-1}& Im Y_{M/2-1,N/2}  \\ Re Y_{M/2,0}  &  Re Y_{M-1,1} &  Im Y_{M-1,1} &  \hdotsfor{3} & Re Y_{M-1,N/2-1} & Im Y_{M-1,N/2-1}& Re Y_{M/2,N/2} \end{bmatrix}\f]
01939 
01940 In case of 1D transform of a real vector, the output looks like the first row of the matrix above.
01941 
01942 So, the function chooses an operation mode depending on the flags and size of the input array:
01943 -   If DFT_ROWS is set or the input array has a single row or single column, the function
01944     performs a 1D forward or inverse transform of each row of a matrix when DFT_ROWS is set.
01945     Otherwise, it performs a 2D transform.
01946 -   If the input array is real and DFT_INVERSE is not set, the function performs a forward 1D or
01947     2D transform:
01948     -   When DFT_COMPLEX_OUTPUT is set, the output is a complex matrix of the same size as
01949         input.
01950     -   When DFT_COMPLEX_OUTPUT is not set, the output is a real matrix of the same size as
01951         input. In case of 2D transform, it uses the packed format as shown above. In case of a
01952         single 1D transform, it looks like the first row of the matrix above. In case of
01953         multiple 1D transforms (when using the DFT_ROWS flag), each row of the output matrix
01954         looks like the first row of the matrix above.
01955 -   If the input array is complex and either DFT_INVERSE or DFT_REAL_OUTPUT are not set, the
01956     output is a complex array of the same size as input. The function performs a forward or
01957     inverse 1D or 2D transform of the whole input array or each row of the input array
01958     independently, depending on the flags DFT_INVERSE and DFT_ROWS.
01959 -   When DFT_INVERSE is set and the input array is real, or it is complex but DFT_REAL_OUTPUT
01960     is set, the output is a real array of the same size as input. The function performs a 1D or 2D
01961     inverse transformation of the whole input array or each individual row, depending on the flags
01962     DFT_INVERSE and DFT_ROWS.
01963 
01964 If DFT_SCALE is set, the scaling is done after the transformation.
01965 
01966 Unlike dct , the function supports arrays of arbitrary size. But only those arrays are processed
01967 efficiently, whose sizes can be factorized in a product of small prime numbers (2, 3, and 5 in the
01968 current implementation). Such an efficient DFT size can be calculated using the getOptimalDFTSize
01969 method.
01970 
01971 The sample below illustrates how to calculate a DFT-based convolution of two 2D real arrays:
01972 @code
01973     void convolveDFT(InputArray A, InputArray B, OutputArray C)
01974     {
01975         // reallocate the output array if needed
01976         C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());
01977         Size dftSize;
01978         // calculate the size of DFT transform
01979         dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);
01980         dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);
01981 
01982         // allocate temporary buffers and initialize them with 0's
01983         Mat tempA(dftSize, A.type(), Scalar::all(0));
01984         Mat tempB(dftSize, B.type(), Scalar::all(0));
01985 
01986         // copy A and B to the top-left corners of tempA and tempB, respectively
01987         Mat roiA(tempA, Rect(0,0,A.cols,A.rows));
01988         A.copyTo(roiA);
01989         Mat roiB(tempB, Rect(0,0,B.cols,B.rows));
01990         B.copyTo(roiB);
01991 
01992         // now transform the padded A & B in-place;
01993         // use "nonzeroRows" hint for faster processing
01994         dft(tempA, tempA, 0, A.rows);
01995         dft(tempB, tempB, 0, B.rows);
01996 
01997         // multiply the spectrums;
01998         // the function handles packed spectrum representations well
01999         mulSpectrums(tempA, tempB, tempA);
02000 
02001         // transform the product back from the frequency domain.
02002         // Even though all the result rows will be non-zero,
02003         // you need only the first C.rows of them, and thus you
02004         // pass nonzeroRows == C.rows
02005         dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);
02006 
02007         // now copy the result back to C.
02008         tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);
02009 
02010         // all the temporary buffers will be deallocated automatically
02011     }
02012 @endcode
02013 To optimize this sample, consider the following approaches:
02014 -   Since nonzeroRows != 0 is passed to the forward transform calls and since A and B are copied to
02015     the top-left corners of tempA and tempB, respectively, it is not necessary to clear the whole
02016     tempA and tempB. It is only necessary to clear the tempA.cols - A.cols ( tempB.cols - B.cols)
02017     rightmost columns of the matrices.
02018 -   This DFT-based convolution does not have to be applied to the whole big arrays, especially if B
02019     is significantly smaller than A or vice versa. Instead, you can calculate convolution by parts.
02020     To do this, you need to split the output array C into multiple tiles. For each tile, estimate
02021     which parts of A and B are required to calculate convolution in this tile. If the tiles in C are
02022     too small, the speed will decrease a lot because of repeated work. In the ultimate case, when
02023     each tile in C is a single pixel, the algorithm becomes equivalent to the naive convolution
02024     algorithm. If the tiles are too big, the temporary arrays tempA and tempB become too big and
02025     there is also a slowdown because of bad cache locality. So, there is an optimal tile size
02026     somewhere in the middle.
02027 -   If different tiles in C can be calculated in parallel and, thus, the convolution is done by
02028     parts, the loop can be threaded.
02029 
02030 All of the above improvements have been implemented in matchTemplate and filter2D . Therefore, by
02031 using them, you can get the performance even better than with the above theoretically optimal
02032 implementation. Though, those two functions actually calculate cross-correlation, not convolution,
02033 so you need to "flip" the second convolution operand B vertically and horizontally using flip .
02034 @note
02035 -   An example using the discrete fourier transform can be found at
02036     opencv_source_code/samples/cpp/dft.cpp
02037 -   (Python) An example using the dft functionality to perform Wiener deconvolution can be found
02038     at opencv_source/samples/python/deconvolution.py
02039 -   (Python) An example rearranging the quadrants of a Fourier image can be found at
02040     opencv_source/samples/python/dft.py
02041 @param src input array that could be real or complex.
02042 @param dst output array whose size and type depends on the flags .
02043 @param flags transformation flags, representing a combination of the cv::DftFlags
02044 @param nonzeroRows when the parameter is not zero, the function assumes that only the first
02045 nonzeroRows rows of the input array (DFT_INVERSE is not set) or only the first nonzeroRows of the
02046 output array (DFT_INVERSE is set) contain non-zeros, thus, the function can handle the rest of the
02047 rows more efficiently and save some time; this technique is very useful for calculating array
02048 cross-correlation or convolution using DFT.
02049 @sa dct , getOptimalDFTSize , mulSpectrums, filter2D , matchTemplate , flip , cartToPolar ,
02050 magnitude , phase
02051 */
02052 CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);
02053 
02054 /** @brief Calculates the inverse Discrete Fourier Transform of a 1D or 2D array.
02055 
02056 idft(src, dst, flags) is equivalent to dft(src, dst, flags | DFT_INVERSE) .
02057 @note None of dft and idft scales the result by default. So, you should pass DFT_SCALE to one of
02058 dft or idft explicitly to make these transforms mutually inverse.
02059 @sa dft, dct, idct, mulSpectrums, getOptimalDFTSize
02060 @param src input floating-point real or complex array.
02061 @param dst output array whose size and type depend on the flags.
02062 @param flags operation flags (see dft and cv::DftFlags).
02063 @param nonzeroRows number of dst rows to process; the rest of the rows have undefined content (see
02064 the convolution sample in dft description.
02065 */
02066 CV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);
02067 
02068 /** @brief Performs a forward or inverse discrete Cosine transform of 1D or 2D array.
02069 
02070 The function dct performs a forward or inverse discrete Cosine transform (DCT) of a 1D or 2D
02071 floating-point array:
02072 -   Forward Cosine transform of a 1D vector of N elements:
02073     \f[Y = C^{(N)}  \cdot X\f]
02074     where
02075     \f[C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right )\f]
02076     and
02077     \f$\alpha_0=1\f$, \f$\alpha_j=2\f$ for *j > 0*.
02078 -   Inverse Cosine transform of a 1D vector of N elements:
02079     \f[X =  \left (C^{(N)} \right )^{-1}  \cdot Y =  \left (C^{(N)} \right )^T  \cdot Y\f]
02080     (since \f$C^{(N)}\f$ is an orthogonal matrix, \f$C^{(N)} \cdot \left(C^{(N)}\right)^T = I\f$ )
02081 -   Forward 2D Cosine transform of M x N matrix:
02082     \f[Y = C^{(N)}  \cdot X  \cdot \left (C^{(N)} \right )^T\f]
02083 -   Inverse 2D Cosine transform of M x N matrix:
02084     \f[X =  \left (C^{(N)} \right )^T  \cdot X  \cdot C^{(N)}\f]
02085 
02086 The function chooses the mode of operation by looking at the flags and size of the input array:
02087 -   If (flags & DCT_INVERSE) == 0 , the function does a forward 1D or 2D transform. Otherwise, it
02088     is an inverse 1D or 2D transform.
02089 -   If (flags & DCT_ROWS) != 0 , the function performs a 1D transform of each row.
02090 -   If the array is a single column or a single row, the function performs a 1D transform.
02091 -   If none of the above is true, the function performs a 2D transform.
02092 
02093 @note Currently dct supports even-size arrays (2, 4, 6 ...). For data analysis and approximation, you
02094 can pad the array when necessary.
02095 Also, the function performance depends very much, and not monotonically, on the array size (see
02096 getOptimalDFTSize ). In the current implementation DCT of a vector of size N is calculated via DFT
02097 of a vector of size N/2 . Thus, the optimal DCT size N1 >= N can be calculated as:
02098 @code
02099     size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }
02100     N1 = getOptimalDCTSize(N);
02101 @endcode
02102 @param src input floating-point array.
02103 @param dst output array of the same size and type as src .
02104 @param flags transformation flags as a combination of cv::DftFlags (DCT_*)
02105 @sa dft , getOptimalDFTSize , idct
02106 */
02107 CV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags = 0);
02108 
02109 /** @brief Calculates the inverse Discrete Cosine Transform of a 1D or 2D array.
02110 
02111 idct(src, dst, flags) is equivalent to dct(src, dst, flags | DCT_INVERSE).
02112 @param src input floating-point single-channel array.
02113 @param dst output array of the same size and type as src.
02114 @param flags operation flags.
02115 @sa  dct, dft, idft, getOptimalDFTSize
02116 */
02117 CV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags = 0);
02118 
02119 /** @brief Performs the per-element multiplication of two Fourier spectrums.
02120 
02121 The function mulSpectrums performs the per-element multiplication of the two CCS-packed or complex
02122 matrices that are results of a real or complex Fourier transform.
02123 
02124 The function, together with dft and idft , may be used to calculate convolution (pass conjB=false )
02125 or correlation (pass conjB=true ) of two arrays rapidly. When the arrays are complex, they are
02126 simply multiplied (per element) with an optional conjugation of the second-array elements. When the
02127 arrays are real, they are assumed to be CCS-packed (see dft for details).
02128 @param a first input array.
02129 @param b second input array of the same size and type as src1 .
02130 @param c output array of the same size and type as src1 .
02131 @param flags operation flags; currently, the only supported flag is cv::DFT_ROWS, which indicates that
02132 each row of src1 and src2 is an independent 1D Fourier spectrum. If you do not want to use this flag, then simply add a `0` as value.
02133 @param conjB optional flag that conjugates the second input array before the multiplication (true)
02134 or not (false).
02135 */
02136 CV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c,
02137                                int flags, bool conjB = false);
02138 
02139 /** @brief Returns the optimal DFT size for a given vector size.
02140 
02141 DFT performance is not a monotonic function of a vector size. Therefore, when you calculate
02142 convolution of two arrays or perform the spectral analysis of an array, it usually makes sense to
02143 pad the input data with zeros to get a bit larger array that can be transformed much faster than the
02144 original one. Arrays whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process.
02145 Though, the arrays whose size is a product of 2's, 3's, and 5's (for example, 300 = 5\*5\*3\*2\*2)
02146 are also processed quite efficiently.
02147 
02148 The function getOptimalDFTSize returns the minimum number N that is greater than or equal to vecsize
02149 so that the DFT of a vector of size N can be processed efficiently. In the current implementation N
02150 = 2 ^p^ \* 3 ^q^ \* 5 ^r^ for some integer p, q, r.
02151 
02152 The function returns a negative number if vecsize is too large (very close to INT_MAX ).
02153 
02154 While the function cannot be used directly to estimate the optimal vector size for DCT transform
02155 (since the current DCT implementation supports only even-size vectors), it can be easily processed
02156 as getOptimalDFTSize((vecsize+1)/2)\*2.
02157 @param vecsize vector size.
02158 @sa dft , dct , idft , idct , mulSpectrums
02159 */
02160 CV_EXPORTS_W int getOptimalDFTSize(int vecsize);
02161 
02162 /** @brief Returns the default random number generator.
02163 
02164 The function theRNG returns the default random number generator. For each thread, there is a
02165 separate random number generator, so you can use the function safely in multi-thread environments.
02166 If you just need to get a single random number using this generator or initialize an array, you can
02167 use randu or randn instead. But if you are going to generate many random numbers inside a loop, it
02168 is much faster to use this function to retrieve the generator and then use RNG::operator _Tp() .
02169 @sa RNG, randu, randn
02170 */
02171 CV_EXPORTS RNG& theRNG();
02172 
02173 /** @brief Generates a single uniformly-distributed random number or an array of random numbers.
02174 
02175 Non-template variant of the function fills the matrix dst with uniformly-distributed
02176 random numbers from the specified range:
02177 \f[\texttt{low} _c  \leq \texttt{dst} (I)_c <  \texttt{high} _c\f]
02178 @param dst output array of random numbers; the array must be pre-allocated.
02179 @param low inclusive lower boundary of the generated random numbers.
02180 @param high exclusive upper boundary of the generated random numbers.
02181 @sa RNG, randn, theRNG
02182 */
02183 CV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high);
02184 
02185 /** @brief Fills the array with normally distributed random numbers.
02186 
02187 The function randn fills the matrix dst with normally distributed random numbers with the specified
02188 mean vector and the standard deviation matrix. The generated random numbers are clipped to fit the
02189 value range of the output array data type.
02190 @param dst output array of random numbers; the array must be pre-allocated and have 1 to 4 channels.
02191 @param mean mean value (expectation) of the generated random numbers.
02192 @param stddev standard deviation of the generated random numbers; it can be either a vector (in
02193 which case a diagonal standard deviation matrix is assumed) or a square matrix.
02194 @sa RNG, randu
02195 */
02196 CV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev);
02197 
02198 /** @brief Shuffles the array elements randomly.
02199 
02200 The function randShuffle shuffles the specified 1D array by randomly choosing pairs of elements and
02201 swapping them. The number of such swap operations will be dst.rows\*dst.cols\*iterFactor .
02202 @param dst input/output numerical 1D array.
02203 @param iterFactor scale factor that determines the number of random swap operations (see the details
02204 below).
02205 @param rng optional random number generator used for shuffling; if it is zero, theRNG () is used
02206 instead.
02207 @sa RNG, sort
02208 */
02209 CV_EXPORTS_W void randShuffle(InputOutputArray dst, double iterFactor = 1., RNG* rng = 0);
02210 
02211 /** @brief Principal Component Analysis
02212 
02213 The class is used to calculate a special basis for a set of vectors. The
02214 basis will consist of eigenvectors of the covariance matrix calculated
02215 from the input set of vectors. The class %PCA can also transform
02216 vectors to/from the new coordinate space defined by the basis. Usually,
02217 in this new coordinate system, each vector from the original set (and
02218 any linear combination of such vectors) can be quite accurately
02219 approximated by taking its first few components, corresponding to the
02220 eigenvectors of the largest eigenvalues of the covariance matrix.
02221 Geometrically it means that you calculate a projection of the vector to
02222 a subspace formed by a few eigenvectors corresponding to the dominant
02223 eigenvalues of the covariance matrix. And usually such a projection is
02224 very close to the original vector. So, you can represent the original
02225 vector from a high-dimensional space with a much shorter vector
02226 consisting of the projected vector's coordinates in the subspace. Such a
02227 transformation is also known as Karhunen-Loeve Transform, or KLT.
02228 See http://en.wikipedia.org/wiki/Principal_component_analysis
02229 
02230 The sample below is the function that takes two matrices. The first
02231 function stores a set of vectors (a row per vector) that is used to
02232 calculate PCA. The second function stores another "test" set of vectors
02233 (a row per vector). First, these vectors are compressed with PCA, then
02234 reconstructed back, and then the reconstruction error norm is computed
02235 and printed for each vector. :
02236 
02237 @code{.cpp}
02238 using namespace cv;
02239 
02240 PCA compressPCA(const Mat& pcaset, int maxComponents,
02241                 const Mat& testset, Mat& compressed)
02242 {
02243     PCA pca(pcaset, // pass the data
02244             Mat(), // we do not have a pre-computed mean vector,
02245                    // so let the PCA engine to compute it
02246             PCA::DATA_AS_ROW, // indicate that the vectors
02247                                 // are stored as matrix rows
02248                                 // (use PCA::DATA_AS_COL if the vectors are
02249                                 // the matrix columns)
02250             maxComponents // specify, how many principal components to retain
02251             );
02252     // if there is no test data, just return the computed basis, ready-to-use
02253     if( !testset.data )
02254         return pca;
02255     CV_Assert( testset.cols == pcaset.cols );
02256 
02257     compressed.create(testset.rows, maxComponents, testset.type());
02258 
02259     Mat reconstructed;
02260     for( int i = 0; i < testset.rows; i++ )
02261     {
02262         Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;
02263         // compress the vector, the result will be stored
02264         // in the i-th row of the output matrix
02265         pca.project(vec, coeffs);
02266         // and then reconstruct it
02267         pca.backProject(coeffs, reconstructed);
02268         // and measure the error
02269         printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
02270     }
02271     return pca;
02272 }
02273 @endcode
02274 @sa calcCovarMatrix, mulTransposed, SVD, dft, dct
02275 */
02276 class CV_EXPORTS PCA
02277 {
02278 public:
02279     enum Flags  { DATA_AS_ROW = 0, //!< indicates that the input samples are stored as matrix rows
02280                  DATA_AS_COL = 1, //!< indicates that the input samples are stored as matrix columns
02281                  USE_AVG     = 2  //!
02282                };
02283 
02284     /** @brief default constructor
02285 
02286     The default constructor initializes an empty %PCA structure. The other
02287     constructors initialize the structure and call PCA::operator()().
02288     */
02289     PCA();
02290 
02291     /** @overload
02292     @param data input samples stored as matrix rows or matrix columns.
02293     @param mean optional mean value; if the matrix is empty (@c noArray()),
02294     the mean is computed from the data.
02295     @param flags operation flags; currently the parameter is only used to
02296     specify the data layout (PCA::Flags)
02297     @param maxComponents maximum number of components that %PCA should
02298     retain; by default, all the components are retained.
02299     */
02300     PCA(InputArray data, InputArray mean, int flags, int maxComponents = 0);
02301 
02302     /** @overload
02303     @param data input samples stored as matrix rows or matrix columns.
02304     @param mean optional mean value; if the matrix is empty (noArray()),
02305     the mean is computed from the data.
02306     @param flags operation flags; currently the parameter is only used to
02307     specify the data layout (PCA::Flags)
02308     @param retainedVariance Percentage of variance that PCA should retain.
02309     Using this parameter will let the PCA decided how many components to
02310     retain but it will always keep at least 2.
02311     */
02312     PCA(InputArray data, InputArray mean, int flags, double retainedVariance);
02313 
02314     /** @brief performs %PCA
02315 
02316     The operator performs %PCA of the supplied dataset. It is safe to reuse
02317     the same PCA structure for multiple datasets. That is, if the structure
02318     has been previously used with another dataset, the existing internal
02319     data is reclaimed and the new eigenvalues, @ref eigenvectors , and @ref
02320     mean are allocated and computed.
02321 
02322     The computed eigenvalues are sorted from the largest to the smallest and
02323     the corresponding eigenvectors are stored as eigenvectors rows.
02324 
02325     @param data input samples stored as the matrix rows or as the matrix
02326     columns.
02327     @param mean optional mean value; if the matrix is empty (noArray()),
02328     the mean is computed from the data.
02329     @param flags operation flags; currently the parameter is only used to
02330     specify the data layout. (Flags)
02331     @param maxComponents maximum number of components that PCA should
02332     retain; by default, all the components are retained.
02333     */
02334     PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents = 0);
02335 
02336     /** @overload
02337     @param data input samples stored as the matrix rows or as the matrix
02338     columns.
02339     @param mean optional mean value; if the matrix is empty (noArray()),
02340     the mean is computed from the data.
02341     @param flags operation flags; currently the parameter is only used to
02342     specify the data layout. (PCA::Flags)
02343     @param retainedVariance Percentage of variance that %PCA should retain.
02344     Using this parameter will let the %PCA decided how many components to
02345     retain but it will always keep at least 2.
02346      */
02347     PCA& operator()(InputArray data, InputArray mean, int flags, double retainedVariance);
02348 
02349     /** @brief Projects vector(s) to the principal component subspace.
02350 
02351     The methods project one or more vectors to the principal component
02352     subspace, where each vector projection is represented by coefficients in
02353     the principal component basis. The first form of the method returns the
02354     matrix that the second form writes to the result. So the first form can
02355     be used as a part of expression while the second form can be more
02356     efficient in a processing loop.
02357     @param vec input vector(s); must have the same dimensionality and the
02358     same layout as the input data used at %PCA phase, that is, if
02359     DATA_AS_ROW are specified, then `vec.cols==data.cols`
02360     (vector dimensionality) and `vec.rows` is the number of vectors to
02361     project, and the same is true for the PCA::DATA_AS_COL case.
02362     */
02363     Mat project(InputArray vec) const;
02364 
02365     /** @overload
02366     @param vec input vector(s); must have the same dimensionality and the
02367     same layout as the input data used at PCA phase, that is, if
02368     DATA_AS_ROW are specified, then `vec.cols==data.cols`
02369     (vector dimensionality) and `vec.rows` is the number of vectors to
02370     project, and the same is true for the PCA::DATA_AS_COL case.
02371     @param result output vectors; in case of PCA::DATA_AS_COL, the
02372     output matrix has as many columns as the number of input vectors, this
02373     means that `result.cols==vec.cols` and the number of rows match the
02374     number of principal components (for example, `maxComponents` parameter
02375     passed to the constructor).
02376      */
02377     void project(InputArray vec, OutputArray result) const;
02378 
02379     /** @brief Reconstructs vectors from their PC projections.
02380 
02381     The methods are inverse operations to PCA::project. They take PC
02382     coordinates of projected vectors and reconstruct the original vectors.
02383     Unless all the principal components have been retained, the
02384     reconstructed vectors are different from the originals. But typically,
02385     the difference is small if the number of components is large enough (but
02386     still much smaller than the original vector dimensionality). As a
02387     result, PCA is used.
02388     @param vec coordinates of the vectors in the principal component
02389     subspace, the layout and size are the same as of PCA::project output
02390     vectors.
02391      */
02392     Mat backProject(InputArray vec) const;
02393 
02394     /** @overload
02395     @param vec coordinates of the vectors in the principal component
02396     subspace, the layout and size are the same as of PCA::project output
02397     vectors.
02398     @param result reconstructed vectors; the layout and size are the same as
02399     of PCA::project input vectors.
02400      */
02401     void backProject(InputArray vec, OutputArray result) const;
02402 
02403     /** @brief write and load PCA matrix
02404 
02405 */
02406     void write(FileStorage& fs ) const;
02407     void read(const FileNode& fs);
02408 
02409     Mat eigenvectors; //!< eigenvectors of the covariation matrix
02410     Mat eigenvalues; //!< eigenvalues of the covariation matrix
02411     Mat mean; //!< mean value subtracted before the projection and added after the back projection
02412 };
02413 
02414 /** @example pca.cpp
02415   An example using %PCA for dimensionality reduction while maintaining an amount of variance
02416  */
02417 
02418 /**
02419    @brief Linear Discriminant Analysis
02420    @todo document this class
02421  */
02422 class CV_EXPORTS LDA
02423 {
02424 public:
02425     /** @brief constructor
02426     Initializes a LDA with num_components (default 0).
02427     */
02428     explicit LDA(int num_components = 0);
02429 
02430     /** Initializes and performs a Discriminant Analysis with Fisher's
02431      Optimization Criterion on given data in src and corresponding labels
02432      in labels. If 0 (or less) number of components are given, they are
02433      automatically determined for given data in computation.
02434     */
02435     LDA(InputArrayOfArrays src, InputArray labels, int num_components = 0);
02436 
02437     /** Serializes this object to a given filename.
02438       */
02439     void save(const String& filename) const;
02440 
02441     /** Deserializes this object from a given filename.
02442       */
02443     void load(const String& filename);
02444 
02445     /** Serializes this object to a given cv::FileStorage.
02446       */
02447     void save(FileStorage& fs) const;
02448 
02449     /** Deserializes this object from a given cv::FileStorage.
02450       */
02451     void load(const FileStorage& node);
02452 
02453     /** destructor
02454       */
02455     ~LDA();
02456 
02457     /** Compute the discriminants for data in src (row aligned) and labels.
02458       */
02459     void compute(InputArrayOfArrays src, InputArray labels);
02460 
02461     /** Projects samples into the LDA subspace.
02462         src may be one or more row aligned samples.
02463       */
02464     Mat project(InputArray src);
02465 
02466     /** Reconstructs projections from the LDA subspace.
02467         src may be one or more row aligned projections.
02468       */
02469     Mat reconstruct(InputArray src);
02470 
02471     /** Returns the eigenvectors of this LDA.
02472       */
02473     Mat eigenvectors() const { return _eigenvectors; }
02474 
02475     /** Returns the eigenvalues of this LDA.
02476       */
02477     Mat eigenvalues() const { return _eigenvalues; }
02478 
02479     static Mat subspaceProject(InputArray W, InputArray mean, InputArray src);
02480     static Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src);
02481 
02482 protected:
02483     bool _dataAsRow; // unused, but needed for 3.0 ABI compatibility.
02484     int _num_components;
02485     Mat _eigenvectors;
02486     Mat _eigenvalues;
02487     void lda(InputArrayOfArrays src, InputArray labels);
02488 };
02489 
02490 /** @brief Singular Value Decomposition
02491 
02492 Class for computing Singular Value Decomposition of a floating-point
02493 matrix. The Singular Value Decomposition is used to solve least-square
02494 problems, under-determined linear systems, invert matrices, compute
02495 condition numbers, and so on.
02496 
02497 If you want to compute a condition number of a matrix or an absolute value of
02498 its determinant, you do not need `u` and `vt`. You can pass
02499 flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that full-size u
02500 and vt must be computed, which is not necessary most of the time.
02501 
02502 @sa invert, solve, eigen, determinant
02503 */
02504 class CV_EXPORTS SVD
02505 {
02506 public:
02507     enum Flags  {
02508         /** allow the algorithm to modify the decomposed matrix; it can save space and speed up
02509             processing. currently ignored. */
02510         MODIFY_A = 1,
02511         /** indicates that only a vector of singular values `w` is to be processed, while u and vt
02512             will be set to empty matrices */
02513         NO_UV    = 2,
02514         /** when the matrix is not square, by default the algorithm produces u and vt matrices of
02515             sufficiently large size for the further A reconstruction; if, however, FULL_UV flag is
02516             specified, u and vt will be full-size square orthogonal matrices.*/
02517         FULL_UV  = 4
02518     };
02519 
02520     /** @brief the default constructor
02521 
02522     initializes an empty SVD structure
02523       */
02524     SVD();
02525 
02526     /** @overload
02527     initializes an empty SVD structure and then calls SVD::operator()
02528     @param src decomposed matrix.
02529     @param flags operation flags (SVD::Flags)
02530       */
02531     SVD( InputArray src, int flags = 0 );
02532 
02533     /** @brief the operator that performs SVD. The previously allocated u, w and vt are released.
02534 
02535     The operator performs the singular value decomposition of the supplied
02536     matrix. The u,`vt` , and the vector of singular values w are stored in
02537     the structure. The same SVD structure can be reused many times with
02538     different matrices. Each time, if needed, the previous u,`vt` , and w
02539     are reclaimed and the new matrices are created, which is all handled by
02540     Mat::create.
02541     @param src decomposed matrix.
02542     @param flags operation flags (SVD::Flags)
02543       */
02544     SVD& operator ()( InputArray src, int flags = 0 );
02545 
02546     /** @brief decomposes matrix and stores the results to user-provided matrices
02547 
02548     The methods/functions perform SVD of matrix. Unlike SVD::SVD constructor
02549     and SVD::operator(), they store the results to the user-provided
02550     matrices:
02551 
02552     @code{.cpp}
02553     Mat A, w, u, vt;
02554     SVD::compute(A, w, u, vt);
02555     @endcode
02556 
02557     @param src decomposed matrix
02558     @param w calculated singular values
02559     @param u calculated left singular vectors
02560     @param vt transposed matrix of right singular values
02561     @param flags operation flags - see SVD::SVD.
02562       */
02563     static void compute( InputArray src, OutputArray w,
02564                          OutputArray u, OutputArray vt, int flags = 0 );
02565 
02566     /** @overload
02567     computes singular values of a matrix
02568     @param src decomposed matrix
02569     @param w calculated singular values
02570     @param flags operation flags - see SVD::Flags.
02571       */
02572     static void compute( InputArray src, OutputArray w, int flags = 0 );
02573 
02574     /** @brief performs back substitution
02575       */
02576     static void backSubst( InputArray w, InputArray u,
02577                            InputArray vt, InputArray rhs,
02578                            OutputArray dst );
02579 
02580     /** @brief solves an under-determined singular linear system
02581 
02582     The method finds a unit-length solution x of a singular linear system
02583     A\*x = 0. Depending on the rank of A, there can be no solutions, a
02584     single solution or an infinite number of solutions. In general, the
02585     algorithm solves the following problem:
02586     \f[dst =  \arg \min _{x:  \| x \| =1}  \| src  \cdot x  \|\f]
02587     @param src left-hand-side matrix.
02588     @param dst found solution.
02589       */
02590     static void solveZ( InputArray src, OutputArray dst );
02591 
02592     /** @brief performs a singular value back substitution.
02593 
02594     The method calculates a back substitution for the specified right-hand
02595     side:
02596 
02597     \f[\texttt{x} =  \texttt{vt} ^T  \cdot diag( \texttt{w} )^{-1}  \cdot \texttt{u} ^T  \cdot \texttt{rhs} \sim \texttt{A} ^{-1}  \cdot \texttt{rhs}\f]
02598 
02599     Using this technique you can either get a very accurate solution of the
02600     convenient linear system, or the best (in the least-squares terms)
02601     pseudo-solution of an overdetermined linear system.
02602 
02603     @param rhs right-hand side of a linear system (u\*w\*v')\*dst = rhs to
02604     be solved, where A has been previously decomposed.
02605 
02606     @param dst found solution of the system.
02607 
02608     @note Explicit SVD with the further back substitution only makes sense
02609     if you need to solve many linear systems with the same left-hand side
02610     (for example, src ). If all you need is to solve a single system
02611     (possibly with multiple rhs immediately available), simply call solve
02612     add pass DECOMP_SVD there. It does absolutely the same thing.
02613       */
02614     void backSubst( InputArray rhs, OutputArray dst ) const;
02615 
02616     /** @todo document */
02617     template<typename _Tp, int m, int n, int nm> static
02618     void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt );
02619 
02620     /** @todo document */
02621     template<typename _Tp, int m, int n, int nm> static
02622     void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w );
02623 
02624     /** @todo document */
02625     template<typename _Tp, int m, int n, int nm, int nb> static
02626     void backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst );
02627 
02628     Mat u, w, vt;
02629 };
02630 
02631 /** @brief Random Number Generator
02632 
02633 Random number generator. It encapsulates the state (currently, a 64-bit
02634 integer) and has methods to return scalar random values and to fill
02635 arrays with random values. Currently it supports uniform and Gaussian
02636 (normal) distributions. The generator uses Multiply-With-Carry
02637 algorithm, introduced by G. Marsaglia (
02638 <http://en.wikipedia.org/wiki/Multiply-with-carry> ).
02639 Gaussian-distribution random numbers are generated using the Ziggurat
02640 algorithm ( <http://en.wikipedia.org/wiki/Ziggurat_algorithm> ),
02641 introduced by G. Marsaglia and W. W. Tsang.
02642 */
02643 class CV_EXPORTS RNG
02644 {
02645 public:
02646     enum { UNIFORM = 0,
02647            NORMAL  = 1
02648          };
02649 
02650     /** @brief constructor
02651 
02652     These are the RNG constructors. The first form sets the state to some
02653     pre-defined value, equal to 2\*\*32-1 in the current implementation. The
02654     second form sets the state to the specified value. If you passed state=0
02655     , the constructor uses the above default value instead to avoid the
02656     singular random number sequence, consisting of all zeros.
02657     */
02658     RNG();
02659     /** @overload
02660     @param state 64-bit value used to initialize the RNG.
02661     */
02662     RNG(uint64 state);
02663     /**The method updates the state using the MWC algorithm and returns the
02664     next 32-bit random number.*/
02665     unsigned next();
02666 
02667     /**Each of the methods updates the state using the MWC algorithm and
02668     returns the next random number of the specified type. In case of integer
02669     types, the returned number is from the available value range for the
02670     specified type. In case of floating-point types, the returned value is
02671     from [0,1) range.
02672     */
02673     operator uchar();
02674     /** @overload */
02675     operator schar();
02676     /** @overload */
02677     operator ushort();
02678     /** @overload */
02679     operator short();
02680     /** @overload */
02681     operator unsigned();
02682     /** @overload */
02683     operator int();
02684     /** @overload */
02685     operator float();
02686     /** @overload */
02687     operator double();
02688 
02689     /** @brief returns a random integer sampled uniformly from [0, N).
02690 
02691     The methods transform the state using the MWC algorithm and return the
02692     next random number. The first form is equivalent to RNG::next . The
02693     second form returns the random number modulo N , which means that the
02694     result is in the range [0, N) .
02695     */
02696     unsigned operator ()();
02697     /** @overload
02698     @param N upper non-inclusive boundary of the returned random number.
02699     */
02700     unsigned operator ()(unsigned N);
02701 
02702     /** @brief returns uniformly distributed integer random number from [a,b) range
02703 
02704     The methods transform the state using the MWC algorithm and return the
02705     next uniformly-distributed random number of the specified type, deduced
02706     from the input parameter type, from the range [a, b) . There is a nuance
02707     illustrated by the following sample:
02708 
02709     @code{.cpp}
02710     RNG rng;
02711 
02712     // always produces 0
02713     double a = rng.uniform(0, 1);
02714 
02715     // produces double from [0, 1)
02716     double a1 = rng.uniform((double)0, (double)1);
02717 
02718     // produces float from [0, 1)
02719     double b = rng.uniform(0.f, 1.f);
02720 
02721     // produces double from [0, 1)
02722     double c = rng.uniform(0., 1.);
02723 
02724     // may cause compiler error because of ambiguity:
02725     //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
02726     double d = rng.uniform(0, 0.999999);
02727     @endcode
02728 
02729     The compiler does not take into account the type of the variable to
02730     which you assign the result of RNG::uniform . The only thing that
02731     matters to the compiler is the type of a and b parameters. So, if you
02732     want a floating-point random number, but the range boundaries are
02733     integer numbers, either put dots in the end, if they are constants, or
02734     use explicit type cast operators, as in the a1 initialization above.
02735     @param a lower inclusive boundary of the returned random numbers.
02736     @param b upper non-inclusive boundary of the returned random numbers.
02737       */
02738     int uniform(int a, int b);
02739     /** @overload */
02740     float uniform(float a, float b);
02741     /** @overload */
02742     double uniform(double a, double b);
02743 
02744     /** @brief Fills arrays with random numbers.
02745 
02746     @param mat 2D or N-dimensional matrix; currently matrices with more than
02747     4 channels are not supported by the methods, use Mat::reshape as a
02748     possible workaround.
02749     @param distType distribution type, RNG::UNIFORM or RNG::NORMAL.
02750     @param a first distribution parameter; in case of the uniform
02751     distribution, this is an inclusive lower boundary, in case of the normal
02752     distribution, this is a mean value.
02753     @param b second distribution parameter; in case of the uniform
02754     distribution, this is a non-inclusive upper boundary, in case of the
02755     normal distribution, this is a standard deviation (diagonal of the
02756     standard deviation matrix or the full standard deviation matrix).
02757     @param saturateRange pre-saturation flag; for uniform distribution only;
02758     if true, the method will first convert a and b to the acceptable value
02759     range (according to the mat datatype) and then will generate uniformly
02760     distributed random numbers within the range [saturate(a), saturate(b)),
02761     if saturateRange=false, the method will generate uniformly distributed
02762     random numbers in the original range [a, b) and then will saturate them,
02763     it means, for example, that
02764     <tt>theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)</tt> will likely
02765     produce array mostly filled with 0's and 255's, since the range (0, 255)
02766     is significantly smaller than [-DBL_MAX, DBL_MAX).
02767 
02768     Each of the methods fills the matrix with the random values from the
02769     specified distribution. As the new numbers are generated, the RNG state
02770     is updated accordingly. In case of multiple-channel images, every
02771     channel is filled independently, which means that RNG cannot generate
02772     samples from the multi-dimensional Gaussian distribution with
02773     non-diagonal covariance matrix directly. To do that, the method
02774     generates samples from multi-dimensional standard Gaussian distribution
02775     with zero mean and identity covariation matrix, and then transforms them
02776     using transform to get samples from the specified Gaussian distribution.
02777     */
02778     void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange = false );
02779 
02780     /** @brief Returns the next random number sampled from the Gaussian distribution
02781     @param sigma standard deviation of the distribution.
02782 
02783     The method transforms the state using the MWC algorithm and returns the
02784     next random number from the Gaussian distribution N(0,sigma) . That is,
02785     the mean value of the returned random numbers is zero and the standard
02786     deviation is the specified sigma .
02787     */
02788     double gaussian(double sigma);
02789 
02790     uint64 state;
02791 };
02792 
02793 /** @brief Mersenne Twister random number generator
02794 
02795 Inspired by http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c
02796 @todo document
02797  */
02798 class CV_EXPORTS RNG_MT19937
02799 {
02800 public:
02801     RNG_MT19937();
02802     RNG_MT19937(unsigned s);
02803     void seed(unsigned s);
02804 
02805     unsigned next();
02806 
02807     operator int();
02808     operator unsigned();
02809     operator float();
02810     operator double();
02811 
02812     unsigned operator ()(unsigned N);
02813     unsigned operator ()();
02814 
02815     /** @brief returns uniformly distributed integer random number from [a,b) range
02816 
02817 */
02818     int uniform(int a, int b);
02819     /** @brief returns uniformly distributed floating-point random number from [a,b) range
02820 
02821 */
02822     float uniform(float a, float b);
02823     /** @brief returns uniformly distributed double-precision floating-point random number from [a,b) range
02824 
02825 */
02826     double uniform(double a, double b);
02827 
02828 private:
02829     enum PeriodParameters {N = 624, M = 397};
02830     unsigned state[N];
02831     int mti;
02832 };
02833 
02834 //! @} core_array
02835 
02836 //! @addtogroup core_cluster
02837 //!  @{
02838 
02839 /** @example kmeans.cpp
02840   An example on K-means clustering
02841 */
02842 
02843 /** @brief Finds centers of clusters and groups input samples around the clusters.
02844 
02845 The function kmeans implements a k-means algorithm that finds the centers of cluster_count clusters
02846 and groups the input samples around the clusters. As an output, \f$\texttt{labels}_i\f$ contains a
02847 0-based cluster index for the sample stored in the \f$i^{th}\f$ row of the samples matrix.
02848 
02849 @note
02850 -   (Python) An example on K-means clustering can be found at
02851     opencv_source_code/samples/python/kmeans.py
02852 @param data Data for clustering. An array of N-Dimensional points with float coordinates is needed.
02853 Examples of this array can be:
02854 -   Mat points(count, 2, CV_32F);
02855 -   Mat points(count, 1, CV_32FC2);
02856 -   Mat points(1, count, CV_32FC2);
02857 -   std::vector<cv::Point2f> points(sampleCount);
02858 @param K Number of clusters to split the set by.
02859 @param bestLabels Input/output integer array that stores the cluster indices for every sample.
02860 @param criteria The algorithm termination criteria, that is, the maximum number of iterations and/or
02861 the desired accuracy. The accuracy is specified as criteria.epsilon. As soon as each of the cluster
02862 centers moves by less than criteria.epsilon on some iteration, the algorithm stops.
02863 @param attempts Flag to specify the number of times the algorithm is executed using different
02864 initial labellings. The algorithm returns the labels that yield the best compactness (see the last
02865 function parameter).
02866 @param flags Flag that can take values of cv::KmeansFlags
02867 @param centers Output matrix of the cluster centers, one row per each cluster center.
02868 @return The function returns the compactness measure that is computed as
02869 \f[\sum _i  \| \texttt{samples} _i -  \texttt{centers} _{ \texttt{labels} _i} \| ^2\f]
02870 after every attempt. The best (minimum) value is chosen and the corresponding labels and the
02871 compactness value are returned by the function. Basically, you can use only the core of the
02872 function, set the number of attempts to 1, initialize labels each time using a custom algorithm,
02873 pass them with the ( flags = KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best
02874 (most-compact) clustering.
02875 */
02876 CV_EXPORTS_W double kmeans( InputArray data, int K, InputOutputArray bestLabels,
02877                             TermCriteria criteria, int attempts,
02878                             int flags, OutputArray centers = noArray() );
02879 
02880 //! @} core_cluster
02881 
02882 //! @addtogroup core_basic
02883 //! @{
02884 
02885 /////////////////////////////// Formatted output of cv::Mat ///////////////////////////
02886 
02887 /** @todo document */
02888 class CV_EXPORTS Formatted 
02889 {
02890 public:
02891     virtual const char* next() = 0;
02892     virtual void reset() = 0;
02893     virtual ~Formatted ();
02894 };
02895 
02896 /** @todo document */
02897 class CV_EXPORTS Formatter 
02898 {
02899 public:
02900     enum { FMT_DEFAULT = 0,
02901            FMT_MATLAB  = 1,
02902            FMT_CSV     = 2,
02903            FMT_PYTHON  = 3,
02904            FMT_NUMPY   = 4,
02905            FMT_C       = 5
02906          };
02907 
02908     virtual ~Formatter ();
02909 
02910     virtual Ptr<Formatted> format(const Mat& mtx) const = 0;
02911 
02912     virtual void set32fPrecision(int p = 8) = 0;
02913     virtual void set64fPrecision(int p = 16) = 0;
02914     virtual void setMultiline(bool ml = true) = 0;
02915 
02916     static Ptr<Formatter> get(int fmt = FMT_DEFAULT);
02917 
02918 };
02919 
02920 static inline
02921 String& operator << (String& out, Ptr<Formatted> fmtd)
02922 {
02923     fmtd->reset();
02924     for(const char* str = fmtd->next(); str; str = fmtd->next())
02925         out += cv::String(str);
02926     return out;
02927 }
02928 
02929 static inline
02930 String& operator << (String& out, const Mat& mtx)
02931 {
02932     return out << Formatter::get()->format(mtx);
02933 }
02934 
02935 //////////////////////////////////////// Algorithm ////////////////////////////////////
02936 
02937 class CV_EXPORTS Algorithm;
02938 
02939 template<typename _Tp> struct ParamType {};
02940 
02941 
02942 /** @brief This is a base class for all more or less complex algorithms in OpenCV
02943 
02944 especially for classes of algorithms, for which there can be multiple implementations. The examples
02945 are stereo correspondence (for which there are algorithms like block matching, semi-global block
02946 matching, graph-cut etc.), background subtraction (which can be done using mixture-of-gaussians
02947 models, codebook-based algorithm etc.), optical flow (block matching, Lucas-Kanade, Horn-Schunck
02948 etc.).
02949 
02950 Here is example of SIFT use in your application via Algorithm interface:
02951 @code
02952     #include "opencv2/opencv.hpp"
02953     #include "opencv2/xfeatures2d.hpp"
02954     using namespace cv::xfeatures2d;
02955 
02956     Ptr<Feature2D> sift = SIFT::create();
02957     FileStorage fs("sift_params.xml", FileStorage::READ);
02958     if( fs.isOpened() ) // if we have file with parameters, read them
02959     {
02960         sift->read(fs["sift_params"]);
02961         fs.release();
02962     }
02963     else // else modify the parameters and store them; user can later edit the file to use different parameters
02964     {
02965         sift->setContrastThreshold(0.01f); // lower the contrast threshold, compared to the default value
02966         {
02967             WriteStructContext ws(fs, "sift_params", CV_NODE_MAP);
02968             sift->write(fs);
02969         }
02970     }
02971     Mat image = imread("myimage.png", 0), descriptors;
02972     vector<KeyPoint> keypoints;
02973     sift->detectAndCompute(image, noArray(), keypoints, descriptors);
02974 @endcode
02975  */
02976 class CV_EXPORTS_W Algorithm
02977 {
02978 public:
02979     Algorithm();
02980     virtual ~Algorithm();
02981 
02982     /** @brief Clears the algorithm state
02983     */
02984     CV_WRAP virtual void clear() {}
02985 
02986     /** @brief Stores algorithm parameters in a file storage
02987     */
02988     virtual void write(FileStorage& fs) const { (void)fs; }
02989 
02990     /** @brief Reads algorithm parameters from a file storage
02991     */
02992     virtual void read(const FileNode& fn) { (void)fn; }
02993 
02994     /** @brief Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read
02995      */
02996     virtual bool empty() const { return false; }
02997 
02998     /** @brief Reads algorithm from the file node
02999 
03000      This is static template method of Algorithm. It's usage is following (in the case of SVM):
03001      @code
03002      Ptr<SVM> svm = Algorithm::read<SVM>(fn);
03003      @endcode
03004      In order to make this method work, the derived class must overwrite Algorithm::read(const
03005      FileNode& fn) and also have static create() method without parameters
03006      (or with all the optional parameters)
03007      */
03008     template<typename _Tp> static Ptr<_Tp> read(const FileNode& fn)
03009     {
03010         Ptr<_Tp> obj = _Tp::create();
03011         obj->read(fn);
03012         return !obj->empty() ? obj : Ptr<_Tp>();
03013     }
03014 
03015     /** @brief Loads algorithm from the file
03016 
03017      @param filename Name of the file to read.
03018      @param objname The optional name of the node to read (if empty, the first top-level node will be used)
03019 
03020      This is static template method of Algorithm. It's usage is following (in the case of SVM):
03021      @code
03022      Ptr<SVM> svm = Algorithm::load<SVM>("my_svm_model.xml");
03023      @endcode
03024      In order to make this method work, the derived class must overwrite Algorithm::read(const
03025      FileNode& fn).
03026      */
03027     template<typename _Tp> static Ptr<_Tp> load(const String& filename, const String& objname=String())
03028     {
03029         FileStorage fs(filename, FileStorage::READ);
03030         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
03031         Ptr<_Tp> obj = _Tp::create();
03032         obj->read(fn);
03033         return !obj->empty() ? obj : Ptr<_Tp>();
03034     }
03035 
03036     /** @brief Loads algorithm from a String
03037 
03038      @param strModel The string variable containing the model you want to load.
03039      @param objname The optional name of the node to read (if empty, the first top-level node will be used)
03040 
03041      This is static template method of Algorithm. It's usage is following (in the case of SVM):
03042      @code
03043      Ptr<SVM> svm = Algorithm::loadFromString<SVM>(myStringModel);
03044      @endcode
03045      */
03046     template<typename _Tp> static Ptr<_Tp> loadFromString(const String& strModel, const String& objname=String())
03047     {
03048         FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY);
03049         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
03050         Ptr<_Tp> obj = _Tp::create();
03051         obj->read(fn);
03052         return !obj->empty() ? obj : Ptr<_Tp>();
03053     }
03054 
03055     /** Saves the algorithm to a file.
03056      In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs). */
03057     CV_WRAP virtual void save(const String& filename) const;
03058 
03059     /** Returns the algorithm string identifier.
03060      This string is used as top level xml/yml node tag when the object is saved to a file or string. */
03061     CV_WRAP virtual String getDefaultName() const;
03062 };
03063 
03064 struct Param {
03065     enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7,
03066            UNSIGNED_INT=8, UINT64=9, UCHAR=11 };
03067 };
03068 
03069 
03070 
03071 template<> struct ParamType<bool>
03072 {
03073     typedef bool const_param_type;
03074     typedef bool member_type;
03075 
03076     enum { type = Param::BOOLEAN };
03077 };
03078 
03079 template<> struct ParamType<int>
03080 {
03081     typedef int const_param_type;
03082     typedef int member_type;
03083 
03084     enum { type = Param::INT };
03085 };
03086 
03087 template<> struct ParamType<double>
03088 {
03089     typedef double const_param_type;
03090     typedef double member_type;
03091 
03092     enum { type = Param::REAL };
03093 };
03094 
03095 template<> struct ParamType<String>
03096 {
03097     typedef const String& const_param_type;
03098     typedef String member_type;
03099 
03100     enum { type = Param::STRING };
03101 };
03102 
03103 template<> struct ParamType<Mat>
03104 {
03105     typedef const Mat& const_param_type;
03106     typedef Mat member_type;
03107 
03108     enum { type = Param::MAT };
03109 };
03110 
03111 template<> struct ParamType<std::vector<Mat> >
03112 {
03113     typedef const std::vector<Mat>& const_param_type;
03114     typedef std::vector<Mat> member_type;
03115 
03116     enum { type = Param::MAT_VECTOR };
03117 };
03118 
03119 template<> struct ParamType<Algorithm>
03120 {
03121     typedef const Ptr<Algorithm>& const_param_type;
03122     typedef Ptr<Algorithm> member_type;
03123 
03124     enum { type = Param::ALGORITHM };
03125 };
03126 
03127 template<> struct ParamType<float>
03128 {
03129     typedef float const_param_type;
03130     typedef float member_type;
03131 
03132     enum { type = Param::FLOAT };
03133 };
03134 
03135 template<> struct ParamType<unsigned>
03136 {
03137     typedef unsigned const_param_type;
03138     typedef unsigned member_type;
03139 
03140     enum { type = Param::UNSIGNED_INT };
03141 };
03142 
03143 template<> struct ParamType<uint64>
03144 {
03145     typedef uint64 const_param_type;
03146     typedef uint64 member_type;
03147 
03148     enum { type = Param::UINT64 };
03149 };
03150 
03151 template<> struct ParamType<uchar>
03152 {
03153     typedef uchar const_param_type;
03154     typedef uchar member_type;
03155 
03156     enum { type = Param::UCHAR };
03157 };
03158 
03159 //! @} core_basic
03160 
03161 } //namespace cv
03162 
03163 #include "opencv2/core/operations.hpp"
03164 #include "opencv2/core/cvstd.inl.hpp"
03165 #include "opencv2/core/utility.hpp"
03166 #include "opencv2/core/optim.hpp"
03167 
03168 #endif /*__OPENCV_CORE_HPP__*/
03169