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

视频捕捉/采集

开发平台:

Visual C++

  1. /**@file
  2. Functions and structures for dealing with image features
  3. Copyright (C) 2006  Rob Hess <hess@eecs.oregonstate.edu>
  4. @version 1.1.1-20070330
  5. */
  6. #ifndef IMGFEATURES_H
  7. #define IMGFEATURES_H
  8. #include "cxcore.h"
  9. #ifdef __cplusplus 
  10. extern "C" { 
  11. #endif 
  12. /** FEATURE_OXFD <BR> FEATURE_LOWE */
  13. enum feature_type
  14. {
  15. FEATURE_OXFD,
  16. FEATURE_LOWE,
  17. };
  18. /** FEATURE_FWD_MATCH <BR> FEATURE_BCK_MATCH <BR> FEATURE_MDL_MATCH */
  19. enum feature_match_type
  20. {
  21. FEATURE_FWD_MATCH,
  22. FEATURE_BCK_MATCH,
  23. FEATURE_MDL_MATCH,
  24. };
  25. /* colors in which to display different feature types */
  26. #define FEATURE_OXFD_COLOR CV_RGB(255,255,0)
  27. #define FEATURE_LOWE_COLOR CV_RGB(255,0,255)
  28. /** max feature descriptor length */
  29. #define FEATURE_MAX_D 128
  30. /**
  31. Structure to represent an affine invariant image feature.  The fields
  32. x, y, a, b, c represent the affine region around the feature:
  33. a(x-u)(x-u) + 2b(x-u)(y-v) + c(y-v)(y-v) = 1
  34. */
  35. struct feature
  36. {
  37. double x;                      /**< x coord */
  38. double y;                      /**< y coord */
  39. double a;                      /**< Oxford-type affine region parameter */
  40. double b;                      /**< Oxford-type affine region parameter */
  41. double c;                      /**< Oxford-type affine region parameter */
  42. double scl;                    /**< scale of a Lowe-style feature */
  43. double ori;                    /**< orientation of a Lowe-style feature */
  44. int d;                         /**< descriptor length */
  45. double descr[FEATURE_MAX_D];   /**< descriptor */
  46. int type;                      /**< feature type, OXFD or LOWE */
  47. int pclass;                     /**< all-purpose feature class */
  48. struct feature* fwd_match;     /**< matching feature from forward image */
  49. struct feature* bck_match;     /**< matching feature from backmward image */
  50. struct feature* mdl_match;     /**< matching feature from model */
  51. CvPoint2D64f img_pt;           /**< location in image */
  52. CvPoint2D64f mdl_pt;           /**< location in model */
  53. void* feature_data;            /**< user-definable data */
  54. };
  55. /**
  56. Reads image features from file.  The file should be formatted as from
  57. the code provided by the Visual Geometry Group at Oxford or from the
  58. code provided by David Lowe.
  59. @param filename location of a file containing image features
  60. @param type determines how features are input.  If a type is FEATURE_OXFD,
  61. the input file is treated as if it is from the code provided by the VGG
  62. at Oxford: http://www.robots.ox.ac.uk:5000/~vgg/research/affine/index.html
  63. <BR><BR>
  64. If a type is FEATURE_LOWE, the input file is treated as if it is from
  65. David Lowe's SIFT code: http://www.cs.ubc.ca/~lowe/keypoints  
  66. @param feat pointer to an array in which to store imported features
  67. @return Returns the number of features imported from filename or -1 on error
  68. */
  69. extern  int import_features( char* filename, int type, struct feature** feat );
  70. /**
  71. Exports a feature set to a file formatted depending on the type of
  72. features, as specified in the feature struct's type field.
  73. @param filename name of file to which to export features
  74. @param feat feature array
  75. @param n number of features 
  76. @return Returns 0 on success or 1 on error
  77. */
  78. extern  int export_features( char* filename, struct feature* feat, int n );
  79. /**
  80. Displays a set of features on an image
  81. @param img image on which to display features
  82. @param feat array of Oxford-type features
  83. @param n number of features
  84. */
  85. extern  void draw_features( IplImage* img, struct feature* feat, int n );
  86. /**
  87. Calculates the squared Euclidian distance between two feature descriptors.
  88. @param f1 first feature
  89. @param f2 second feature
  90. @return Returns the squared Euclidian distance between the descriptors of
  91. a f1 and a f2.
  92. */
  93. extern double descr_dist_sq( struct feature* f1, struct feature* f2 );
  94. #ifdef __cplusplus 
  95. }
  96. #endif 
  97. #endif