xform.h
上传用户:lwxipeng
上传日期:2022-05-16
资源大小:15982k
文件大小:6k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. /**@file
  2. Functions for computing transforms from image feature correspondences
  3. Copyright (C) 2006  Rob Hess <hess@eecs.oregonstate.edu>
  4. @version 1.1.1-20070330
  5. */
  6. #ifndef XFORM_H
  7. #define XFORM_H
  8. #include <cxcore.h>
  9. #ifdef __cplusplus 
  10. extern "C" { 
  11. #endif 
  12. /********************************** Structures *******************************/
  13. struct feature;
  14. /** holds feature data relevant to ransac */
  15. struct ransac_data
  16. {
  17. void* orig_feat_data;
  18. int sampled;
  19. };
  20. /******************************* Defs and macros *****************************/
  21. /* RANSAC error tolerance in pixels */
  22. #define RANSAC_ERR_TOL 3
  23. /** pessimistic estimate of fraction of inlers for RANSAC */
  24. #define RANSAC_INLIER_FRAC_EST 0.25
  25. /** estimate of the probability that a correspondence supports a bad model */
  26. #define RANSAC_PROB_BAD_SUPP 0.10
  27. /* extracts a feature's RANSAC data */
  28. #define feat_ransac_data( feat ) ( (struct ransac_data*) (feat)->feature_data )
  29. /**
  30. Prototype for transformation functions passed to ransac_xform().  Functions
  31. of this type should compute a transformation matrix given a set of point
  32. correspondences.
  33. @param pts array of points
  34. @param mpts array of corresponding points; each a pts[a i], a i=0..a n-1,
  35. corresponds to a mpts[a i]
  36. @param n number of points in both a pts and a mpts
  37. @return Should return a transformation matrix that transforms each point in
  38. a pts to the corresponding point in a mpts or NULL on failure.
  39. */
  40. typedef CvMat* (*ransac_xform_fn)( CvPoint2D64f* pts, CvPoint2D64f* mpts,
  41.   int n );
  42. /**
  43. Prototype for error functions passed to ransac_xform().  For a given
  44. point, its correspondence, and a transform, functions of this type should
  45. compute a measure of error between the correspondence and the point after
  46. the point has been transformed by the transform.
  47. @param pt a point
  48. @param mpt a pt's correspondence
  49. @param T a transform
  50. @return Should return a measure of error between a mpt and a pt after
  51. a pt has been transformed by the transform a T.
  52. */
  53. typedef double (*ransac_err_fn)( CvPoint2D64f pt, CvPoint2D64f mpt, CvMat* M );
  54. /***************************** Function Prototypes ***************************/
  55. /**
  56. Calculates a best-fit image transform from image feature correspondences
  57. using RANSAC.
  58. For more information refer to:
  59. Fischler, M. A. and Bolles, R. C.  Random sample consensus: a paradigm for
  60. model fitting with applications to image analysis and automated cartography.
  61. <EM>Communications of the ACM, 24</EM>, 6 (1981), pp. 381--395.
  62. @param features an array of features; only features with a non-NULL match
  63. of type a mtype are used in homography computation
  64. @param n number of features in a feat
  65. @param mtype determines which of each feature's match fields to use
  66. for transform computation; should be one of FEATURE_FWD_MATCH,
  67. FEATURE_BCK_MATCH, or FEATURE_MDL_MATCH; if this is FEATURE_MDL_MATCH,
  68. correspondences are assumed to be between a feature's img_pt field
  69. and its match's mdl_pt field, otherwise correspondences are assumed to
  70. be between the the feature's img_pt field and its match's img_pt field
  71. @param xform_fn pointer to the function used to compute the desired
  72. transformation from feature correspondences
  73. @param m minimum number of correspondences necessary to instantiate the
  74. transform computed by a xform_fn
  75. @param p_badxform desired probability that the final transformation
  76. returned by RANSAC is corrupted by outliers (i.e. the probability that
  77. no samples of all inliers were drawn)
  78. @param err_fn pointer to the function used to compute a measure of error
  79. between putative correspondences for a given transform
  80. @param err_tol correspondences within this distance of each other are
  81. considered as inliers for a given transform
  82. @param inliers if not NULL, output as an array of pointers to the final
  83. set of inliers
  84. @param n_in if not NULL, output as the final number of inliers
  85. @return Returns a transformation matrix computed using RANSAC or NULL
  86. on error or if an acceptable transform could not be computed.
  87. */
  88. extern  CvMat* ransac_xform( struct feature* features, int n, int mtype,
  89.    ransac_xform_fn xform_fn, int m,
  90.    double p_badxform, ransac_err_fn err_fn,
  91.    double err_tol, struct feature*** inliers,
  92.    int* n_in );
  93. /**
  94. Calculates a least-squares planar homography from point correspondeces.
  95. Intended for use as a ransac_xform_fn.
  96. @param pts array of points
  97. @param mpts array of corresponding points; each a pts[a i], a i=0..a n-1,
  98. corresponds to a mpts[a i]
  99. @param n number of points in both a pts and a mpts; must be at least 4
  100. @return Returns the f$3 times 3f$ least-squares planar homography
  101. matrix that transforms points in a pts to their corresponding points
  102. in a mpts or NULL if fewer than 4 correspondences were provided
  103. */
  104. extern  CvMat* lsq_homog( CvPoint2D64f* pts, CvPoint2D64f* mpts, int n );
  105. /**
  106. Calculates the transfer error between a point and its correspondence for
  107. a given homography, i.e. for a point f$xf$, it's correspondence f$x'f$,
  108. and homography f$Hf$, computes f$d(x', Hx)^2f$.  Intended for use as a
  109. ransac_err_fn.
  110. @param pt a point
  111. @param mpt a pt's correspondence
  112. @param H a homography matrix
  113. @return Returns the transfer error between a pt and a mpt given a H
  114. */
  115. extern double homog_xfer_err( CvPoint2D64f pt, CvPoint2D64f mpt, CvMat* H );
  116. /**
  117. Performs a perspective transformation on a single point.  That is, for a
  118. point f$(x, y)f$ and a f$3 times 3f$ matrix f$Tf$ this function
  119. returns the point f$(u, v)f$, where<BR>
  120. f$[x'  y'  w']^T = T times [x  y  1]^Tf$,<BR>
  121. and<BR>
  122. f$(u, v) = (x'/w', y'/w')f$.
  123. Note that affine transforms are a subset of perspective transforms.
  124. @param pt a 2D point
  125. @param T a perspective transformation matrix
  126. @return Returns the point f$(u, v)f$ as above.
  127. */
  128. extern  CvPoint2D64f persp_xform_pt( CvPoint2D64f pt, CvMat* T );
  129. #ifdef __cplusplus 
  130. }
  131. #endif
  132. #endif