vrcore  0.45
visuReal Messkern
 All Classes Files Functions Variables
MeasuringAttachment.h
Go to the documentation of this file.
1 #ifndef MEASURING_ATTACHMENT_H
2 #define MEASURING_ATTACHMENT_H
3 
17 namespace vr
18 {
19 namespace measuringattachment
20 {
21 typedef enum
22 {
23  INVALID = -1,
24  ADULT,
25  CHILD,
26  CONFIGURATION
27 } Configuration;
28 
31 static const struct {
32  cv::Vec3d topLeft, bottomLeft, bottomRight, topRight;
33 } beam = {
34  {7.5, 67.5, 0.0},
35  {-7.5, 67.5, 0.0},
36  {-7.5,-67.5, 0.0},
37  { 7.5,-67.5, 0.0}
38 };
39 
40 } // namespace measuringattachment
41 
42 namespace matt = vr::measuringattachment;
43 
51 {
52 public:
53  ConfigurationDiscriminator(const cv::Mat& grayScaleImage,
54  const CoordinateTransformation& t,
55  const LateralSide side);
56  ConfigurationDiscriminator(const cv::Mat& grayScaleImage,
57  float pixelsPerMm,
58  cv::Point2f& nullPos,
59  cv::Point2f& markPos);
61  matt::Configuration computeResult() const;
62 private:
63  float contrast (cv::Point2d const& point) const;
64 
65  cv::Mat const& grayScaleImage_;
66  cv::Point2f nullPos_;
67  cv::Point2f adultPos_;
68  cv::Point2f childPos_;
69  float pixelsPerMm_;
70 };
71 
79 {
80 public:
82  static const double contactFaceAxisDistance;
85  static const double CHILD_POS_MM;
86  static const double ADULT_POS_MM;
87  SpringStrut() : xFfaRef_(std::numeric_limits<double>::quiet_NaN()), side_(RIGHT) {};
88  SpringStrut(const LateralSide side);
94  bool computeFfaMark(const Line& viewRay);
99  void computeFfaRing(const Line& viewRay);
104  Line getAxis() const;
105  const cv::Vec3d& getLineMark();
106  const cv::Vec3d& getUpperSideMark();
111  double getFaceFormAngle() const;
116  cv::Vec3d getFaceFormAngleRefPoint() const;
121  cv::Vec3d getFaceFormAngleMark() const;
126  cv::Vec3d getFaceFormAngleMark(double x, double angleDeg) const;
131  double getFaceFormAngleRefX() const;
136  cv::Rect getFfaRoi(const CoordinateTransformation& ct) const;
143  cv::Vec3d transformFromB(const cv::Vec3d& point) const;
149  cv::Vec3d transformToB(const cv::Vec3d& point) const;
150  void reset();
151 private:
153  static const double ffaMarkAxisDistance; // mm
157  static const double xFfaRef; // mm
159  static const double ffaMarkContactFaceDistance;
160 
161  // Basisvektoren in B
162  cv::Vec3d x, y, z;
163  cv::Matx33d rotationMatrixToB;
164  cv::Matx33d rotationMatrixFromB;
165  cv::Matx33d rotationMatrixToB_inv;
166  cv::Vec3d origin[measuringattachment::CONFIGURATION];
167  cv::Vec3d ffaMark_; // Federstreben-Koordinaten!
168  cv::Vec3d ffaRef_;
169  double xFfaRef_;
170  LateralSide side_;
171 };
172 
183 {
184 public:
185  friend class SpringStrut;
186  static const cv::Vec3d null;
187  static const cv::Vec3d down;
188  // Koordinaten der drei Hauptmarken im Buegelsystem.
190  static const cv::Vec3d mainMarkR;
192  static const cv::Vec3d mainMarkL;
194  static const cv::Vec3d peakMark;
195  static const double mainMarkDistance;
196  static const double mainMarkPeakMarkDistance;
197  static const Plane framePlane;
199  static const double inclination;
200  static const cv::Point3f guessedPupils[LATERAL_SIDE];
201 
202  static MeasuringAttachment& instance();
203  SpringStrut& getSpringStrut(LateralSide side);
204  const cv::Vec3d& getUpperSideMark(LateralSide side);
210  static void computeConfiguration(const cv::Mat& image, const CoordinateTransformation& t);
211  static measuringattachment::Configuration getConfiguration();
212  static void setConfiguration(measuringattachment::Configuration configuration);
213  static void getTransformation(const cv::Matx33d& cameraMatrix,
214  cv::Point2f& right,
215  cv::Point2f& left,
216  cv::Point2f& peak,
217  cv::Vec3d& rvec,
218  cv::Vec3d& tvec,
219  cv::InputArray distortionCoeffs = noDistortionCoeffs);
227  static void getTransformation(CoordinateTransformation& t,
228  cv::Point2f& right,
229  cv::Point2f& left,
230  cv::Point2f& peak);
239  static cv::Vec3d getFramePlaneIntersection(const Line& line);
240  static cv::Point2f getGuessedPupil(const LateralSide side,
241  const CoordinateTransformation& ct);
242  void reset() { getSpringStrut(_R).reset(); getSpringStrut(_L).reset(); };
243 private:
245  static measuringattachment::Configuration configuration_;
246  SpringStrut springStrut_[LATERAL_SIDE];
247  static const std::vector<cv::Point3f> mainMarks;
251  static measuringattachment::Configuration validConfiguration();
252 };
253 
254 } // namespace vr
255 
256 namespace matt = vr::measuringattachment;
258 
259 #endif // MEASURING_ATTACHMENT_H
static const double inclination
Neigung der Federstreben-Achsen gegen die Senkrechte bei Projektion auf die x-z-Ebene.
Definition: MeasuringAttachment.h:199
double getFaceFormAngleRefX() const
gibt an, wie weit die Federstrebe ausgefahren ist.
Definition: MeasuringAttachment.cpp:279
bool computeFfaMark(const Line &viewRay)
berechnet die Position der FSW-Marke im Koordinatensystem der Federstrebe.
Definition: MeasuringAttachment.cpp:222
cv::Rect getFfaRoi(const CoordinateTransformation &ct) const
Definition: MeasuringAttachment.cpp:302
Diese Klasse repräsentiert den Visierbügel.
Definition: MeasuringAttachment.h:182
static const cv::Vec3d peakMark
Hauptmarke Mitte (auf Ausleger), Marke "OM".
Definition: MeasuringAttachment.h:194
void computeFfaRing(const Line &viewRay)
Definition: MeasuringAttachment.cpp:248
double getFaceFormAngle() const
gibt Fassungsscheibenwinkel zurück
Definition: MeasuringAttachment.cpp:271
Line getAxis() const
gibt Federstrebenachse zurück.
Definition: MeasuringAttachment.cpp:256
static const double CHILD_POS_MM
Definition: MeasuringAttachment.h:85
static const cv::Vec3d mainMarkR
Hauptmarke rechts, "OR".
Definition: MeasuringAttachment.h:190
cv::Vec3d transformToB(const cv::Vec3d &point) const
Koordinatentransformation Federstrebensystem -> Bügelsystem.
Definition: MeasuringAttachment.cpp:336
cv::Vec3d getFaceFormAngleMark() const
gibt den Mittelpunkt der FSW-Marke zurück.
Definition: MeasuringAttachment.cpp:289
static void computeConfiguration(const cv::Mat &image, const CoordinateTransformation &t)
ermittelt die Bügelkonfiguration (Erwachsenenbrille | Kinderbrille)
Definition: MeasuringAttachment.cpp:372
static const cv::Vec3d mainMarkL
Hauptmarke links, Marke "OL".
Definition: MeasuringAttachment.h:192
Unterscheidet Visierbügelkonfigurationen Erwachsener/Kind.
Definition: MeasuringAttachment.h:50
static const double contactFaceAxisDistance
Abstand Anlagefläche von Federstrebenachse in mm.
Definition: MeasuringAttachment.h:82
static cv::Vec3d getFramePlaneIntersection(const Line &line)
berechnet den Schnittpunkt der Gerade line mit der Fassungsebene.
Definition: MeasuringAttachment.cpp:436
cv::Vec3d transformFromB(const cv::Vec3d &point) const
Definition: MeasuringAttachment.cpp:330
cv::Vec3d getFaceFormAngleRefPoint() const
gibt den Fußpunkt der FSW-Marke auf der Federstrebenachse zurück.
Definition: MeasuringAttachment.cpp:284
Definition: coord_transform.h:19
Ebene.
Definition: algorithms.h:68
Gerade im Raum.
Definition: algorithms.h:22
repräsentiert eine Federstrebe des Meßbügels
Definition: MeasuringAttachment.h:78