edgeboxes.hpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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-2011, 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 __OPENCV_EDGEBOXES_HPP__
  43. #define __OPENCV_EDGEBOXES_HPP__
  44. #include <opencv2/core.hpp>
  45. namespace cv
  46. {
  47. namespace ximgproc
  48. {
  49. //! @addtogroup ximgproc_edgeboxes
  50. //! @{
  51. // bounding box data structures
  52. typedef struct
  53. {
  54. int x, y, w, h;
  55. float score;
  56. } Box;
  57. typedef std::vector<Box> Boxes;
  58. /** @brief Class implementing EdgeBoxes algorithm from @cite ZitnickECCV14edgeBoxes :
  59. */
  60. class CV_EXPORTS_W EdgeBoxes : public Algorithm
  61. {
  62. public:
  63. /** @brief Returns array containing proposal boxes.
  64. @param edge_map edge image.
  65. @param orientation_map orientation map.
  66. @param boxes proposal boxes.
  67. @param scores of the proposal boxes, provided a vector of float types.
  68. */
  69. CV_WRAP virtual void getBoundingBoxes(InputArray edge_map, InputArray orientation_map, CV_OUT std::vector<Rect> &boxes, OutputArray scores = noArray()) = 0;
  70. /** @brief Returns the step size of sliding window search.
  71. */
  72. CV_WRAP virtual float getAlpha() const = 0;
  73. /** @brief Sets the step size of sliding window search.
  74. */
  75. CV_WRAP virtual void setAlpha(float value) = 0;
  76. /** @brief Returns the nms threshold for object proposals.
  77. */
  78. CV_WRAP virtual float getBeta() const = 0;
  79. /** @brief Sets the nms threshold for object proposals.
  80. */
  81. CV_WRAP virtual void setBeta(float value) = 0;
  82. /** @brief Returns adaptation rate for nms threshold.
  83. */
  84. CV_WRAP virtual float getEta() const = 0;
  85. /** @brief Sets the adaptation rate for nms threshold.
  86. */
  87. CV_WRAP virtual void setEta(float value) = 0;
  88. /** @brief Returns the min score of boxes to detect.
  89. */
  90. CV_WRAP virtual float getMinScore() const = 0;
  91. /** @brief Sets the min score of boxes to detect.
  92. */
  93. CV_WRAP virtual void setMinScore(float value) = 0;
  94. /** @brief Returns the max number of boxes to detect.
  95. */
  96. CV_WRAP virtual int getMaxBoxes() const = 0;
  97. /** @brief Sets max number of boxes to detect.
  98. */
  99. CV_WRAP virtual void setMaxBoxes(int value) = 0;
  100. /** @brief Returns the edge min magnitude.
  101. */
  102. CV_WRAP virtual float getEdgeMinMag() const = 0;
  103. /** @brief Sets the edge min magnitude.
  104. */
  105. CV_WRAP virtual void setEdgeMinMag(float value) = 0;
  106. /** @brief Returns the edge merge threshold.
  107. */
  108. CV_WRAP virtual float getEdgeMergeThr() const = 0;
  109. /** @brief Sets the edge merge threshold.
  110. */
  111. CV_WRAP virtual void setEdgeMergeThr(float value) = 0;
  112. /** @brief Returns the cluster min magnitude.
  113. */
  114. CV_WRAP virtual float getClusterMinMag() const = 0;
  115. /** @brief Sets the cluster min magnitude.
  116. */
  117. CV_WRAP virtual void setClusterMinMag(float value) = 0;
  118. /** @brief Returns the max aspect ratio of boxes.
  119. */
  120. CV_WRAP virtual float getMaxAspectRatio() const = 0;
  121. /** @brief Sets the max aspect ratio of boxes.
  122. */
  123. CV_WRAP virtual void setMaxAspectRatio(float value) = 0;
  124. /** @brief Returns the minimum area of boxes.
  125. */
  126. CV_WRAP virtual float getMinBoxArea() const = 0;
  127. /** @brief Sets the minimum area of boxes.
  128. */
  129. CV_WRAP virtual void setMinBoxArea(float value) = 0;
  130. /** @brief Returns the affinity sensitivity.
  131. */
  132. CV_WRAP virtual float getGamma() const = 0;
  133. /** @brief Sets the affinity sensitivity
  134. */
  135. CV_WRAP virtual void setGamma(float value) = 0;
  136. /** @brief Returns the scale sensitivity.
  137. */
  138. CV_WRAP virtual float getKappa() const = 0;
  139. /** @brief Sets the scale sensitivity.
  140. */
  141. CV_WRAP virtual void setKappa(float value) = 0;
  142. };
  143. /** @brief Creates a Edgeboxes
  144. @param alpha step size of sliding window search.
  145. @param beta nms threshold for object proposals.
  146. @param eta adaptation rate for nms threshold.
  147. @param minScore min score of boxes to detect.
  148. @param maxBoxes max number of boxes to detect.
  149. @param edgeMinMag edge min magnitude. Increase to trade off accuracy for speed.
  150. @param edgeMergeThr edge merge threshold. Increase to trade off accuracy for speed.
  151. @param clusterMinMag cluster min magnitude. Increase to trade off accuracy for speed.
  152. @param maxAspectRatio max aspect ratio of boxes.
  153. @param minBoxArea minimum area of boxes.
  154. @param gamma affinity sensitivity.
  155. @param kappa scale sensitivity.
  156. */
  157. CV_EXPORTS_W Ptr<EdgeBoxes>
  158. createEdgeBoxes(float alpha=0.65f,
  159. float beta=0.75f,
  160. float eta=1,
  161. float minScore=0.01f,
  162. int maxBoxes=10000,
  163. float edgeMinMag=0.1f,
  164. float edgeMergeThr=0.5f,
  165. float clusterMinMag=0.5f,
  166. float maxAspectRatio=3,
  167. float minBoxArea=1000,
  168. float gamma=2,
  169. float kappa=1.5f);
  170. //! @}
  171. }
  172. }
  173. #endif /* __OPENCV_EDGEBOXES_HPP__ */