16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M///////////////////////////////////////////////////////////////////////////////////////
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  By downloading, copying, installing or using the software you agree to this license.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  If you do not agree to this license, do not download, install,
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  copy or use the software.
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                        Intel License Agreement
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                For Open Source Computer Vision Library
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright( C) 2000, Intel Corporation, all rights reserved.
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification,
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met:
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's of source code must retain the above copyright notice,
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer.
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's in binary form must reproduce the above copyright notice,
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer in the documentation
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     and/or other materials provided with the distribution.
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * The name of Intel Corporation may not be used to endorse or promote products
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     derived from this software without specific prior written permission.
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed.
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct,
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//(including, but not limited to, procurement of substitute goods or services;
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability,
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort(including negligence or otherwise) arising in any way out of
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage.
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   A few macros and definitions for backward compatibility
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   with the previous versions of OpenCV. They are obsolete and
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   are likely to be removed in future. To check whether your code
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   including cv.h.
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CVCOMPAT_H_
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CVCOMPAT_H_
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <string.h>
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    #define CV_UNREFERENCED(arg)
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    #define CV_UNREFERENCED(arg) arg
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMatType int
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvDisMaskType int
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMatArray CvMat
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvThreshType int
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvAdaptiveThreshMethod int
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvCompareMethod int
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvFontFace int
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPolyApproxMethod int
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvContoursMatchMethod int
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvContourTreesMatchMethod int
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvCoeffType int
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvRodriguesType int
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvElementShape int
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMorphOp int
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvTemplMatchMethod int
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPoint2D64d CvPoint2D64f
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPoint3D64d CvPoint3D64f
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT32F      CV_32FC1
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT3x1_32F  CV_32FC1
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT4x1_32F  CV_32FC1
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT3x3_32F  CV_32FC1
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT4x4_32F  CV_32FC1
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT64D      CV_64FC1
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT3x1_64D  CV_64FC1
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT4x1_64D  CV_64FC1
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT3x3_64D  CV_64FC1
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_MAT4x4_64D  CV_64FC1
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  IPL_GAUSSIAN_5x5   7
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CvBox2D32f     CvBox2D
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* allocation/deallocation macros */
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCreateImageData   cvCreateData
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvReleaseImageData  cvReleaseData
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetImageData      cvSetData
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetImageRawData   cvGetRawData
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAlloc            cvCreateData
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmFree             cvReleaseData
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAllocArray       cvCreateData
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmFreeArray        cvReleaseData
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvIntegralImage     cvIntegral
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatchContours     cvMatchShapes
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvMat cvMatArray( int rows, int cols, int type,
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int count, void* data CV_DEFAULT(0))
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvMat( rows*count, cols, type, data );
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvUpdateMHIByTime  cvUpdateMotionHistory
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvAccMask cvAcc
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSquareAccMask cvSquareAcc
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMultiplyAccMask cvMultiplyAcc
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRunningAvgMask(imgY, imgU, mask, alpha) cvRunningAvg(imgY, imgU, alpha, mask)
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetHistThresh  cvSetHistBinRanges
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCalcHistMask(img, mask, hist, doNotClear) cvCalcHist(img, hist, doNotClear, mask)
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvMean( const CvArr* image, const CvArr* mask CV_DEFAULT(0))
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvScalar mean = cvAvg( image, mask );
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return mean.val[0];
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double  cvSumPixels( const CvArr* image )
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvScalar scalar = cvSum( image );
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return scalar.val[0];
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvMean_StdDev( const CvArr* image, double* mean, double* sdv,
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               const CvArr* mask CV_DEFAULT(0))
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvScalar _mean, _sdv;
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvAvgSdv( image, &_mean, &_sdv, mask );
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( mean )
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        *mean = _mean.val[0];
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( sdv )
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        *sdv = _sdv.val[0];
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvmPerspectiveProject( const CvMat* mat, const CvArr* src, CvArr* dst )
1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat tsrc, tdst;
1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvReshape( src, &tsrc, 3, 0 );
1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvReshape( dst, &tdst, 3, 0 );
1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvPerspectiveTransform( &tsrc, &tdst, mat );
1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFillImage( CvArr* mat, double color )
1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvSet( mat, cvColorToScalar(color, cvGetElemType(mat)), 0 );
1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtPixToPlane cvSplit
1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtPlaneToPix cvMerge
1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvRandState
1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRNG     state;    /* RNG state (the current seed and carry)*/
1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int       disttype; /* distribution type */
1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvScalar  param[2]; /* parameters of RNG */
1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvRandState;
1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Changes RNG range while preserving RNG state */
1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvRandSetRange( CvRandState* state, double param1,
1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 double param2, int index CV_DEFAULT(-1))
1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !state )
1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsNullPtr, "cvRandSetRange", "Null pointer to RNG state", "cvcompat.h", 0 );
1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return;
1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( (unsigned)(index + 1) > 4 )
1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsOutOfRange, "cvRandSetRange", "index is not in -1..3", "cvcompat.h", 0 );
1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return;
1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( index < 0 )
1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[0].val[0] = state->param[0].val[1] =
2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[0].val[2] = state->param[0].val[3] = param1;
2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[1].val[0] = state->param[1].val[1] =
2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[1].val[2] = state->param[1].val[3] = param2;
2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[0].val[index] = param1;
2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        state->param[1].val[index] = param2;
2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvRandInit( CvRandState* state, double param1,
2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             double param2, int seed,
2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int disttype CV_DEFAULT(CV_RAND_UNI))
2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !state )
2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsNullPtr, "cvRandInit", "Null pointer to RNG state", "cvcompat.h", 0 );
2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return;
2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( disttype != CV_RAND_UNI && disttype != CV_RAND_NORMAL )
2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsBadFlag, "cvRandInit", "Unknown distribution type", "cvcompat.h", 0 );
2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return;
2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    state->state = (uint64)(seed ? seed : -1);
2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    state->disttype = disttype;
2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvRandSetRange( state, param1, param2, -1 );
2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fills array with random numbers */
2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvRand( CvRandState* state, CvArr* arr )
2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !state )
2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsNullPtr, "cvRand", "Null pointer to RNG state", "cvcompat.h", 0 );
2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return;
2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvRandArr( &state->state, arr, state->disttype, state->param[0], state->param[1] );
2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRandNext( _state ) cvRandInt( &(_state)->state )
2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbRand( CvRandState* state, float* dst, int len )
2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mat = cvMat( 1, len, CV_32F, (void*)dst );
2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvRand( state, &mat );
2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvbCartToPolar( const float* y, const float* x,
2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                float* magnitude, float* angle, int len )
2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = mx;
2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mm = mx;
2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat ma = mx;
2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    my.data.fl = (float*)y;
2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    mm.data.fl = (float*)magnitude;
2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ma.data.fl = (float*)angle;
2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvCartToPolar( &mx, &my, &mm, angle ? &ma : NULL, 1 );
2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvbFastArctan( const float* y, const float* x,
2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               float* angle, int len )
2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = mx;
2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat ma = mx;
2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    my.data.fl = (float*)y;
2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ma.data.fl = (float*)angle;
2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvCartToPolar( &mx, &my, NULL, &ma, 1 );
2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvbSqrt( const float* x, float* y, int len )
2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = mx;
2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    my.data.fl = (float*)y;
2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvPow( &mx, &my, 0.5 );
2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvbInvSqrt( const float* x, float* y, int len )
2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = mx;
2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    my.data.fl = (float*)y;
3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvPow( &mx, &my, -0.5 );
3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvbReciprocal( const float* x, float* y, int len )
3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = mx;
3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    my.data.fl = (float*)y;
3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvPow( &mx, &my, -1 );
3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvbFastExp( const float* x, double* y, int len )
3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = cvMat( 1, len, CV_64F, y );
3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvExp( &mx, &my );
3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvbFastLog( const double* x, float* y, int len )
3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mx = cvMat( 1, len, CV_64F, (void*)x );
3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat my = cvMat( 1, len, CV_32F, y );
3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvLog( &mx, &my );
3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  CvRect  cvContourBoundingRect( void* point_set, int update CV_DEFAULT(0))
3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvBoundingRect( point_set, update );
3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvPseudoInverse( const CvArr* src, CvArr* dst )
3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvInvert( src, dst, CV_SVD );
3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvPseudoInv cvPseudoInverse
3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourMoments( contour, moments ) \
3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvMoments( contour, moments, 0 )
3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetPtrAt              cvPtr2D
3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetAt                 cvGet2D
3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetAt(arr,val,y,x)    cvSet2D((arr),(y),(x),(val))
3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMeanMask  cvMean
3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMean_StdDevMask(img,mask,mean,sdv) cvMean_StdDev(img,mean,sdv,mask)
3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvNormMask(imgA,imgB,mask,normType) cvNorm(imgA,imgB,normType,mask)
3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMinMaxLocMask(img, mask, min_val, max_val, min_loc, max_loc) \
3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvMinMaxLoc(img, min_val, max_val, min_loc, max_loc, mask)
3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRemoveMemoryManager  cvSetMemoryManager
3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSetZero( mat )               cvSetZero( mat )
3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSetIdentity( mat )           cvSetIdentity( mat )
3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAdd( src1, src2, dst )       cvAdd( src1, src2, dst, 0 )
3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSub( src1, src2, dst )       cvSub( src1, src2, dst, 0 )
3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmCopy( src, dst )             cvCopy( src, dst, 0 )
3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMul( src1, src2, dst )       cvMatMulAdd( src1, src2, 0, dst )
3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmTranspose( src, dst )        cvT( src, dst )
3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmInvert( src, dst )           cvInv( src, dst )
3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMahalanobis(vec1, vec2, mat) cvMahalanobis( vec1, vec2, mat )
3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmDotProduct( vec1, vec2 )     cvDotProduct( vec1, vec2 )
3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmCrossProduct(vec1, vec2,dst) cvCrossProduct( vec1, vec2, dst )
3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmTrace( mat )                 (cvTrace( mat )).val[0]
3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMulTransposed( src, dst, order ) cvMulTransposed( src, dst, order )
3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmEigenVV( mat, evec, eval, eps)   cvEigenVV( mat, evec, eval, eps )
3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmDet( mat )                   cvDet( mat )
3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmScale( src, dst, scale )     cvScale( src, dst, scale )
3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCopyImage( src, dst )         cvCopy( src, dst, 0 )
3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvReleaseMatHeader              cvReleaseMat
3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates exact convex hull of 2d point set */
3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvConvexHull( CvPoint* points, int num_points,
3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             CvRect* CV_UNREFERENCED(bound_rect),
3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int orientation, int* hull, int* hullsize )
3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat points1 = cvMat( 1, num_points, CV_32SC2, points );
3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat hull1 = cvMat( 1, num_points, CV_32SC1, hull );
3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvConvexHull2( &points1, &hull1, orientation, 0 );
3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    *hullsize = hull1.cols;
3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates exact convex hull of 2d point set stored in a sequence */
3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourConvexHull( contour, orientation, storage ) \
3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvConvexHull2( contour, storage, orientation )
3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates approximate convex hull of 2d point set */
3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvConvexHullApprox( points, num_points, bound_rect, bandwidth,      \
3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            orientation, hull, hullsize )                   \
4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvConvexHull( points, num_points, bound_rect, orientation, hull, hullsize )
4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates approximate convex hull of 2d point set stored in a sequence */
4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourConvexHullApprox( contour, bandwidth, orientation, storage )   \
4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvConvexHull2( contour, storage, orientation )
4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvMinAreaRect( CvPoint* points, int n,
4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int CV_UNREFERENCED(left), int CV_UNREFERENCED(bottom),
4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int CV_UNREFERENCED(right), int CV_UNREFERENCED(top),
4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvPoint2D32f* anchor,
4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvPoint2D32f* vect1,
4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvPoint2D32f* vect2 )
4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mat = cvMat( 1, n, CV_32SC2, points );
4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBox2D box = cvMinAreaRect2( &mat, 0 );
4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f pt[4];
4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvBoxPoints( box, pt );
4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    *anchor = pt[0];
4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    vect1->x = pt[1].x - pt[0].x;
4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    vect1->y = pt[1].y - pt[0].y;
4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    vect2->x = pt[3].x - pt[0].x;
4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    vect2->y = pt[3].y - pt[0].y;
4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_UNREFERENCED( (left, bottom, right, top) );
4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvDisType;
4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvChainApproxMethod;
4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvContourRetrievalMode;
4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvFitLine3D( CvPoint3D32f* points, int count, int dist,
4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              void *param, float reps, float aeps, float* line )
4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mat = cvMat( 1, count, CV_32FC3, points );
4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float _param = param != NULL ? *(float*)param : 0.f;
4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( dist != CV_DIST_USER );
4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFitLine( &mat, dist, _param, reps, aeps, line );
4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fits a line into set of 2d points in a robust way (M-estimator technique) */
4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvFitLine2D( CvPoint2D32f* points, int count, int dist,
4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              void *param, float reps, float aeps, float* line )
4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mat = cvMat( 1, count, CV_32FC2, points );
4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float _param = param != NULL ? *(float*)param : 0.f;
4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( dist != CV_DIST_USER );
4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFitLine( &mat, dist, _param, reps, aeps, line );
4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void cvFitEllipse( const CvPoint2D32f* points, int count, CvBox2D* box )
4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat mat = cvMat( 1, count, CV_32FC2, (void*)points );
4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    *box = cvFitEllipse2( &mat );
4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Projects 2d points to one of standard coordinate planes
4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (i.e. removes one of coordinates) */
4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvProject3D( CvPoint3D32f* points3D, int count,
4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvPoint2D32f* points2D,
4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int xIndx CV_DEFAULT(0),
4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int yIndx CV_DEFAULT(1))
4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat src = cvMat( 1, count, CV_32FC3, points3D );
4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dst = cvMat( 1, count, CV_32FC2, points2D );
4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float m[6] = {0,0,0,0,0,0};
4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat M = cvMat( 2, 3, CV_32F, m );
4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( (unsigned)xIndx < 3 && (unsigned)yIndx < 3 );
4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m[xIndx] = m[yIndx+3] = 1.f;
4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvTransform( &src, &dst, &M, NULL );
4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves value of the particular bin
4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   of x-dimensional (x=1,2,3,...) histogram */
4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_1D( hist, idx0 ) \
4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float)cvGetReal1D( (hist)->bins, (idx0)))
4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_2D( hist, idx0, idx1 ) \
4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float)cvGetReal2D( (hist)->bins, (idx0), (idx1)))
4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_3D( hist, idx0, idx1, idx2 ) \
4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float)cvGetReal3D( (hist)->bins, (idx0), (idx1), (idx2)))
4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_nD( hist, idx ) \
4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float)cvGetRealND( (hist)->bins, (idx)))
4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns pointer to the particular bin of x-dimesional histogram.
4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   For sparse histogram the bin is created if it didn't exist before */
4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_1D( hist, idx0 ) \
4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float*)cvPtr1D( (hist)->bins, (idx0), 0))
4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_2D( hist, idx0, idx1 ) \
4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float*)cvPtr2D( (hist)->bins, (idx0), (idx1), 0))
4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_3D( hist, idx0, idx1, idx2 ) \
4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float*)cvPtr3D( (hist)->bins, (idx0), (idx1), (idx2), 0))
4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_nD( hist, idx ) \
4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((float*)cvPtrND( (hist)->bins, (idx), 0))
4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SET_ELEM_EXISTS CV_IS_SET_ELEM
5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  int  cvHoughLines( CvArr* image, double rho,
5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              double theta, int threshold,
5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              float* lines, int linesNumber )
5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines );
5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvHoughLines2( image, &linesMat, CV_HOUGH_STANDARD,
5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   rho, theta, threshold, 0, 0 );
5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return linesMat.cols;
5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  int  cvHoughLinesP( CvArr* image, double rho,
5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               double theta, int threshold,
5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               int lineLength, int lineGap,
5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               int* lines, int linesNumber )
5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat linesMat = cvMat( 1, linesNumber, CV_32SC4, lines );
5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvHoughLines2( image, &linesMat, CV_HOUGH_PROBABILISTIC,
5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   rho, theta, threshold, lineLength, lineGap );
5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return linesMat.cols;
5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  int  cvHoughLinesSDiv( CvArr* image, double rho, int srn,
5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  double theta, int stn, int threshold,
5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  float* lines, int linesNumber )
5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines );
5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvHoughLines2( image, &linesMat, CV_HOUGH_MULTI_SCALE,
5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   rho, theta, threshold, srn, stn );
5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return linesMat.cols;
5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Find fundamental matrix */
5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvFindFundamentalMatrix( int* points1, int* points2,
5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int numpoints, int CV_UNREFERENCED(method), float* matrix )
5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* pointsMat1;
5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* pointsMat2;
5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat fundMatr = cvMat(3,3,CV_32F,matrix);
5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int i, curr = 0;
5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    pointsMat1 = cvCreateMat(3,numpoints,CV_64F);
5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    pointsMat2 = cvCreateMat(3,numpoints,CV_64F);
5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    for( i = 0; i < numpoints; i++ )
5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat1,0,i,points1[curr]);//x
5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat1,1,i,points1[curr+1]);//y
5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat1,2,i,1.0);
5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat2,0,i,points2[curr]);//x
5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat2,1,i,points2[curr+1]);//y
5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvmSet(pointsMat2,2,i,1.0);
5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        curr += 2;
5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFindFundamentalMat(pointsMat1,pointsMat2,&fundMatr,CV_FM_RANSAC,1,0.99,0);
5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvReleaseMat(&pointsMat1);
5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvReleaseMat(&pointsMat2);
5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int
5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvFindChessBoardCornerGuesses( const void* arr, void* CV_UNREFERENCED(thresharr),
5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               CvMemStorage * CV_UNREFERENCED(storage),
5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               CvSize pattern_size, CvPoint2D32f * corners,
5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               int *corner_count )
5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvFindChessboardCorners( arr, pattern_size, corners,
5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    corner_count, CV_CALIB_CB_ADAPTIVE_THRESH );
5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calibrates camera using multiple views of calibration pattern */
5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvCalibrateCamera( int image_count, int* _point_counts,
5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize image_size, CvPoint2D32f* _image_points, CvPoint3D32f* _object_points,
5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* _distortion_coeffs, float* _camera_matrix, float* _translation_vectors,
5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* _rotation_matrices, int flags )
5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int i, total = 0;
5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat point_counts = cvMat( image_count, 1, CV_32SC1, _point_counts );
5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points, object_points;
5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_32FC1, _distortion_coeffs );
5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_32FC1, _camera_matrix );
5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_matrices = cvMat( image_count, 9, CV_32FC1, _rotation_matrices );
5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vectors = cvMat( image_count, 3, CV_32FC1, _translation_vectors );
5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    for( i = 0; i < image_count; i++ )
5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        total += _point_counts[i];
5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    image_points = cvMat( total, 1, CV_32FC2, _image_points );
6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    object_points = cvMat( total, 1, CV_32FC3, _object_points );
6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvCalibrateCamera2( &object_points, &image_points, &point_counts, image_size,
6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        &camera_matrix, &dist_coeffs, &rotation_matrices, &translation_vectors,
6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        flags );
6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvCalibrateCamera_64d( int image_count, int* _point_counts,
6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize image_size, CvPoint2D64f* _image_points, CvPoint3D64f* _object_points,
6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _distortion_coeffs, double* _camera_matrix, double* _translation_vectors,
6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _rotation_matrices, int flags )
6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int i, total = 0;
6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat point_counts = cvMat( image_count, 1, CV_32SC1, _point_counts );
6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points, object_points;
6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion_coeffs );
6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, _camera_matrix );
6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_matrices = cvMat( image_count, 9, CV_64FC1, _rotation_matrices );
6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vectors = cvMat( image_count, 3, CV_64FC1, _translation_vectors );
6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    for( i = 0; i < image_count; i++ )
6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        total += _point_counts[i];
6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    image_points = cvMat( total, 1, CV_64FC2, _image_points );
6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    object_points = cvMat( total, 1, CV_64FC3, _object_points );
6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvCalibrateCamera2( &object_points, &image_points, &point_counts, image_size,
6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        &camera_matrix, &dist_coeffs, &rotation_matrices, &translation_vectors,
6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        flags );
6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Find 3d position of object given intrinsic camera parameters,
6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   3d model of the object and projection of the object into view plane */
6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFindExtrinsicCameraParams( int point_count,
6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize CV_UNREFERENCED(image_size), CvPoint2D32f* _image_points,
6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint3D32f* _object_points, float* focal_length,
6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f principal_point, float* _distortion_coeffs,
6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* _rotation_vector, float* _translation_vector )
6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points = cvMat( point_count, 1, CV_32FC2, _image_points );
6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat object_points = cvMat( point_count, 1, CV_32FC3, _object_points );
6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_32FC1, _distortion_coeffs );
6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float a[9];
6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_32FC1, a );
6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_vector = cvMat( 1, 1, CV_32FC3, _rotation_vector );
6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vector = cvMat( 1, 1, CV_32FC3, _translation_vector );
6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[0] = focal_length[0]; a[4] = focal_length[1];
6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[2] = principal_point.x; a[5] = principal_point.y;
6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[1] = a[3] = a[6] = a[7] = 0.f;
6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[8] = 1.f;
6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFindExtrinsicCameraParams2( &object_points, &image_points, &camera_matrix,
6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        &dist_coeffs, &rotation_vector, &translation_vector );
6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Variant of the previous function that takes double-precision parameters */
6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFindExtrinsicCameraParams_64d( int point_count,
6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize CV_UNREFERENCED(image_size), CvPoint2D64f* _image_points,
6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint3D64f* _object_points, double* focal_length,
6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D64f principal_point, double* _distortion_coeffs,
6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _rotation_vector, double* _translation_vector )
6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points );
6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points );
6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion_coeffs );
6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double a[9];
6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, a );
6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_vector = cvMat( 1, 1, CV_64FC3, _rotation_vector );
6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vector = cvMat( 1, 1, CV_64FC3, _translation_vector );
6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[0] = focal_length[0]; a[4] = focal_length[1];
6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[2] = principal_point.x; a[5] = principal_point.y;
6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[1] = a[3] = a[6] = a[7] = 0.;
6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[8] = 1.;
6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFindExtrinsicCameraParams2( &object_points, &image_points, &camera_matrix,
6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        &dist_coeffs, &rotation_vector, &translation_vector );
6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Rodrigues transform */
6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RODRIGUES_M2V  0
6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RODRIGUES_V2M  1
6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Converts rotation_matrix matrix to rotation_matrix vector or vice versa */
6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvRodrigues( CvMat* rotation_matrix, CvMat* rotation_vector,
6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             CvMat* jacobian, int conv_type )
6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( conv_type == CV_RODRIGUES_V2M )
6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvRodrigues2( rotation_vector, rotation_matrix, jacobian );
6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvRodrigues2( rotation_matrix, rotation_vector, jacobian );
6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does reprojection of 3d object points to the view plane */
7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvProjectPoints( int point_count, CvPoint3D64f* _object_points,
7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _rotation_vector, double*  _translation_vector,
7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* focal_length, CvPoint2D64f principal_point,
7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _distortion, CvPoint2D64f* _image_points,
7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _deriv_points_rotation_matrix,
7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _deriv_points_translation_vect,
7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _deriv_points_focal,
7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _deriv_points_principal_point,
7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _deriv_points_distortion_coeffs )
7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points );
7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points );
7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_vector = cvMat( 3, 1, CV_64FC1, _rotation_vector );
7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vector = cvMat( 3, 1, CV_64FC1, _translation_vector );
7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double a[9];
7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, a );
7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion );
7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dpdr = cvMat( 2*point_count, 3, CV_64FC1, _deriv_points_rotation_matrix );
7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dpdt = cvMat( 2*point_count, 3, CV_64FC1, _deriv_points_translation_vect );
7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dpdf = cvMat( 2*point_count, 2, CV_64FC1, _deriv_points_focal );
7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dpdc = cvMat( 2*point_count, 2, CV_64FC1, _deriv_points_principal_point );
7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dpdk = cvMat( 2*point_count, 4, CV_64FC1, _deriv_points_distortion_coeffs );
7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[0] = focal_length[0]; a[4] = focal_length[1];
7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[2] = principal_point.x; a[5] = principal_point.y;
7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[1] = a[3] = a[6] = a[7] = 0.;
7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[8] = 1.;
7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvProjectPoints2( &object_points, &rotation_vector, &translation_vector,
7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      &camera_matrix, &dist_coeffs, &image_points,
7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      &dpdr, &dpdt, &dpdf, &dpdc, &dpdk, 0 );
7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Simpler version of the previous function */
7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvProjectPointsSimple( int point_count, CvPoint3D64f* _object_points,
7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _rotation_matrix, double*  _translation_vector,
7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* _camera_matrix, double* _distortion, CvPoint2D64f* _image_points )
7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points );
7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points );
7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat rotation_matrix = cvMat( 3, 3, CV_64FC1, _rotation_matrix );
7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat translation_vector = cvMat( 3, 1, CV_64FC1, _translation_vector );
7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, _camera_matrix );
7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion );
7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvProjectPoints2( &object_points, &rotation_matrix, &translation_vector,
7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      &camera_matrix, &dist_coeffs, &image_points,
7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      0, 0, 0, 0, 0, 0 );
7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvUnDistortOnce( const CvArr* src, CvArr* dst,
7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                const float* intrinsic_matrix,
7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                const float* distortion_coeffs,
7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int CV_UNREFERENCED(interpolate) )
7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat _a = cvMat( 3, 3, CV_32F, (void*)intrinsic_matrix );
7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat _k = cvMat( 4, 1, CV_32F, (void*)distortion_coeffs );
7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvUndistort2( src, dst, &_a, &_k );
7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* the two functions below have quite hackerish implementations, use with care
7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (or, which is better, switch to cvUndistortInitMap and cvRemap instead */
7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvUnDistortInit( const CvArr* CV_UNREFERENCED(src),
7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvArr* undistortion_map,
7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                const float* A, const float* k,
7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int CV_UNREFERENCED(interpolate) )
7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    union { uchar* ptr; float* fl; } data;
7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize sz;
7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvGetRawData( undistortion_map, &data.ptr, 0, &sz );
7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( sz.width >= 8 );
7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* just save the intrinsic parameters to the map */
7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    data.fl[0] = A[0]; data.fl[1] = A[4];
7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    data.fl[2] = A[2]; data.fl[3] = A[5];
7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    data.fl[4] = k[0]; data.fl[5] = k[1];
7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    data.fl[6] = k[2]; data.fl[7] = k[3];
7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvUnDistort( const CvArr* src, CvArr* dst,
7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             const CvArr* undistortion_map,
7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int CV_UNREFERENCED(interpolate) )
7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    union { uchar* ptr; float* fl; } data;
7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float a[] = {0,0,0,0,0,0,0,0,1};
7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize sz;
7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvGetRawData( undistortion_map, &data.ptr, 0, &sz );
7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( sz.width >= 8 );
7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[0] = data.fl[0]; a[4] = data.fl[1];
7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    a[2] = data.fl[2]; a[5] = data.fl[3];
7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvUnDistortOnce( src, dst, a, data.fl + 4, 1 );
7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  float  cvCalcEMD( const float* signature1, int size1,
7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             const float* signature2, int size2,
8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int dims, int dist_type CV_DEFAULT(CV_DIST_L2),
8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             CvDistanceFunction dist_func CV_DEFAULT(0),
8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             float* lower_bound CV_DEFAULT(0),
8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             void* user_param CV_DEFAULT(0))
8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat sign1 = cvMat( size1, dims + 1, CV_32FC1, (void*)signature1 );
8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat sign2 = cvMat( size2, dims + 1, CV_32FC1, (void*)signature2 );
8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvCalcEMD2( &sign1, &sign2, dist_type, dist_func, 0, 0, lower_bound, user_param );
8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvKMeans( int num_clusters, float** samples,
8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                           int num_samples, int vec_size,
8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                           CvTermCriteria termcrit, int* cluster_idx )
8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* samples_mat = cvCreateMat( num_samples, vec_size, CV_32FC1 );
8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat cluster_idx_mat = cvMat( num_samples, 1, CV_32SC1, cluster_idx );
8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int i;
8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    for( i = 0; i < num_samples; i++ )
8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        memcpy( samples_mat->data.fl + i*vec_size, samples[i], vec_size*sizeof(float));
8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvKMeans2( samples_mat, num_clusters, &cluster_idx_mat, termcrit );
8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvReleaseMat( &samples_mat );
8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void  cvStartScanGraph( CvGraph* graph, CvGraphScanner* scanner,
8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  CvGraphVtx* vtx CV_DEFAULT(NULL),
8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS))
8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvGraphScanner* temp_scanner;
8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !scanner )
8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsNullPtr, "cvStartScanGraph", "Null scanner pointer", "cvcompat.h", 0 );
8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    temp_scanner = cvCreateGraphScanner( graph, vtx, mask );
8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    *scanner = *temp_scanner;
8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvFree( &temp_scanner );
8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvEndScanGraph( CvGraphScanner* scanner )
8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !scanner )
8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvError( CV_StsNullPtr, "cvEndScanGraph", "Null scanner pointer", "cvcompat.h", 0 );
8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( scanner->stack )
8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        CvGraphScanner* temp_scanner = (CvGraphScanner*)cvAlloc( sizeof(*temp_scanner) );
8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        *temp_scanner = *scanner;
8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvReleaseGraphScanner( &temp_scanner );
8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        memset( scanner, 0, sizeof(*scanner) );
8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvKalmanUpdateByTime  cvKalmanPredict
8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvKalmanUpdateByMeasurement cvKalmanCorrect
8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* old drawing functions */
8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvLineAA( CvArr* img, CvPoint pt1, CvPoint pt2,
8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                           double color, int scale CV_DEFAULT(0))
8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvLine( img, pt1, pt2, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvCircleAA( CvArr* img, CvPoint center, int radius,
8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             double color, int scale CV_DEFAULT(0) )
8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvCircle( img, center, radius, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvEllipseAA( CvArr* img, CvPoint center, CvSize axes,
8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              double angle, double start_angle,
8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              double end_angle, double color,
8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int scale CV_DEFAULT(0) )
8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvEllipse( img, center, axes, angle, start_angle, end_angle,
8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn               cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE  void  cvPolyLineAA( CvArr* img, CvPoint** pts, int* npts, int contours,
8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               int is_closed, double color, int scale CV_DEFAULT(0) )
8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    cvPolyLine( img, pts, npts, contours, is_closed,
8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                cvColorToScalar(color, cvGetElemType(img)),
8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                1, CV_AA, scale );
8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMake2DPoints cvConvertPointsHomogeneous
8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMake3DPoints cvConvertPointsHomogeneous
8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform
8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvConvertPointsHomogenious cvConvertPointsHomogeneous
8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                   Pixel Access Macros                                  *
8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition8u
9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar*  currline;      /* pointer to the start of the current pixel line   */
9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar*  topline;       /* pointer to the start of the top pixel line       */
9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar*  bottomline;    /* pointer to the start of the first line           */
9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    /* which is below the image                         */
9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     x;                      /* current x coordinate ( in pixels )               */
9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     width;                  /* width of the image  ( in pixels )                */
9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     height;                 /* height of the image  ( in pixels )               */
9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step;                   /* distance between lines ( in elements of single   */
9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    /* plane )                                          */
9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step_arr[3];            /* array: ( 0, -step, step ). It is used for        */
9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    /* vertical moving                                  */
9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition8u;
9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* this structure differs from the above only in data type */
9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition8s
9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    schar*  currline;
9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    schar*  topline;
9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    schar*  bottomline;
9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     x;
9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     width;
9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     height;
9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step;
9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step_arr[3];
9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition8s;
9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* this structure differs from the CvPixelPosition8u only in data type */
9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition32f
9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float*  currline;
9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float*  topline;
9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float*  bottomline;
9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     x;
9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     width;
9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     height;
9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step;
9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     step_arr[3];
9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition32f;
9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initialize one of the CvPixelPosition structures.   */
9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - initialized structure                     */
9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  origin - pointer to the left-top corner of the ROI */
9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  step   - width of the whole image in bytes         */
9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  roi    - width & height of the ROI                 */
9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  x, y   - initial position                          */
9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_INIT_PIXEL_POS(pos, origin, _step, roi, _x, _y, orientation)    \
9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (                                                                        \
9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).step = (_step)/sizeof((pos).currline[0]) * (orientation ? -1 : 1), \
9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).width = (roi).width,                                               \
9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).height = (roi).height,                                             \
9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).bottomline = (origin) + (pos).step*(pos).height,                   \
9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).topline = (origin) - (pos).step,                                   \
9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).step_arr[0] = 0,                                                   \
9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).step_arr[1] = -(pos).step,                                         \
9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).step_arr[2] = (pos).step,                                          \
9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).x = (_x),                                                          \
9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline = (origin) + (pos).step*(_y) )
9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move to specified point ( absolute shift ) */
9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure               */
9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  x, y   - coordinates of the new position  */
9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels     */
9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_TO( pos, _x, _y, cs )                                                   \
9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn((pos).currline = (_y) >= 0 && (_y) < (pos).height ? (pos).topline + ((_y)+1)*(pos).step : 0, \
9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x = (_x) >= 0 && (_x) < (pos).width ? (_x) : 0, (pos).currline + (_x) * (cs) )
9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Get current coordinates                    */
9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure               */
9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  x, y   - coordinates of the new position  */
9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels     */
9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GET_CURRENT( pos, cs )  ((pos).currline + (pos).x * (cs))
9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel relatively to current position */
9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure                     */
9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels           */
9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left */
9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LEFT( pos, cs ) \
9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( --(pos).x >= 0 ? (pos).currline + (pos).x*(cs) : 0 )
9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right */
9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RIGHT( pos, cs ) \
9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( ++(pos).x < (pos).width ? (pos).currline + (pos).x*(cs) : 0 )
9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* up */
9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_UP( pos, cs ) \
9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((pos).currline -= (pos).step) != (pos).topline ? (pos).currline + (pos).x*(cs) : 0 )
9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* down */
9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_DOWN( pos, cs ) \
9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((pos).currline += (pos).step) != (pos).bottomline ? (pos).currline + (pos).x*(cs) : 0 )
9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left up */
9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LU( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_UP(pos, cs))
9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right up */
10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RU( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_UP(pos, cs))
10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left down */
10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LD( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_DOWN(pos, cs))
10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right down */
10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RD( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_DOWN(pos, cs))
10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel relatively to current position with wrapping when the position     */
10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* achieves image boundary                                                              */
10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure                                                         */
10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels                                               */
10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left */
10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LEFT_WRAP( pos, cs ) \
10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pos).currline + ( --(pos).x >= 0 ? (pos).x : ((pos).x = (pos).width-1))*(cs))
10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right */
10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RIGHT_WRAP( pos, cs ) \
10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pos).currline + ( ++(pos).x < (pos).width ? (pos).x : ((pos).x = 0))*(cs) )
10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* up */
10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_UP_WRAP( pos, cs ) \
10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((((pos).currline -= (pos).step) != (pos).topline ? \
10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline : ((pos).currline = (pos).bottomline - (pos).step)) + (pos).x*(cs) )
10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* down */
10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_DOWN_WRAP( pos, cs ) \
10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((((pos).currline += (pos).step) != (pos).bottomline ? \
10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline : ((pos).currline = (pos).topline + (pos).step)) + (pos).x*(cs) )
10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left up */
10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LU_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))
10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right up */
10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RU_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))
10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left down */
10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LD_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))
10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right down */
10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RD_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))
10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Numeric constants which used for moving in arbitrary direction  */
10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_NONE   2
10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LEFT   1
10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RIGHT  3
10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_UP     6
10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_DOWN  10
10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LU     5
10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RU     7
10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LD     9
10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RD    11
10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel in specified direction                                     */
10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure                                                 */
10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  shift  - direction ( it's value must be one of the CV_SHIFT_� constants ) */
10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels                                       */
10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_PARAM( pos, shift, cs )                                             \
10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ( (pos).currline += (pos).step_arr[(shift)>>2], (pos).x += ((shift)&3)-2,       \
10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((pos).currline != (pos).topline && (pos).currline != (pos).bottomline &&       \
10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).x >= 0 && (pos).x < (pos).width) ? (pos).currline + (pos).x*(cs) : 0 )
10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel in specified direction with wrapping when the               */
10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* position achieves image boundary                                              */
10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  pos    - position structure                                                  */
10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  shift  - direction ( it's value must be one of the CV_SHIFT_� constants )  */
10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*  cs     - number of the image channels                                        */
10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_PARAM_WRAP( pos, shift, cs )                                        \
10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ( (pos).currline += (pos).step_arr[(shift)>>2],                                 \
10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline = ((pos).currline == (pos).topline ?                             \
10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).bottomline - (pos).step :                                                 \
10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline == (pos).bottomline ?                                            \
10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).topline + (pos).step : (pos).currline),                                   \
10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                                                    \
10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).x += ((shift)&3)-2,                                                       \
10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).x = ((pos).x < 0 ? (pos).width-1 : (pos).x >= (pos).width ? 0 : (pos).x), \
10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                                                    \
10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (pos).currline + (pos).x*(cs) )
10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif/*_CVCOMPAT_H_*/
1081