cv.h
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:70k
源码类别:

波变换

开发平台:

Visual C++

  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. //  By downloading, copying, installing or using the software you agree to this license.
  6. //  If you do not agree to this license, do not download, install,
  7. //  copy or use the software.
  8. //
  9. //
  10. //                           License Agreement
  11. //                For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
  14. // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
  15. // Third party copyrights are property of their respective owners.
  16. //
  17. // Redistribution and use in source and binary forms, with or without modification,
  18. // are permitted provided that the following conditions are met:
  19. //
  20. //   * Redistribution's of source code must retain the above copyright notice,
  21. //     this list of conditions and the following disclaimer.
  22. //
  23. //   * Redistribution's in binary form must reproduce the above copyright notice,
  24. //     this list of conditions and the following disclaimer in the documentation
  25. //     and/or other materials provided with the distribution.
  26. //
  27. //   * The name of the copyright holders may not be used to endorse or promote products
  28. //     derived from this software without specific prior written permission.
  29. //
  30. // This software is provided by the copyright holders and contributors "as is" and
  31. // any express or implied warranties, including, but not limited to, the implied
  32. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  33. // In no event shall the Intel Corporation or contributors be liable for any direct,
  34. // indirect, incidental, special, exemplary, or consequential damages
  35. // (including, but not limited to, procurement of substitute goods or services;
  36. // loss of use, data, or profits; or business interruption) however caused
  37. // and on any theory of liability, whether in contract, strict liability,
  38. // or tort (including negligence or otherwise) arising in any way out of
  39. // the use of this software, even if advised of the possibility of such damage.
  40. //
  41. //M*/
  42. #ifndef _CV_H_
  43. #define _CV_H_
  44. #ifdef __IPL_H__
  45. #define HAVE_IPL
  46. #endif
  47. #ifndef SKIP_INCLUDES
  48.   #if defined(_CH_)
  49.     #pragma package <chopencv>
  50.     #include <chdl.h>
  51.     LOAD_CHDL(cv)
  52.   #endif
  53. #endif
  54. #include "cxcore.h"
  55. #include "cvtypes.h"
  56. #ifdef __cplusplus
  57. extern "C" {
  58. #endif
  59. /****************************************************************************************
  60. *                                    Image Processing                                    *
  61. ****************************************************************************************/
  62. /* Copies source 2D array inside of the larger destination array and
  63.    makes a border of the specified type (IPL_BORDER_*) around the copied area. */
  64. CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
  65.                               int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));
  66. #define CV_BLUR_NO_SCALE 0
  67. #define CV_BLUR  1
  68. #define CV_GAUSSIAN  2
  69. #define CV_MEDIAN 3
  70. #define CV_BILATERAL 4
  71. /* Smoothes array (removes noise) */
  72. CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
  73.                       int smoothtype CV_DEFAULT(CV_GAUSSIAN),
  74.                       int size1 CV_DEFAULT(3),
  75.                       int size2 CV_DEFAULT(0),
  76.                       double sigma1 CV_DEFAULT(0),
  77.                       double sigma2 CV_DEFAULT(0));
  78. /* Convolves the image with the kernel */
  79. CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,
  80.                         CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));
  81. /* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */
  82. CVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,
  83.                        CvArr* sqsum CV_DEFAULT(NULL),
  84.                        CvArr* tilted_sum CV_DEFAULT(NULL));
  85. /*
  86.    Smoothes the input image with gaussian kernel and then down-samples it.
  87.    dst_width = floor(src_width/2)[+1],
  88.    dst_height = floor(src_height/2)[+1]
  89. */
  90. CVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst,
  91.                         int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
  92. /*
  93.    Up-samples image and smoothes the result with gaussian kernel.
  94.    dst_width = src_width*2,
  95.    dst_height = src_height*2
  96. */
  97. CVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,
  98.                       int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
  99. /* Builds pyramid for an image */
  100. CVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,
  101.                                 const CvSize* layer_sizes CV_DEFAULT(0),
  102.                                 CvArr* bufarr CV_DEFAULT(0),
  103.                                 int calc CV_DEFAULT(1),
  104.                                 int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
  105. /* Releases pyramid */
  106. CVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers );
  107. /* Splits color or grayscale image into multiple connected components
  108.    of nearly the same color/brightness using modification of Burt algorithm.
  109.    comp with contain a pointer to sequence (CvSeq)
  110.    of connected components (CvConnectedComp) */
  111. CVAPI(void) cvPyrSegmentation( IplImage* src, IplImage* dst,
  112.                               CvMemStorage* storage, CvSeq** comp,
  113.                               int level, double threshold1,
  114.                               double threshold2 );
  115. /* Filters image using meanshift algorithm */
  116. CVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,
  117.     double sp, double sr, int max_level CV_DEFAULT(1),
  118.     CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));
  119. /* Segments image using seed "markers" */
  120. CVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );
  121. #define CV_INPAINT_NS      0
  122. #define CV_INPAINT_TELEA   1
  123. /* Inpaints the selected region in the image */
  124. CVAPI(void) cvInpaint( const CvArr* src, const CvArr* inpaint_mask,
  125.                        CvArr* dst, double inpaintRange, int flags );
  126. #define CV_SCHARR -1
  127. #define CV_MAX_SOBEL_KSIZE 7
  128. /* Calculates an image derivative using generalized Sobel
  129.    (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.
  130.    Scharr can be used only for the first dx or dy derivative */
  131. CVAPI(void) cvSobel( const CvArr* src, CvArr* dst,
  132.                     int xorder, int yorder,
  133.                     int aperture_size CV_DEFAULT(3));
  134. /* Calculates the image Laplacian: (d2/dx + d2/dy)I */
  135. CVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,
  136.                       int aperture_size CV_DEFAULT(3) );
  137. /* Constants for color conversion */
  138. #define  CV_BGR2BGRA    0
  139. #define  CV_RGB2RGBA    CV_BGR2BGRA
  140. #define  CV_BGRA2BGR    1
  141. #define  CV_RGBA2RGB    CV_BGRA2BGR
  142. #define  CV_BGR2RGBA    2
  143. #define  CV_RGB2BGRA    CV_BGR2RGBA
  144. #define  CV_RGBA2BGR    3
  145. #define  CV_BGRA2RGB    CV_RGBA2BGR
  146. #define  CV_BGR2RGB     4
  147. #define  CV_RGB2BGR     CV_BGR2RGB
  148. #define  CV_BGRA2RGBA   5
  149. #define  CV_RGBA2BGRA   CV_BGRA2RGBA
  150. #define  CV_BGR2GRAY    6
  151. #define  CV_RGB2GRAY    7
  152. #define  CV_GRAY2BGR    8
  153. #define  CV_GRAY2RGB    CV_GRAY2BGR
  154. #define  CV_GRAY2BGRA   9
  155. #define  CV_GRAY2RGBA   CV_GRAY2BGRA
  156. #define  CV_BGRA2GRAY   10
  157. #define  CV_RGBA2GRAY   11
  158. #define  CV_BGR2BGR565  12
  159. #define  CV_RGB2BGR565  13
  160. #define  CV_BGR5652BGR  14
  161. #define  CV_BGR5652RGB  15
  162. #define  CV_BGRA2BGR565 16
  163. #define  CV_RGBA2BGR565 17
  164. #define  CV_BGR5652BGRA 18
  165. #define  CV_BGR5652RGBA 19
  166. #define  CV_GRAY2BGR565 20
  167. #define  CV_BGR5652GRAY 21
  168. #define  CV_BGR2BGR555  22
  169. #define  CV_RGB2BGR555  23
  170. #define  CV_BGR5552BGR  24
  171. #define  CV_BGR5552RGB  25
  172. #define  CV_BGRA2BGR555 26
  173. #define  CV_RGBA2BGR555 27
  174. #define  CV_BGR5552BGRA 28
  175. #define  CV_BGR5552RGBA 29
  176. #define  CV_GRAY2BGR555 30
  177. #define  CV_BGR5552GRAY 31
  178. #define  CV_BGR2XYZ     32
  179. #define  CV_RGB2XYZ     33
  180. #define  CV_XYZ2BGR     34
  181. #define  CV_XYZ2RGB     35
  182. #define  CV_BGR2YCrCb   36
  183. #define  CV_RGB2YCrCb   37
  184. #define  CV_YCrCb2BGR   38
  185. #define  CV_YCrCb2RGB   39
  186. #define  CV_BGR2HSV     40
  187. #define  CV_RGB2HSV     41
  188. #define  CV_BGR2Lab     44
  189. #define  CV_RGB2Lab     45
  190. #define  CV_BayerBG2BGR 46
  191. #define  CV_BayerGB2BGR 47
  192. #define  CV_BayerRG2BGR 48
  193. #define  CV_BayerGR2BGR 49
  194. #define  CV_BayerBG2RGB CV_BayerRG2BGR
  195. #define  CV_BayerGB2RGB CV_BayerGR2BGR
  196. #define  CV_BayerRG2RGB CV_BayerBG2BGR
  197. #define  CV_BayerGR2RGB CV_BayerGB2BGR
  198. #define  CV_BGR2Luv     50
  199. #define  CV_RGB2Luv     51
  200. #define  CV_BGR2HLS     52
  201. #define  CV_RGB2HLS     53
  202. #define  CV_HSV2BGR     54
  203. #define  CV_HSV2RGB     55
  204. #define  CV_Lab2BGR     56
  205. #define  CV_Lab2RGB     57
  206. #define  CV_Luv2BGR     58
  207. #define  CV_Luv2RGB     59
  208. #define  CV_HLS2BGR     60
  209. #define  CV_HLS2RGB     61
  210. #define  CV_COLORCVT_MAX  100
  211. /* Converts input array pixels from one color space to another */
  212. CVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );
  213. #define  CV_INTER_NN        0
  214. #define  CV_INTER_LINEAR    1
  215. #define  CV_INTER_CUBIC     2
  216. #define  CV_INTER_AREA      3
  217. #define  CV_WARP_FILL_OUTLIERS 8
  218. #define  CV_WARP_INVERSE_MAP  16
  219. /* Resizes image (input array is resized to fit the destination array) */
  220. CVAPI(void)  cvResize( const CvArr* src, CvArr* dst,
  221.                        int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
  222. /* Warps image with affine transform */
  223. CVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
  224.                            int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
  225.                            CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
  226. /* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */
  227. CVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,
  228.                                     const CvPoint2D32f * dst,
  229.                                     CvMat * map_matrix );
  230. /* Computes rotation_matrix matrix */
  231. CVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle,
  232.                                    double scale, CvMat* map_matrix );
  233. /* Warps image with perspective (projective) transform */
  234. CVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
  235.                                 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
  236.                                 CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
  237. /* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */
  238. CVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,
  239.                                          const CvPoint2D32f* dst,
  240.                                          CvMat* map_matrix );
  241. /* Performs generic geometric transformation using the specified coordinate maps */
  242. CVAPI(void)  cvRemap( const CvArr* src, CvArr* dst,
  243.                       const CvArr* mapx, const CvArr* mapy,
  244.                       int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
  245.                       CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
  246. /* Converts mapx & mapy from floating-point to integer formats for cvRemap */
  247. CVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy,
  248.                             CvArr* mapxy, CvArr* mapalpha );
  249. /* Performs forward or inverse log-polar image transform */
  250. CVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst,
  251.                          CvPoint2D32f center, double M,
  252.                          int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
  253. /* Performs forward or inverse linear-polar image transform */
  254. CVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst,
  255.                          CvPoint2D32f center, double maxRadius,
  256.                          int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
  257. #define  CV_SHAPE_RECT      0
  258. #define  CV_SHAPE_CROSS     1
  259. #define  CV_SHAPE_ELLIPSE   2
  260. #define  CV_SHAPE_CUSTOM    100
  261. /* creates structuring element used for morphological operations */
  262. CVAPI(IplConvKernel*)  cvCreateStructuringElementEx(
  263.             int cols, int  rows, int  anchor_x, int  anchor_y,
  264.             int shape, int* values CV_DEFAULT(NULL) );
  265. /* releases structuring element */
  266. CVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element );
  267. /* erodes input image (applies minimum filter) one or more times.
  268.    If element pointer is NULL, 3x3 rectangular element is used */
  269. CVAPI(void)  cvErode( const CvArr* src, CvArr* dst,
  270.                       IplConvKernel* element CV_DEFAULT(NULL),
  271.                       int iterations CV_DEFAULT(1) );
  272. /* dilates input image (applies maximum filter) one or more times.
  273.    If element pointer is NULL, 3x3 rectangular element is used */
  274. CVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,
  275.                        IplConvKernel* element CV_DEFAULT(NULL),
  276.                        int iterations CV_DEFAULT(1) );
  277. #define CV_MOP_OPEN         2
  278. #define CV_MOP_CLOSE        3
  279. #define CV_MOP_GRADIENT     4
  280. #define CV_MOP_TOPHAT       5
  281. #define CV_MOP_BLACKHAT     6
  282. /* Performs complex morphological transformation */
  283. CVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,
  284.                              CvArr* temp, IplConvKernel* element,
  285.                              int operation, int iterations CV_DEFAULT(1) );
  286. /* Calculates all spatial and central moments up to the 3rd order */
  287. CVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));
  288. /* Retrieve particular spatial, central or normalized central moments */
  289. CVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );
  290. CVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );
  291. CVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments,
  292.                                              int x_order, int y_order );
  293. /* Calculates 7 Hu's invariants from precalculated spatial and central moments */
  294. CVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments );
  295. /*********************************** data sampling **************************************/
  296. /* Fetches pixels that belong to the specified line segment and stores them to the buffer.
  297.    Returns the number of retrieved points. */
  298. CVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,
  299.                           int connectivity CV_DEFAULT(8));
  300. /* Retrieves the rectangular image region with specified center from the input array.
  301.  dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).
  302.  Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/
  303. CVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );
  304. /* Retrieves quadrangle from the input array.
  305.     matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)
  306.                 ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels
  307.                                      with fractional coordinates)
  308. */
  309. CVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,
  310.                                     const CvMat* map_matrix );
  311. /* Methods for comparing two array */
  312. #define  CV_TM_SQDIFF        0
  313. #define  CV_TM_SQDIFF_NORMED 1
  314. #define  CV_TM_CCORR         2
  315. #define  CV_TM_CCORR_NORMED  3
  316. #define  CV_TM_CCOEFF        4
  317. #define  CV_TM_CCOEFF_NORMED 5
  318. /* Measures similarity between template and overlapped windows in the source image
  319.    and fills the resultant image with the measurements */
  320. CVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ,
  321.                               CvArr* result, int method );
  322. /* Computes earth mover distance between
  323.    two weighted point sets (called signatures) */
  324. CVAPI(float)  cvCalcEMD2( const CvArr* signature1,
  325.                           const CvArr* signature2,
  326.                           int distance_type,
  327.                           CvDistanceFunction distance_func CV_DEFAULT(NULL),
  328.                           const CvArr* cost_matrix CV_DEFAULT(NULL),
  329.                           CvArr* flow CV_DEFAULT(NULL),
  330.                           float* lower_bound CV_DEFAULT(NULL),
  331.                           void* userdata CV_DEFAULT(NULL));
  332. /****************************************************************************************
  333. *                              Contours retrieving                                       *
  334. ****************************************************************************************/
  335. /* Retrieves outer and optionally inner boundaries of white (non-zero) connected
  336.    components in the black (zero) background */
  337. CVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
  338.                             int header_size CV_DEFAULT(sizeof(CvContour)),
  339.                             int mode CV_DEFAULT(CV_RETR_LIST),
  340.                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
  341.                             CvPoint offset CV_DEFAULT(cvPoint(0,0)));
  342. /* Initalizes contour retrieving process.
  343.    Calls cvStartFindContours.
  344.    Calls cvFindNextContour until null pointer is returned
  345.    or some other condition becomes true.
  346.    Calls cvEndFindContours at the end. */
  347. CVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage,
  348.                             int header_size CV_DEFAULT(sizeof(CvContour)),
  349.                             int mode CV_DEFAULT(CV_RETR_LIST),
  350.                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
  351.                             CvPoint offset CV_DEFAULT(cvPoint(0,0)));
  352. /* Retrieves next contour */
  353. CVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner );
  354. /* Substitutes the last retrieved contour with the new one
  355.    (if the substitutor is null, the last retrieved contour is removed from the tree) */
  356. CVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );
  357. /* Releases contour scanner and returns pointer to the first outer contour */
  358. CVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner );
  359. /* Approximates a single Freeman chain or a tree of chains to polygonal curves */
  360. CVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,
  361.                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
  362.                             double parameter CV_DEFAULT(0),
  363.                             int  minimal_perimeter CV_DEFAULT(0),
  364.                             int  recursive CV_DEFAULT(0));
  365. /* Initalizes Freeman chain reader.
  366.    The reader is used to iteratively get coordinates of all the chain points.
  367.    If the Freeman codes should be read as is, a simple sequence reader should be used */
  368. CVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );
  369. /* Retrieves the next chain point */
  370. CVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );
  371. /****************************************************************************************
  372. *                                  Motion Analysis                                       *
  373. ****************************************************************************************/
  374. /************************************ optical flow ***************************************/
  375. /* Calculates optical flow for 2 images using classical Lucas & Kanade algorithm */
  376. CVAPI(void)  cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr,
  377.                                   CvSize win_size, CvArr* velx, CvArr* vely );
  378. /* Calculates optical flow for 2 images using block matching algorithm */
  379. CVAPI(void)  cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr,
  380.                                   CvSize block_size, CvSize shift_size,
  381.                                   CvSize max_range, int use_previous,
  382.                                   CvArr* velx, CvArr* vely );
  383. /* Calculates Optical flow for 2 images using Horn & Schunck algorithm */
  384. CVAPI(void)  cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr,
  385.                                   int use_previous, CvArr* velx, CvArr* vely,
  386.                                   double lambda, CvTermCriteria criteria );
  387. #define  CV_LKFLOW_PYR_A_READY       1
  388. #define  CV_LKFLOW_PYR_B_READY       2
  389. #define  CV_LKFLOW_INITIAL_GUESSES   4
  390. #define  CV_LKFLOW_GET_MIN_EIGENVALS 8
  391. /* It is Lucas & Kanade method, modified to use pyramids.
  392.    Also it does several iterations to get optical flow for
  393.    every point at every pyramid level.
  394.    Calculates optical flow between two images for certain set of points (i.e.
  395.    it is a "sparse" optical flow, which is opposite to the previous 3 methods) */
  396. CVAPI(void)  cvCalcOpticalFlowPyrLK( const CvArr*  prev, const CvArr*  curr,
  397.                                      CvArr*  prev_pyr, CvArr*  curr_pyr,
  398.                                      const CvPoint2D32f* prev_features,
  399.                                      CvPoint2D32f* curr_features,
  400.                                      int       count,
  401.                                      CvSize    win_size,
  402.                                      int       level,
  403.                                      char*     status,
  404.                                      float*    track_error,
  405.                                      CvTermCriteria criteria,
  406.                                      int       flags );
  407. /* Modification of a previous sparse optical flow algorithm to calculate
  408.    affine flow */
  409. CVAPI(void)  cvCalcAffineFlowPyrLK( const CvArr*  prev, const CvArr*  curr,
  410.                                     CvArr*  prev_pyr, CvArr*  curr_pyr,
  411.                                     const CvPoint2D32f* prev_features,
  412.                                     CvPoint2D32f* curr_features,
  413.                                     float* matrices, int  count,
  414.                                     CvSize win_size, int  level,
  415.                                     char* status, float* track_error,
  416.                                     CvTermCriteria criteria, int flags );
  417. /* Estimate rigid transformation between 2 images or 2 point sets */
  418. CVAPI(int)  cvEstimateRigidTransform( const CvArr* A, const CvArr* B,
  419.                                       CvMat* M, int full_affine );
  420. /********************************* motion templates *************************************/
  421. /****************************************************************************************
  422. *        All the motion template functions work only with single channel images.         *
  423. *        Silhouette image must have depth IPL_DEPTH_8U or IPL_DEPTH_8S                   *
  424. *        Motion history image must have depth IPL_DEPTH_32F,                             *
  425. *        Gradient mask - IPL_DEPTH_8U or IPL_DEPTH_8S,                                   *
  426. *        Motion orientation image - IPL_DEPTH_32F                                        *
  427. *        Segmentation mask - IPL_DEPTH_32F                                               *
  428. *        All the angles are in degrees, all the times are in milliseconds                *
  429. ****************************************************************************************/
  430. /* Updates motion history image given motion silhouette */
  431. CVAPI(void)    cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,
  432.                                       double timestamp, double duration );
  433. /* Calculates gradient of the motion history image and fills
  434.    a mask indicating where the gradient is valid */
  435. CVAPI(void)    cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,
  436.                                      double delta1, double delta2,
  437.                                      int aperture_size CV_DEFAULT(3));
  438. /* Calculates average motion direction within a selected motion region
  439.    (region can be selected by setting ROIs and/or by composing a valid gradient mask
  440.    with the region mask) */
  441. CVAPI(double)  cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask,
  442.                                         const CvArr* mhi, double timestamp,
  443.                                         double duration );
  444. /* Splits a motion history image into a few parts corresponding to separate independent motions
  445.    (e.g. left hand, right hand) */
  446. CVAPI(CvSeq*)  cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask,
  447.                                 CvMemStorage* storage,
  448.                                 double timestamp, double seg_thresh );
  449. /*********************** Background statistics accumulation *****************************/
  450. /* Adds image to accumulator */
  451. CVAPI(void)  cvAcc( const CvArr* image, CvArr* sum,
  452.                     const CvArr* mask CV_DEFAULT(NULL) );
  453. /* Adds squared image to accumulator */
  454. CVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum,
  455.                           const CvArr* mask CV_DEFAULT(NULL) );
  456. /* Adds a product of two images to accumulator */
  457. CVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,
  458.                             const CvArr* mask CV_DEFAULT(NULL) );
  459. /* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */
  460. CVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,
  461.                            const CvArr* mask CV_DEFAULT(NULL) );
  462. /****************************************************************************************
  463. *                                       Tracking                                         *
  464. ****************************************************************************************/
  465. /* Implements CAMSHIFT algorithm - determines object position, size and orientation
  466.    from the object histogram back project (extension of meanshift) */
  467. CVAPI(int)  cvCamShift( const CvArr* prob_image, CvRect  window,
  468.                        CvTermCriteria criteria, CvConnectedComp* comp,
  469.                        CvBox2D* box CV_DEFAULT(NULL) );
  470. /* Implements MeanShift algorithm - determines object position
  471.    from the object histogram back project */
  472. CVAPI(int)  cvMeanShift( const CvArr* prob_image, CvRect  window,
  473.                         CvTermCriteria criteria, CvConnectedComp* comp );
  474. /* Creates ConDensation filter state */
  475. CVAPI(CvConDensation*)  cvCreateConDensation( int dynam_params,
  476.                                              int measure_params,
  477.                                              int sample_count );
  478. /* Releases ConDensation filter state */
  479. CVAPI(void)  cvReleaseConDensation( CvConDensation** condens );
  480. /* Updates ConDensation filter by time (predict future state of the system) */
  481. CVAPI(void)  cvConDensUpdateByTime( CvConDensation* condens);
  482. /* Initializes ConDensation filter samples  */
  483. CVAPI(void)  cvConDensInitSampleSet( CvConDensation* condens, CvMat* lower_bound, CvMat* upper_bound );
  484. /* Creates Kalman filter and sets A, B, Q, R and state to some initial values */
  485. CVAPI(CvKalman*) cvCreateKalman( int dynam_params, int measure_params,
  486.                                 int control_params CV_DEFAULT(0));
  487. /* Releases Kalman filter state */
  488. CVAPI(void)  cvReleaseKalman( CvKalman** kalman);
  489. /* Updates Kalman filter by time (predicts future state of the system) */
  490. CVAPI(const CvMat*)  cvKalmanPredict( CvKalman* kalman,
  491.                                      const CvMat* control CV_DEFAULT(NULL));
  492. /* Updates Kalman filter by measurement
  493.    (corrects state of the system and internal matrices) */
  494. CVAPI(const CvMat*)  cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement );
  495. /****************************************************************************************
  496. *                              Planar subdivisions                                       *
  497. ****************************************************************************************/
  498. /* Initializes Delaunay triangulation */
  499. CVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );
  500. /* Creates new subdivision */
  501. CVAPI(CvSubdiv2D*)  cvCreateSubdiv2D( int subdiv_type, int header_size,
  502.                                       int vtx_size, int quadedge_size,
  503.                                       CvMemStorage* storage );
  504. /************************* high-level subdivision functions ***************************/
  505. /* Simplified Delaunay diagram creation */
  506. CV_INLINE  CvSubdiv2D* cvCreateSubdivDelaunay2D( CvRect rect, CvMemStorage* storage )
  507. {
  508.     CvSubdiv2D* subdiv = cvCreateSubdiv2D( CV_SEQ_KIND_SUBDIV2D, sizeof(*subdiv),
  509.                          sizeof(CvSubdiv2DPoint), sizeof(CvQuadEdge2D), storage );
  510.     cvInitSubdivDelaunay2D( subdiv, rect );
  511.     return subdiv;
  512. }
  513. /* Inserts new point to the Delaunay triangulation */
  514. CVAPI(CvSubdiv2DPoint*)  cvSubdivDelaunay2DInsert( CvSubdiv2D* subdiv, CvPoint2D32f pt);
  515. /* Locates a point within the Delaunay triangulation (finds the edge
  516.    the point is left to or belongs to, or the triangulation point the given
  517.    point coinsides with */
  518. CVAPI(CvSubdiv2DPointLocation)  cvSubdiv2DLocate(
  519.                                CvSubdiv2D* subdiv, CvPoint2D32f pt,
  520.                                CvSubdiv2DEdge* edge,
  521.                                CvSubdiv2DPoint** vertex CV_DEFAULT(NULL) );
  522. /* Calculates Voronoi tesselation (i.e. coordinates of Voronoi points) */
  523. CVAPI(void)  cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );
  524. /* Removes all Voronoi points from the tesselation */
  525. CVAPI(void)  cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );
  526. /* Finds the nearest to the given point vertex in subdivision. */
  527. CVAPI(CvSubdiv2DPoint*) cvFindNearestPoint2D( CvSubdiv2D* subdiv, CvPoint2D32f pt );
  528. /************ Basic quad-edge navigation and operations ************/
  529. CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DNextEdge( CvSubdiv2DEdge edge )
  530. {
  531.     return  CV_SUBDIV2D_NEXT_EDGE(edge);
  532. }
  533. CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DRotateEdge( CvSubdiv2DEdge edge, int rotate )
  534. {
  535.     return  (edge & ~3) + ((edge + rotate) & 3);
  536. }
  537. CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DSymEdge( CvSubdiv2DEdge edge )
  538. {
  539.     return edge ^ 2;
  540. }
  541. CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DGetEdge( CvSubdiv2DEdge edge, CvNextEdgeType type )
  542. {
  543.     CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
  544.     edge = e->next[(edge + (int)type) & 3];
  545.     return  (edge & ~3) + ((edge + ((int)type >> 4)) & 3);
  546. }
  547. CV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeOrg( CvSubdiv2DEdge edge )
  548. {
  549.     CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
  550.     return (CvSubdiv2DPoint*)e->pt[edge & 3];
  551. }
  552. CV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeDst( CvSubdiv2DEdge edge )
  553. {
  554.     CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
  555.     return (CvSubdiv2DPoint*)e->pt[(edge + 2) & 3];
  556. }
  557. CV_INLINE  double  cvTriangleArea( CvPoint2D32f a, CvPoint2D32f b, CvPoint2D32f c )
  558. {
  559.     return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
  560. }
  561. /****************************************************************************************
  562. *                            Contour Processing and Shape Analysis                       *
  563. ****************************************************************************************/
  564. #define CV_POLY_APPROX_DP 0
  565. /* Approximates a single polygonal curve (contour) or
  566.    a tree of polygonal curves (contours) */
  567. CVAPI(CvSeq*)  cvApproxPoly( const void* src_seq,
  568.                              int header_size, CvMemStorage* storage,
  569.                              int method, double parameter,
  570.                              int parameter2 CV_DEFAULT(0));
  571. #define CV_DOMINANT_IPAN 1
  572. /* Finds high-curvature points of the contour */
  573. CVAPI(CvSeq*) cvFindDominantPoints( CvSeq* contour, CvMemStorage* storage,
  574.                                    int method CV_DEFAULT(CV_DOMINANT_IPAN),
  575.                                    double parameter1 CV_DEFAULT(0),
  576.                                    double parameter2 CV_DEFAULT(0),
  577.                                    double parameter3 CV_DEFAULT(0),
  578.                                    double parameter4 CV_DEFAULT(0));
  579. /* Calculates perimeter of a contour or length of a part of contour */
  580. CVAPI(double)  cvArcLength( const void* curve,
  581.                             CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
  582.                             int is_closed CV_DEFAULT(-1));
  583. #define cvContourPerimeter( contour ) cvArcLength( contour, CV_WHOLE_SEQ, 1 )
  584. /* Calculates contour boundning rectangle (update=1) or
  585.    just retrieves pre-calculated rectangle (update=0) */
  586. CVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
  587. /* Calculates area of a contour or contour segment */
  588. CVAPI(double)  cvContourArea( const CvArr* contour,
  589.                               CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ));
  590. /* Finds minimum area rotated rectangle bounding a set of points */
  591. CVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points,
  592.                                 CvMemStorage* storage CV_DEFAULT(NULL));
  593. /* Finds minimum enclosing circle for a set of points */
  594. CVAPI(int)  cvMinEnclosingCircle( const CvArr* points,
  595.                                   CvPoint2D32f* center, float* radius );
  596. #define CV_CONTOURS_MATCH_I1  1
  597. #define CV_CONTOURS_MATCH_I2  2
  598. #define CV_CONTOURS_MATCH_I3  3
  599. /* Compares two contours by matching their moments */
  600. CVAPI(double)  cvMatchShapes( const void* object1, const void* object2,
  601.                               int method, double parameter CV_DEFAULT(0));
  602. /* Builds hierarhical representation of a contour */
  603. CVAPI(CvContourTree*)  cvCreateContourTree( const CvSeq* contour,
  604.                                             CvMemStorage* storage,
  605.                                             double threshold );
  606. /* Reconstruct (completelly or partially) contour a from contour tree */
  607. CVAPI(CvSeq*)  cvContourFromContourTree( const CvContourTree* tree,
  608.                                          CvMemStorage* storage,
  609.                                          CvTermCriteria criteria );
  610. /* Compares two contour trees */
  611. #define  CV_CONTOUR_TREES_MATCH_I1  1
  612. CVAPI(double)  cvMatchContourTrees( const CvContourTree* tree1,
  613.                                     const CvContourTree* tree2,
  614.                                     int method, double threshold );
  615. /* Calculates histogram of a contour */
  616. CVAPI(void)  cvCalcPGH( const CvSeq* contour, CvHistogram* hist );
  617. #define CV_CLOCKWISE         1
  618. #define CV_COUNTER_CLOCKWISE 2
  619. /* Calculates exact convex hull of 2d point set */
  620. CVAPI(CvSeq*) cvConvexHull2( const CvArr* input,
  621.                              void* hull_storage CV_DEFAULT(NULL),
  622.                              int orientation CV_DEFAULT(CV_CLOCKWISE),
  623.                              int return_points CV_DEFAULT(0));
  624. /* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */
  625. CVAPI(int)  cvCheckContourConvexity( const CvArr* contour );
  626. /* Finds convexity defects for the contour */
  627. CVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,
  628.                                    CvMemStorage* storage CV_DEFAULT(NULL));
  629. /* Fits ellipse into a set of 2d points */
  630. CVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );
  631. /* Finds minimum rectangle containing two given rectangles */
  632. CVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 );
  633. /* Finds coordinates of the box vertices */
  634. CVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );
  635. /* Initializes sequence header for a matrix (column or row vector) of points -
  636.    a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */
  637. CVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,
  638.                                  CvContour* contour_header,
  639.                                  CvSeqBlock* block );
  640. /* Checks whether the point is inside polygon, outside, on an edge (at a vertex).
  641.    Returns positive, negative or zero value, correspondingly.
  642.    Optionally, measures a signed distance between
  643.    the point and the nearest polygon edge (measure_dist=1) */
  644. CVAPI(double) cvPointPolygonTest( const CvArr* contour,
  645.                                   CvPoint2D32f pt, int measure_dist );
  646. /****************************************************************************************
  647. *                                  Histogram functions                                   *
  648. ****************************************************************************************/
  649. /* Creates new histogram */
  650. CVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type,
  651.                                    float** ranges CV_DEFAULT(NULL),
  652.                                    int uniform CV_DEFAULT(1));
  653. /* Assignes histogram bin ranges */
  654. CVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges,
  655.                                 int uniform CV_DEFAULT(1));
  656. /* Creates histogram header for array */
  657. CVAPI(CvHistogram*)  cvMakeHistHeaderForArray(
  658.                             int  dims, int* sizes, CvHistogram* hist,
  659.                             float* data, float** ranges CV_DEFAULT(NULL),
  660.                             int uniform CV_DEFAULT(1));
  661. /* Releases histogram */
  662. CVAPI(void)  cvReleaseHist( CvHistogram** hist );
  663. /* Clears all the histogram bins */
  664. CVAPI(void)  cvClearHist( CvHistogram* hist );
  665. /* Finds indices and values of minimum and maximum histogram bins */
  666. CVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist,
  667.                                    float* min_value, float* max_value,
  668.                                    int* min_idx CV_DEFAULT(NULL),
  669.                                    int* max_idx CV_DEFAULT(NULL));
  670. /* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.
  671.    After that sum of histogram bins is equal to <factor> */
  672. CVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor );
  673. /* Clear all histogram bins that are below the threshold */
  674. CVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold );
  675. #define CV_COMP_CORREL        0
  676. #define CV_COMP_CHISQR        1
  677. #define CV_COMP_INTERSECT     2
  678. #define CV_COMP_BHATTACHARYYA 3
  679. /* Compares two histogram */
  680. CVAPI(double)  cvCompareHist( const CvHistogram* hist1,
  681.                               const CvHistogram* hist2,
  682.                               int method);
  683. /* Copies one histogram to another. Destination histogram is created if
  684.    the destination pointer is NULL */
  685. CVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst );
  686. /* Calculates bayesian probabilistic histograms
  687.    (each or src and dst is an array of <number> histograms */
  688. CVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number,
  689.                                 CvHistogram** dst);
  690. /* Calculates array histogram */
  691. CVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist,
  692.                             int accumulate CV_DEFAULT(0),
  693.                             const CvArr* mask CV_DEFAULT(NULL) );
  694. CV_INLINE  void  cvCalcHist( IplImage** image, CvHistogram* hist,
  695.                              int accumulate CV_DEFAULT(0),
  696.                              const CvArr* mask CV_DEFAULT(NULL) )
  697. {
  698.     cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );
  699. }
  700. /* Calculates back project */
  701. CVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst,
  702.                                    const CvHistogram* hist );
  703. #define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)
  704. /* Does some sort of template matching but compares histograms of
  705.    template and each window location */
  706. CVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,
  707.                                         CvHistogram* hist, int method,
  708.                                         double factor );
  709. #define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) 
  710.      cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )
  711. /* calculates probabilistic density (divides one histogram by another) */
  712. CVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,
  713.                                 CvHistogram* dst_hist, double scale CV_DEFAULT(255) );
  714. /* equalizes histogram of 8-bit single-channel image */
  715. CVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst );
  716. #define  CV_VALUE  1
  717. #define  CV_ARRAY  2
  718. /* Updates active contour in order to minimize its cummulative
  719.    (internal and external) energy. */
  720. CVAPI(void)  cvSnakeImage( const IplImage* image, CvPoint* points,
  721.                            int  length, float* alpha,
  722.                            float* beta, float* gamma,
  723.                            int coeff_usage, CvSize  win,
  724.                            CvTermCriteria criteria, int calc_gradient CV_DEFAULT(1));
  725. /* Calculates the cooficients of the homography matrix */
  726. CVAPI(void)  cvCalcImageHomography( float* line, CvPoint3D32f* center,
  727.                                     float* intrinsic, float* homography );
  728. #define CV_DIST_MASK_3   3
  729. #define CV_DIST_MASK_5   5
  730. #define CV_DIST_MASK_PRECISE 0
  731. /* Applies distance transform to binary image */
  732. CVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst,
  733.                               int distance_type CV_DEFAULT(CV_DIST_L2),
  734.                               int mask_size CV_DEFAULT(3),
  735.                               const float* mask CV_DEFAULT(NULL),
  736.                               CvArr* labels CV_DEFAULT(NULL));
  737. /* Types of thresholding */
  738. #define CV_THRESH_BINARY      0  /* value = value > threshold ? max_value : 0       */
  739. #define CV_THRESH_BINARY_INV  1  /* value = value > threshold ? 0 : max_value       */
  740. #define CV_THRESH_TRUNC       2  /* value = value > threshold ? threshold : value   */
  741. #define CV_THRESH_TOZERO      3  /* value = value > threshold ? value : 0           */
  742. #define CV_THRESH_TOZERO_INV  4  /* value = value > threshold ? 0 : value           */
  743. #define CV_THRESH_MASK        7
  744. #define CV_THRESH_OTSU        8  /* use Otsu algorithm to choose the optimal threshold value;
  745.                                     combine the flag with one of the above CV_THRESH_* values */
  746. /* Applies fixed-level threshold to grayscale image.
  747.    This is a basic operation applied before retrieving contours */
  748. CVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,
  749.                             double  threshold, double  max_value,
  750.                             int threshold_type );
  751. #define CV_ADAPTIVE_THRESH_MEAN_C  0
  752. #define CV_ADAPTIVE_THRESH_GAUSSIAN_C  1
  753. /* Applies adaptive threshold to grayscale image.
  754.    The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and
  755.    CV_ADAPTIVE_THRESH_GAUSSIAN_C are:
  756.    neighborhood size (3, 5, 7 etc.),
  757.    and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */
  758. CVAPI(void)  cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
  759.                                   int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
  760.                                   int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
  761.                                   int block_size CV_DEFAULT(3),
  762.                                   double param1 CV_DEFAULT(5));
  763. #define CV_FLOODFILL_FIXED_RANGE (1 << 16)
  764. #define CV_FLOODFILL_MASK_ONLY   (1 << 17)
  765. /* Fills the connected component until the color difference gets large enough */
  766. CVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point,
  767.                           CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),
  768.                           CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),
  769.                           CvConnectedComp* comp CV_DEFAULT(NULL),
  770.                           int flags CV_DEFAULT(4),
  771.                           CvArr* mask CV_DEFAULT(NULL));
  772. /****************************************************************************************
  773. *                                  Feature detection                                     *
  774. ****************************************************************************************/
  775. #define CV_CANNY_L2_GRADIENT  (1 << 31)
  776. /* Runs canny edge detector */
  777. CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,
  778.                       double threshold2, int  aperture_size CV_DEFAULT(3) );
  779. /* Calculates constraint image for corner detection
  780.    Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.
  781.    Applying threshold to the result gives coordinates of corners */
  782. CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,
  783.                               int aperture_size CV_DEFAULT(3) );
  784. /* Calculates eigen values and vectors of 2x2
  785.    gradient covariation matrix at every image pixel */
  786. CVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
  787.                                       int block_size, int aperture_size CV_DEFAULT(3) );
  788. /* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at
  789.    every image pixel */
  790. CVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,
  791.                                  int block_size, int aperture_size CV_DEFAULT(3) );
  792. /* Harris corner detector:
  793.    Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */
  794. CVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_responce,
  795.                              int block_size, int aperture_size CV_DEFAULT(3),
  796.                              double k CV_DEFAULT(0.04) );
  797. /* Adjust corner position using some sort of gradient search */
  798. CVAPI(void)  cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
  799.                                  int count, CvSize win, CvSize zero_zone,
  800.                                  CvTermCriteria  criteria );
  801. /* Finds a sparse set of points within the selected region
  802.    that seem to be easy to track */
  803. CVAPI(void)  cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,
  804.                                    CvArr* temp_image, CvPoint2D32f* corners,
  805.                                    int* corner_count, double  quality_level,
  806.                                    double  min_distance,
  807.                                    const CvArr* mask CV_DEFAULT(NULL),
  808.                                    int block_size CV_DEFAULT(3),
  809.                                    int use_harris CV_DEFAULT(0),
  810.                                    double k CV_DEFAULT(0.04) );
  811. #define CV_HOUGH_STANDARD 0
  812. #define CV_HOUGH_PROBABILISTIC 1
  813. #define CV_HOUGH_MULTI_SCALE 2
  814. #define CV_HOUGH_GRADIENT 3
  815. /* Finds lines on binary image using one of several methods.
  816.    line_storage is either memory storage or 1 x <max number of lines> CvMat, its
  817.    number of columns is changed by the function.
  818.    method is one of CV_HOUGH_*;
  819.    rho, theta and threshold are used for each of those methods;
  820.    param1 ~ line length, param2 ~ line gap - for probabilistic,
  821.    param1 ~ srn, param2 ~ stn - for multi-scale */
  822. CVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method,
  823.                               double rho, double theta, int threshold,
  824.                               double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));
  825. /* Finds circles in the image */
  826. CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,
  827.                               int method, double dp, double min_dist,
  828.                               double param1 CV_DEFAULT(100),
  829.                               double param2 CV_DEFAULT(100),
  830.                               int min_radius CV_DEFAULT(0),
  831.                               int max_radius CV_DEFAULT(0));
  832. /* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */
  833. CVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param,
  834.                         double reps, double aeps, float* line );
  835. struct CvFeatureTree;
  836. /* Constructs kd-tree from set of feature descriptors */
  837. CVAPI(struct CvFeatureTree*) cvCreateKDTree(CvMat* desc);
  838. /* Constructs spill-tree from set of feature descriptors */
  839. CVAPI(struct CvFeatureTree*) cvCreateSpillTree( const CvMat* raw_data,
  840.                                     const int naive CV_DEFAULT(50),
  841.                                     const double rho CV_DEFAULT(.7),
  842.                                     const double tau CV_DEFAULT(.1) );
  843. /* Release feature tree */
  844. CVAPI(void) cvReleaseFeatureTree(struct CvFeatureTree* tr);
  845. /* Searches feature tree for k nearest neighbors of given reference points,
  846.    searching (in case of kd-tree/bbf) at most emax leaves. */
  847. CVAPI(void) cvFindFeatures(struct CvFeatureTree* tr, const CvMat* query_points,
  848.                            CvMat* indices, CvMat* dist, int k, int emax CV_DEFAULT(20));
  849. /* Search feature tree for all points that are inlier to given rect region.
  850.    Only implemented for kd trees */
  851. CVAPI(int) cvFindFeaturesBoxed(struct CvFeatureTree* tr,
  852.                                CvMat* bounds_min, CvMat* bounds_max,
  853.                                CvMat* out_indices);
  854. struct CvLSH;
  855. struct CvLSHOperations;
  856. /* Construct a Locality Sensitive Hash (LSH) table, for indexing d-dimensional vectors of
  857.    given type. Vectors will be hashed L times with k-dimensional p-stable (p=2) functions. */
  858. CVAPI(struct CvLSH*) cvCreateLSH(struct CvLSHOperations* ops, int d,
  859.                                  int L CV_DEFAULT(10), int k CV_DEFAULT(10),
  860.                                  int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),
  861.                                  int64 seed CV_DEFAULT(-1));
  862. /* Construct in-memory LSH table, with n bins. */
  863. CVAPI(struct CvLSH*) cvCreateMemoryLSH(int d, int n, int L CV_DEFAULT(10), int k CV_DEFAULT(10),
  864.                                        int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),
  865.                                        int64 seed CV_DEFAULT(-1));
  866. /* Free the given LSH structure. */
  867. CVAPI(void) cvReleaseLSH(struct CvLSH** lsh);
  868. /* Return the number of vectors in the LSH. */
  869. CVAPI(unsigned int) LSHSize(struct CvLSH* lsh);
  870. /* Add vectors to the LSH structure, optionally returning indices. */
  871. CVAPI(void) cvLSHAdd(struct CvLSH* lsh, const CvMat* data, CvMat* indices CV_DEFAULT(0));
  872. /* Remove vectors from LSH, as addressed by given indices. */
  873. CVAPI(void) cvLSHRemove(struct CvLSH* lsh, const CvMat* indices);
  874. /* Query the LSH n times for at most k nearest points; data is n x d,
  875.    indices and dist are n x k. At most emax stored points will be accessed. */
  876. CVAPI(void) cvLSHQuery(struct CvLSH* lsh, const CvMat* query_points,
  877.                        CvMat* indices, CvMat* dist, int k, int emax);
  878. typedef struct CvSURFPoint
  879. {
  880.     CvPoint2D32f pt;
  881.     int laplacian;
  882.     int size;
  883.     float dir;
  884.     float hessian;
  885. } CvSURFPoint;
  886. CV_INLINE CvSURFPoint cvSURFPoint( CvPoint2D32f pt, int laplacian,
  887.                                    int size, float dir CV_DEFAULT(0),
  888.                                    float hessian CV_DEFAULT(0))
  889. {
  890.     CvSURFPoint kp;
  891.     kp.pt = pt;
  892.     kp.laplacian = laplacian;
  893.     kp.size = size;
  894.     kp.dir = dir;
  895.     kp.hessian = hessian;
  896.     return kp;
  897. }
  898. typedef struct CvSURFParams
  899. {
  900.     int extended;
  901.     double hessianThreshold;
  902.     int nOctaves;
  903.     int nOctaveLayers;
  904. }
  905. CvSURFParams;
  906. CVAPI(CvSURFParams) cvSURFParams( double hessianThreshold, int extended CV_DEFAULT(0) );
  907. // If useProvidedKeyPts!=0, keypoints are not detected, but descriptors are computed
  908. //  at the locations provided in keypoints (a CvSeq of CvSURFPoint).
  909. CVAPI(void) cvExtractSURF( const CvArr* img, const CvArr* mask,
  910.                            CvSeq** keypoints, CvSeq** descriptors,
  911.                            CvMemStorage* storage, CvSURFParams params, int useProvidedKeyPts CV_DEFAULT(0)  );
  912. typedef struct CvMSERParams
  913. {
  914.     // delta, in the code, it compares (size_{i}-size_{i-delta})/size_{i-delta}
  915.     int delta;
  916.     // prune the area which bigger/smaller than max_area/min_area
  917.     int maxArea;
  918.     int minArea;
  919.     // prune the area have simliar size to its children
  920.     float maxVariation;
  921.     // trace back to cut off mser with diversity < min_diversity
  922.     float minDiversity;
  923.     /* the next few params for MSER of color image */
  924.     // for color image, the evolution steps
  925.     int maxEvolution;
  926.     // the area threshold to cause re-initialize
  927.     double areaThreshold;
  928.     // ignore too small margin
  929.     double minMargin;
  930.     // the aperture size for edge blur
  931.     int edgeBlurSize;
  932. }
  933. CvMSERParams;
  934. CVAPI(CvMSERParams) cvMSERParams( int delta CV_DEFAULT(5), int min_area CV_DEFAULT(60),
  935.                            int max_area CV_DEFAULT(14400), float max_variation CV_DEFAULT(.25f),
  936.                            float min_diversity CV_DEFAULT(.2f), int max_evolution CV_DEFAULT(200),
  937.                            double area_threshold CV_DEFAULT(1.01),
  938.                            double min_margin CV_DEFAULT(.003),
  939.                            int edge_blur_size CV_DEFAULT(5) );
  940. // Extracts the contours of Maximally Stable Extremal Regions
  941. CVAPI(void) cvExtractMSER( CvArr* _img, CvArr* _mask, CvSeq** contours, CvMemStorage* storage, CvMSERParams params );
  942. typedef struct CvStarKeypoint
  943. {
  944.     CvPoint pt;
  945.     int size;
  946.     float response;
  947. }
  948. CvStarKeypoint;
  949. CV_INLINE CvStarKeypoint cvStarKeypoint(CvPoint pt, int size, float response)
  950. {
  951.     CvStarKeypoint kpt;
  952.     kpt.pt = pt;
  953.     kpt.size = size;
  954.     kpt.response = response;
  955.     return kpt;
  956. }
  957. typedef struct CvStarDetectorParams
  958. {
  959.     int maxSize;
  960.     int responseThreshold;
  961.     int lineThresholdProjected;
  962.     int lineThresholdBinarized;
  963.     int suppressNonmaxSize;
  964. }
  965. CvStarDetectorParams;
  966. CV_INLINE CvStarDetectorParams cvStarDetectorParams(
  967.     int maxSize CV_DEFAULT(45),
  968.     int responseThreshold CV_DEFAULT(30),
  969.     int lineThresholdProjected CV_DEFAULT(10),
  970.     int lineThresholdBinarized CV_DEFAULT(8),
  971.     int suppressNonmaxSize CV_DEFAULT(5))
  972. {
  973.     CvStarDetectorParams params;
  974.     params.maxSize = maxSize;
  975.     params.responseThreshold = responseThreshold;
  976.     params.lineThresholdProjected = lineThresholdProjected;
  977.     params.lineThresholdBinarized = lineThresholdBinarized;
  978.     params.suppressNonmaxSize = suppressNonmaxSize;
  979.     return params;
  980. }
  981. CVAPI(CvSeq*) cvGetStarKeypoints( const CvArr* img, CvMemStorage* storage,
  982.         CvStarDetectorParams params CV_DEFAULT(cvStarDetectorParams()));
  983. /****************************************************************************************
  984. *                         Haar-like Object Detection functions                           *
  985. ****************************************************************************************/
  986. /* Loads haar classifier cascade from a directory.
  987.    It is obsolete: convert your cascade to xml and use cvLoad instead */
  988. CVAPI(CvHaarClassifierCascade*) cvLoadHaarClassifierCascade(
  989.                     const char* directory, CvSize orig_window_size);
  990. CVAPI(void) cvReleaseHaarClassifierCascade( CvHaarClassifierCascade** cascade );
  991. #define CV_HAAR_DO_CANNY_PRUNING    1
  992. #define CV_HAAR_SCALE_IMAGE         2
  993. #define CV_HAAR_FIND_BIGGEST_OBJECT 4
  994. #define CV_HAAR_DO_ROUGH_SEARCH     8
  995. CVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,
  996.                      CvHaarClassifierCascade* cascade,
  997.                      CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1),
  998.                      int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),
  999.                      CvSize min_size CV_DEFAULT(cvSize(0,0)));
  1000. /* sets images for haar classifier cascade */
  1001. CVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,
  1002.                                                 const CvArr* sum, const CvArr* sqsum,
  1003.                                                 const CvArr* tilted_sum, double scale );
  1004. /* runs the cascade on the specified window */
  1005. CVAPI(int) cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade,
  1006.                                        CvPoint pt, int start_stage CV_DEFAULT(0));
  1007. /****************************************************************************************
  1008. *                      Camera Calibration, Pose Estimation and Stereo                    *
  1009. ****************************************************************************************/
  1010. /* Transforms the input image to compensate lens distortion */
  1011. CVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,
  1012.                           const CvMat* camera_matrix,
  1013.                           const CvMat* distortion_coeffs );
  1014. /* Computes transformation map from intrinsic camera parameters
  1015.    that can used by cvRemap */
  1016. CVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix,
  1017.                                 const CvMat* distortion_coeffs,
  1018.                                 CvArr* mapx, CvArr* mapy );
  1019. /* Computes undistortion+rectification map for a head of stereo camera */
  1020. CVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix,
  1021.                                        const CvMat* dist_coeffs,
  1022.                                        const CvMat *R, const CvMat* new_camera_matrix,
  1023.                                        CvArr* mapx, CvArr* mapy );
  1024. /* Computes the original (undistorted) feature coordinates
  1025.    from the observed (distorted) coordinates */
  1026. CVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst,
  1027.                                const CvMat* camera_matrix,
  1028.                                const CvMat* dist_coeffs,
  1029.                                const CvMat* R CV_DEFAULT(0),
  1030.                                const CvMat* P CV_DEFAULT(0));
  1031. /* Converts rotation vector to rotation matrix or vice versa */
  1032. CVAPI(int) cvRodrigues2( const CvMat* src, CvMat* dst,
  1033.                          CvMat* jacobian CV_DEFAULT(0) );
  1034. #define CV_LMEDS 4
  1035. #define CV_RANSAC 8
  1036. /* Finds perspective transformation between the object plane and image (view) plane */
  1037. CVAPI(int) cvFindHomography( const CvMat* src_points,
  1038.                              const CvMat* dst_points,
  1039.                              CvMat* homography,
  1040.                              int method CV_DEFAULT(0),
  1041.                              double ransacReprojThreshold CV_DEFAULT(0),
  1042.                              CvMat* mask CV_DEFAULT(0));
  1043. /* Computes RQ decomposition for 3x3 matrices */
  1044. CVAPI(void) cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ,
  1045.                            CvMat *matrixQx CV_DEFAULT(NULL),
  1046.                            CvMat *matrixQy CV_DEFAULT(NULL),
  1047.                            CvMat *matrixQz CV_DEFAULT(NULL),
  1048.                            CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));
  1049. /* Computes projection matrix decomposition */
  1050. CVAPI(void) cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr,
  1051.                                          CvMat *rotMatr, CvMat *posVect,
  1052.                                          CvMat *rotMatrX CV_DEFAULT(NULL),
  1053.                                          CvMat *rotMatrY CV_DEFAULT(NULL),
  1054.                                          CvMat *rotMatrZ CV_DEFAULT(NULL),
  1055.                                          CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));
  1056. /* Computes d(AB)/dA and d(AB)/dB */
  1057. CVAPI(void) cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB );
  1058. /* Computes r3 = rodrigues(rodrigues(r2)*rodrigues(r1)),
  1059.    t3 = rodrigues(r2)*t1 + t2 and the respective derivatives */
  1060. CVAPI(void) cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1,
  1061.                          const CvMat* _rvec2, const CvMat* _tvec2,
  1062.                          CvMat* _rvec3, CvMat* _tvec3,
  1063.                          CvMat* dr3dr1 CV_DEFAULT(0), CvMat* dr3dt1 CV_DEFAULT(0),
  1064.                          CvMat* dr3dr2 CV_DEFAULT(0), CvMat* dr3dt2 CV_DEFAULT(0),
  1065.                          CvMat* dt3dr1 CV_DEFAULT(0), CvMat* dt3dt1 CV_DEFAULT(0),
  1066.                          CvMat* dt3dr2 CV_DEFAULT(0), CvMat* dt3dt2 CV_DEFAULT(0) );
  1067. /* Projects object points to the view plane using
  1068.    the specified extrinsic and intrinsic camera parameters */
  1069. CVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,
  1070.                               const CvMat* translation_vector, const CvMat* camera_matrix,
  1071.                               const CvMat* distortion_coeffs, CvMat* image_points,
  1072.                               CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL),
  1073.                               CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL),
  1074.                               CvMat* dpddist CV_DEFAULT(NULL),
  1075.                               double aspect_ratio CV_DEFAULT(0));
  1076. /* Finds extrinsic camera parameters from
  1077.    a few known corresponding point pairs and intrinsic parameters */
  1078. CVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points,
  1079.                                           const CvMat* image_points,
  1080.                                           const CvMat* camera_matrix,
  1081.                                           const CvMat* distortion_coeffs,
  1082.                                           CvMat* rotation_vector,
  1083.                                           CvMat* translation_vector,
  1084.                                           int use_extrinsic_guess CV_DEFAULT(0) );
  1085. /* Computes initial estimate of the intrinsic camera parameters
  1086.    in case of planar calibration target (e.g. chessboard) */
  1087. CVAPI(void) cvInitIntrinsicParams2D( const CvMat* object_points,
  1088.                                      const CvMat* image_points,
  1089.                                      const CvMat* npoints, CvSize image_size,
  1090.                                      CvMat* camera_matrix,
  1091.                                      double aspect_ratio CV_DEFAULT(1.) );
  1092. #define CV_CALIB_CB_ADAPTIVE_THRESH  1
  1093. #define CV_CALIB_CB_NORMALIZE_IMAGE  2
  1094. #define CV_CALIB_CB_FILTER_QUADS     4
  1095. /* Detects corners on a chessboard calibration pattern */
  1096. CVAPI(int) cvFindChessboardCorners( const void* image, CvSize pattern_size,
  1097.                                     CvPoint2D32f* corners,
  1098.                                     int* corner_count CV_DEFAULT(NULL),
  1099.                                     int flags CV_DEFAULT(CV_CALIB_CB_ADAPTIVE_THRESH+
  1100.                                         CV_CALIB_CB_NORMALIZE_IMAGE) );
  1101. /* Draws individual chessboard corners or the whole chessboard detected */
  1102. CVAPI(void) cvDrawChessboardCorners( CvArr* image, CvSize pattern_size,
  1103.                                      CvPoint2D32f* corners,
  1104.                                      int count, int pattern_was_found );
  1105. #define CV_CALIB_USE_INTRINSIC_GUESS  1
  1106. #define CV_CALIB_FIX_ASPECT_RATIO     2
  1107. #define CV_CALIB_FIX_PRINCIPAL_POINT  4
  1108. #define CV_CALIB_ZERO_TANGENT_DIST    8
  1109. #define CV_CALIB_FIX_FOCAL_LENGTH 16
  1110. #define CV_CALIB_FIX_K1  32
  1111. #define CV_CALIB_FIX_K2  64
  1112. #define CV_CALIB_FIX_K3  128
  1113. /* Finds intrinsic and extrinsic camera parameters
  1114.    from a few views of known calibration pattern */
  1115. CVAPI(void) cvCalibrateCamera2( const CvMat* object_points,
  1116.                                 const CvMat* image_points,
  1117.                                 const CvMat* point_counts,
  1118.                                 CvSize image_size,
  1119.                                 CvMat* camera_matrix,
  1120.                                 CvMat* distortion_coeffs,
  1121.                                 CvMat* rotation_vectors CV_DEFAULT(NULL),
  1122.                                 CvMat* translation_vectors CV_DEFAULT(NULL),
  1123.                                 int flags CV_DEFAULT(0) );
  1124. /* Computes various useful characteristics of the camera from the data computed by
  1125.    cvCalibrateCamera2 */
  1126. CVAPI(void) cvCalibrationMatrixValues( const CvMat *camera_matrix,
  1127.                                 CvSize image_size,
  1128.                                 double aperture_width CV_DEFAULT(0),
  1129.                                 double aperture_height CV_DEFAULT(0),
  1130.                                 double *fovx CV_DEFAULT(NULL),
  1131.                                 double *fovy CV_DEFAULT(NULL),
  1132.                                 double *focal_length CV_DEFAULT(NULL),
  1133.                                 CvPoint2D64f *principal_point CV_DEFAULT(NULL),
  1134.                                 double *pixel_aspect_ratio CV_DEFAULT(NULL));
  1135. #define CV_CALIB_FIX_INTRINSIC  256
  1136. #define CV_CALIB_SAME_FOCAL_LENGTH 512
  1137. /* Computes the transformation from one camera coordinate system to another one
  1138.    from a few correspondent views of the same calibration target. Optionally, calibrates
  1139.    both cameras */
  1140. CVAPI(void) cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1,
  1141.                                const CvMat* image_points2, const CvMat* npoints,
  1142.                                CvMat* camera_matrix1, CvMat* dist_coeffs1,
  1143.                                CvMat* camera_matrix2, CvMat* dist_coeffs2,
  1144.                                CvSize image_size, CvMat* R, CvMat* T,
  1145.                                CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0),
  1146.                                CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(
  1147.                                    CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)),
  1148.                                int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC) );
  1149. #define CV_CALIB_ZERO_DISPARITY 1024
  1150. /* Computes 3D rotations (+ optional shift) for each camera coordinate system to make both
  1151.    views parallel (=> to make all the epipolar lines horizontal or vertical) */
  1152. CVAPI(void) cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2,
  1153.                              const CvMat* dist_coeffs1, const CvMat* dist_coeffs2,
  1154.                              CvSize image_size, const CvMat* R, const CvMat* T,
  1155.                              CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2,
  1156.                              CvMat* Q CV_DEFAULT(0),
  1157.                              int flags CV_DEFAULT(CV_CALIB_ZERO_DISPARITY) );
  1158. /* Computes rectification transformations for uncalibrated pair of images using a set
  1159.    of point correspondences */
  1160. CVAPI(int) cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2,
  1161.                                         const CvMat* F, CvSize img_size,
  1162.                                         CvMat* H1, CvMat* H2,
  1163.                                         double threshold CV_DEFAULT(5));
  1164. typedef struct CvPOSITObject CvPOSITObject;
  1165. /* Allocates and initializes CvPOSITObject structure before doing cvPOSIT */
  1166. CVAPI(CvPOSITObject*)  cvCreatePOSITObject( CvPoint3D32f* points, int point_count );
  1167. /* Runs POSIT (POSe from ITeration) algorithm for determining 3d position of
  1168.    an object given its model and projection in a weak-perspective case */
  1169. CVAPI(void)  cvPOSIT(  CvPOSITObject* posit_object, CvPoint2D32f* image_points,
  1170.                        double focal_length, CvTermCriteria criteria,
  1171.                        CvMatr32f rotation_matrix, CvVect32f translation_vector);
  1172. /* Releases CvPOSITObject structure */
  1173. CVAPI(void)  cvReleasePOSITObject( CvPOSITObject**  posit_object );
  1174. /* updates the number of RANSAC iterations */
  1175. CVAPI(int) cvRANSACUpdateNumIters( double p, double err_prob,
  1176.                                    int model_points, int max_iters );
  1177. CVAPI(void) cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst );
  1178. /* Calculates fundamental matrix given a set of corresponding points */
  1179. #define CV_FM_7POINT 1
  1180. #define CV_FM_8POINT 2
  1181. #define CV_FM_LMEDS_ONLY  CV_LMEDS
  1182. #define CV_FM_RANSAC_ONLY CV_RANSAC
  1183. #define CV_FM_LMEDS CV_LMEDS
  1184. #define CV_FM_RANSAC CV_RANSAC
  1185. CVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
  1186.                                  CvMat* fundamental_matrix,
  1187.                                  int method CV_DEFAULT(CV_FM_RANSAC),
  1188.                                  double param1 CV_DEFAULT(3.), double param2 CV_DEFAULT(0.99),
  1189.                                  CvMat* status CV_DEFAULT(NULL) );
  1190. /* For each input point on one of images
  1191.    computes parameters of the corresponding
  1192.    epipolar line on the other image */
  1193. CVAPI(void) cvComputeCorrespondEpilines( const CvMat* points,
  1194.                                          int which_image,
  1195.                                          const CvMat* fundamental_matrix,
  1196.                                          CvMat* correspondent_lines );
  1197. /* Triangulation functions */
  1198. CVAPI(void) cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2,
  1199.                                 CvMat* projPoints1, CvMat* projPoints2,
  1200.                                 CvMat* points4D);
  1201. CVAPI(void) cvCorrectMatches(CvMat* F, CvMat* points1, CvMat* points2,
  1202.                              CvMat* new_points1, CvMat* new_points2);
  1203. /* stereo correspondence parameters and functions */
  1204. #define CV_STEREO_BM_NORMALIZED_RESPONSE  0
  1205. /* Block matching algorithm structure */
  1206. typedef struct CvStereoBMState
  1207. {
  1208.     // pre-filtering (normalization of input images)
  1209.     int preFilterType; // =CV_STEREO_BM_NORMALIZED_RESPONSE now
  1210.     int preFilterSize; // averaging window size: ~5x5..21x21
  1211.     int preFilterCap; // the output of pre-filtering is clipped by [-preFilterCap,preFilterCap]
  1212.     // correspondence using Sum of Absolute Difference (SAD)
  1213.     int SADWindowSize; // ~5x5..21x21
  1214.     int minDisparity;  // minimum disparity (can be negative)
  1215.     int numberOfDisparities; // maximum disparity - minimum disparity (> 0)
  1216.     // post-filtering
  1217.     int textureThreshold;  // the disparity is only computed for pixels
  1218.                            // with textured enough neighborhood
  1219.     int uniquenessRatio;   // accept the computed disparity d* only if
  1220.                            // SAD(d) >= SAD(d*)*(1 + uniquenessRatio/100.)
  1221.                            // for any d != d*+/-1 within the search range.
  1222.     int speckleWindowSize; // disparity variation window
  1223.     int speckleRange; // acceptable range of variation in window
  1224.     int trySmallerWindows; // if 1, the results may be more accurate,
  1225.                            // at the expense of slower processing 
  1226.     // temporary buffers
  1227.     CvMat* preFilteredImg0;
  1228.     CvMat* preFilteredImg1;
  1229.     CvMat* slidingSumBuf;
  1230.     CvMat* dbmin;
  1231.     CvMat* dbmax;
  1232. }
  1233. CvStereoBMState;
  1234. #define CV_STEREO_BM_BASIC 0
  1235. #define CV_STEREO_BM_FISH_EYE 1
  1236. #define CV_STEREO_BM_NARROW 2
  1237. CVAPI(CvStereoBMState*) cvCreateStereoBMState(int preset CV_DEFAULT(CV_STEREO_BM_BASIC),
  1238.                                               int numberOfDisparities CV_DEFAULT(0));
  1239. CVAPI(void) cvReleaseStereoBMState( CvStereoBMState** state );
  1240. CVAPI(void) cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right,
  1241.                                           CvArr* disparity, CvStereoBMState* state );
  1242. /* Kolmogorov-Zabin stereo-correspondence algorithm (a.k.a. KZ1) */
  1243. #define CV_STEREO_GC_OCCLUDED  SHRT_MAX
  1244. typedef struct CvStereoGCState
  1245. {
  1246.     int Ithreshold;
  1247.     int interactionRadius;
  1248.     float K, lambda, lambda1, lambda2;
  1249.     int occlusionCost;
  1250.     int minDisparity;
  1251.     int numberOfDisparities;
  1252.     int maxIters;
  1253.     CvMat* left;
  1254.     CvMat* right;
  1255.     CvMat* dispLeft;
  1256.     CvMat* dispRight;
  1257.     CvMat* ptrLeft;
  1258.     CvMat* ptrRight;
  1259.     CvMat* vtxBuf;
  1260.     CvMat* edgeBuf;
  1261. }
  1262. CvStereoGCState;
  1263. CVAPI(CvStereoGCState*) cvCreateStereoGCState( int numberOfDisparities, int maxIters );
  1264. CVAPI(void) cvReleaseStereoGCState( CvStereoGCState** state );
  1265. CVAPI(void) cvFindStereoCorrespondenceGC( const CvArr* left, const CvArr* right,
  1266.                                           CvArr* disparityLeft, CvArr* disparityRight,
  1267.                                           CvStereoGCState* state,
  1268.                                           int useDisparityGuess CV_DEFAULT(0) );
  1269. /* Reprojects the computed disparity image to the 3D space using the specified 4x4 matrix */
  1270. CVAPI(void)  cvReprojectImageTo3D( const CvArr* disparityImage,
  1271.                                    CvArr* _3dImage, const CvMat* Q,
  1272.                                    int handleMissingValues CV_DEFAULT(0) );
  1273. #ifdef __cplusplus
  1274. }
  1275. #endif
  1276. #ifdef __cplusplus
  1277. #ifndef SKIP_INCLUDES // for now only expose old interface to swig
  1278. #include "cv.hpp"
  1279. #endif // SKIP_INCLUDES
  1280. #endif
  1281. /****************************************************************************************
  1282. *                                 Backward compatibility                                 *
  1283. ****************************************************************************************/
  1284. #ifndef CV_NO_BACKWARD_COMPATIBILITY
  1285. #include "cvcompat.h"
  1286. #endif
  1287. #endif /*_CV_H_*/