vrcore  0.45
visuReal Messkern
 All Classes Files Functions Variables
HeadModel.h
Go to the documentation of this file.
1 #pragma once
2 
6 class ClampModel;
7 class CciTransformer;
8 
15 class HeadModel
16  {
17  friend class MeasuringHead;
18  public:
19  static const int roiRand = 1;
20  protected:
21  // das ist kontextabhängig ggf. nur ein Schätzwert
22  double pixPerMM;
23  cv::Size lastSize;
24  cv::Mat mImage, mGray;
25  StatusGroup markStatus;
26  MarkVector markVec;
27  MarkPresetsVector presetsVec;
28  RoiBuilder roiBuilder;
29 //TM 25.1.:
30  PhotoParams photoValues;
31 #ifdef ALLOW_BOOST_FILESYSTEM
32  boost::filesystem::path resultDirectory_;
33 #endif
34 
35  HeadModel ();
36  virtual ~HeadModel ();
37 
38  void resetModel (const int nMarks);
39  virtual void prepareModel (const ExposureArrangement exposureArrangement) = 0;
40 #ifdef ALLOW_BOOST_FILESYSTEM
41  // Für debugging
42  void setResultDirectory (boost::filesystem::path& p) { resultDirectory_ = p; }
43 #endif
44  public:
45  int pixel (double mm) { return cvRound (mm * pixPerMM); }
46  float fPixel (double mm) const { return (float) (mm * pixPerMM); }
47  void setPixelPerMM (double ppMM) { pixPerMM = ppMM; }
48  bool isPointStatus (int idx, StatusValue status) { return markStatus.isStatus (idx, status); }
49  void setPointStatus (int idx, StatusValue status, StatusValue clearValue = 0) { markStatus.setStatus (idx, status, clearValue); }
50  void clearPointStatus (int idx, StatusValue status) { markStatus.clearStatus (idx, status); }
51  StatusValue getPointStatus (int idx) { return markStatus.getStatus (idx); }
52  void getImage (cv::Mat &mat) const { mat = mImage; }
53  void setRoiImage (cv::Mat &mat) { mGray = mat; }
54  bool getRoiImage (RoiRect &rRoi, cv::Mat &mRoi);
55  cv::Mat const& getGrayScaleImage () const;
56  bool getPoint (int markIdx, cv::Point2f& point);
57  bool getMarkData (int markIdx, MarkImageData &markData);
58  bool setMarkData (int markIdx, MarkImageData &markData);
59  bool setMarkDataResult (int markIdx, StatusValue status, MarkImageData &markData);
60  bool setMarkDataResult (int markIdx, StatusValue status, cv::Vec2d& point);
61  double getPlanarNorm (int markIdxA, int markIdxB);
62 
63  inline const PhotoParams& getPhotoParams() const { return photoValues; };
64  // Setzt /nicht/ photoValues.opticalAxis
65  void setPhotoParams ( const PhotoParams& photoValues);
66  bool isMarkValid (int markIdx) { return isPointStatus (markIdx, St_Valid | St_Adjusted); }
67  bool isMarkAdjusted (int markIdx) { return isPointStatus (markIdx, St_Adjusted); }
68  bool isMarkCalculated (int markIdx) { return isPointStatus (markIdx, St_Calculated); }
69  bool isMarkUseable (int markIdx) { return isMarkValid (markIdx) || isMarkCalculated (markIdx); }
70  RoiBuilder* createPresetsRoiBuilder (size_t markIdx);
71  virtual bool getMarkPresets (size_t idx, MarkDetectionPresets &presets);
72 #ifdef ALLOW_BOOST_FILESYSTEM
73  boost::filesystem::path getResultDirectory() { return resultDirectory_; }
74 #endif
75  };
76 
77 
84 class FrontHeadModel : public HeadModel
85  {
86  private:
87 // double bevelsOfTheLens [2];
88  vr::FrontFeaturesSPtr frontFeatures_;
89  cv::CascadeClassifier faceCascade;
90  cv::CascadeClassifier eyeCascade;
91  RoiRect rightBoxRoi, leftBoxRoi;
92  RoiRect rightFswMarkRoi, leftFswMarkRoi;
93  // alte Fassungserkennung (Thilo)
94  DoubleContourSPtrVector rightContours;
95  DoubleContourSPtrVector leftContours;
96  ContourFinderPresetsVector boxContourPresetsVec;
97  ContourFinderPresetsVector fswContourPresetsVec;
98  // neue Fassungserkennung (Jürgen)
99  DoubleContourPair contours_;
100  vr::MetsResult mets_;
101  StatusInfo metsStatus_;
102 
103  //vormals EngineInitData: (Referenzen?)
104 //weiter migriert in die Basisklasse PhotoParams photoValues;
105  StatusInfo InfantGlassesConfigStatus_;
106  bool isInfantGlassesConfig_;
107  void prepareBoxContourPresets ();
108  void prepareFswContourPresets ();
109  void calculateSwivelMarksPresetRoiCenter (int markIdx, MarkDetectionPresets &presets);
110  protected:
111  RoiRect rightIrisRoi, leftIrisRoi;
112  RealConstants realConstants;
113  IrisLocatorPresets irisLocatorPresets;
114  std::vector<cv::Vec3d> boxesVector;
115  void prepareIrisLocatorPresets ();
116  double getScaleFactor ();
117  virtual void prepareModel (const ExposureArrangement exposureArrangement);
118  virtual void resetBoxesValues (double rXVar, double lXVar);
119 
120  public:
121  FrontHeadModel ();
122  const vr::FrontFeaturesSPtr& getFrontFeatures(const ExposureArrangement exposureArrangement);
123  const vr::FrontFeaturesSPtr& getFrontFeatures() const { return frontFeatures_; };
124  double getPseudoKorr ();
125  void setRealConstants ( const RealConstants& real );
126  void getRealConstants ( RealConstants& real );
127  virtual void calculateFrontRois ();
128  void getRightIrisRoi (RoiRect &rRoi) { rRoi = rightIrisRoi; }
129  void getLeftIrisRoi (RoiRect &rRoi) { rRoi = leftIrisRoi; }
130  double getPixelsPerMm () { return getScaleFactor(); }
131  IrisLocatorPresets getIrisLocatorPresets () const;
132  // bezogen auf Hauptmarkenebene, ungleich null erst wenn Haupmarken gefunden.
133  CciTransformer* createCoordinateTransformer ();
134 
135  DoubleContourSPtrVector* getRightContours () { return &rightContours; }
136  DoubleContourSPtrVector* getLeftContours () { return &leftContours; }
137  ContourFinderPresetsVector* getBoxContourPresetsVec () { return &boxContourPresetsVec; }
138  ContourFinderPresetsVector* getFswContourPresetsVec () { return &fswContourPresetsVec; }
139  // neue Fassungserkennung (Jürgen)
140  DoubleContourPair& getContours();
141  std::string contoursErrorMessage;
142  std::string contoursDetectorVersion;
143 // void setContour(LateralSide side, DoubleContour& contour) { contours_[side] = contour; }
144  vr::MetsResult& getHoyaMets (StatusInfo& statusInfo);
145  void setHoyaMets (const vr::MetsResult& mets, const StatusInfo& statusInfo);
146  void getRightBoxRoi (RoiRect &rRoi) { rRoi = rightBoxRoi; }
147  void getLeftBoxRoi (RoiRect &rRoi) { rRoi = leftBoxRoi; }
148  void getRightFswMarkRoi (RoiRect &rRoi) { rRoi = rightFswMarkRoi; }
149  void getLeftFswMarkRoi (RoiRect &rRoi) { rRoi = leftFswMarkRoi; }
150  virtual bool getMarkPresets (size_t idx, MarkDetectionPresets &presets);
151  void setIsInfantGlassesConfig (const bool value, const StatusInfo& statusInfo);
152  bool isInfantGlassesConfig (StatusInfo& statusInfo) const;
153  };
154 
161 class SideHeadModel : public HeadModel
162  {
163  private:
164  vr::FrontFeaturesSPtr frontFeatures_;
165  bool bRight;
166  int downDistance;
167  protected:
168  virtual void prepareModel (const ExposureArrangement exposureArrangement);
169 
170  public:
171  SideHeadModel (LateralSide side);
172  bool isRightSide () { return bRight; }
173  void setDownDistance (int distance) { downDistance = distance; }
174  int getDownDistance () { return downDistance; }
175  const vr::FrontFeaturesSPtr& getFrontFeatures() const { return frontFeatures_; };
176  void setFrontFeatures (const vr::FrontFeaturesSPtr& features) { frontFeatures_ = features; };
177 
178  };
Definition: HeadModel.h:84
CCI = Camera Clamp Image.
Definition: ccitransformer.h:5
Koordinatensystemunabhängige Daten, Dinge, die innerhalb der Engine sind und defaultwerte.
Definition: RealConstants.h:5
Definition: mark_types.h:23
beschreibt eine Visierbügelmarke
Definition: types.h:31
Voreinstellungen für IrisLocator.
Definition: types.h:62
Definition: MeasuringHead.h:12
Definition: ClampModel.h:9
Definition: RoiBuilder.h:10
Definition: HeadModel.h:15
Definition: PhotoParams.h:27
Definition: HeadModel.h:161
Definition: StatusGroup.h:6