NimbRo ROS Soccer Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
BallDetector.hpp
1 //BallDetector.hpp
2 // Created on: May 12, 2015
3 // Author: Hafez Farazi <farazi@ais.uni-bonn.de>
4 #pragma once
5 #include <opencv2/opencv.hpp>
6 #include <math.h>
7 #include <vision_module/Tools/Parameters.hpp>
8 #include <vision_module/Tools/General.hpp>
9 #include <vision_module/Tools/SortFuntions.hpp>
10 #include <vision_module/Tools/LinearBoundaryChecker.hpp>
11 #include <vision_module/Tools/LineSegment.hpp>
12 #include <vision_module/Tools/GuiManager.hpp>
13 #include <vision_module/Projections/CameraProjections.hpp>
14 #include <vision_module/SoccerObjects/IDetector.hpp>
15 #include <algorithm> // std::sort
16 #include <string> // std::string, std::to_string
17 #include <boost/range/algorithm_ext/erase.hpp>
18 using namespace cv;
19 
20 
21 class BallCircleC: public CircleC
22 {
23 public:
24  Point2f RealPos;
25  bool isCascade;
26  bool enable;
27  bool isMerged;
28  BallCircleC(Point Center, int Radius, Point2f RealPos, bool isCascade,
29  bool enable = true, bool isMerged = false) :
30  CircleC(Center, Radius), RealPos(RealPos), isCascade(isCascade), enable(
31  enable), isMerged(isMerged)
32  {
33 
34  }
35  BallCircleC(const BallCircleC& _in) :
36  CircleC(_in), RealPos(_in.RealPos), isCascade(_in.isCascade), enable(
37  _in.enable), isMerged(_in.isMerged)
38  {
39  }
40 };
46 class BallDetector: public IDetector
47 {
48 private:
49  CascadeClassifier object_cascade;
50  bool checkHistogram(const Mat &rawHSV, const Mat &fieldBinaryRaw,
51  const vector<cv::Point> &con, double minHistogramDiff[3],
52  double histResult[3]);
53 
54  bool checkHistogram(const Mat &rawHSV, const Mat &fieldBinaryRaw,
55  cv::Point center, int radius, double minHistogramDiff[3],
56  double histResult[3]);
57 
58  bool checkHistogramInPic(cv::Mat &hsvRoi, cv::Mat &justBallMask,
59  double minHistogramDiff[3], double histResult[3]);
60 
61  bool checkDistance_Rec(const cv::Rect &rec, CameraProjections &projection,
62  Point2f &realPos);
63 
64 public:
65  std::vector<BallCircleC> GetBall(const Mat &rawHSV,
66  const vector<Point> &hullField, const Mat &fieldBinaryRaw,
67  Mat &rawGray, const Mat &ballMask, const Mat &fieldConvectHull,
68  CameraProjections &projection, Mat &cannyImg,
69  GuiManager *_guiManager, Mat &guiImg, bool SHOWGUI);
70 
76  bool Init();
77  bool LoadCascade();
78  inline ~BallDetector()
79  {
80  }
81 };
82 
For detecting at least 50% white ball.
Definition: BallDetector.hpp:46
For pixel projections.
Definition: CameraProjections.hpp:50
A container class for managing gui events.
Definition: GuiManager.hpp:117