vrcore  0.45
visuReal Messkern
 All Classes Files Functions Variables
measuring.h
1 #pragma once
2 
3 namespace vr {
4 
5 /*Dieser Teil soll auf Verwendung von 3d-Pken im Kamerasystem zurueckgefuehrt werden.*/
6 class Measuring
7 {
8 private:
9  struct DataMeasures
10  {
11  double Vorneigung;
12  double Kopfdrehung;
13  double HSA[LATERAL_SIDE];
14  double Fassungsscheibenwinkel; // Angabe in rad, also für Grad * (PI/180)
15  double alternativer_Fassungsscheibenwinkel; // Angabe in rad, also für Grad * (PI/180); Berechnung ueber die alte Methode mit den Schenkeln
16  double Scheibenlaenge;
17  double Scheibenhoehe;
18  double Scheibenmittenabstand;
19  double AbstzwGlaesern;
20  double Pupillenabstand;
22  double MonoZentrierpunktabstand[LATERAL_SIDE];
23  double MonoPupillendistanz[LATERAL_SIDE];
24  double ProgressiveCorridorLength;
26  cv::Vec2d Zentrierpunkt_Dez[LATERAL_SIDE]; // (horizontal, vertikal)
27  /*Abstaende Zentrierpunkt zur unteren bzw nasalen Kastenlinie aka x,y*/
28  cv::Vec2d Zentrierpunkt_Kasten[LATERAL_SIDE]; // (horizontal, vertikal)
29  /*analog Abstaende Zentrierpunkt nach Augendrehpunktsforderung zur unteren bzw nasalen Kastenlinie aka x,y*/
30  cv::Vec2d Zentrierpunkt_ADP_Kasten[LATERAL_SIDE]; // (horizontal, vertikal)
31  //zur Charakterisierung der Symmetrieebene waere die Normale richtig. Eben wird diese vor Ort berechnet:
32  //cv::Vec3d nSymmetrieebene;
33 //ungut: cv::Vec3d Symmetrieebene_Richtung_1;Symmetrieebene_Richtung_2;
34  cv::Vec3d Symmetrieebene_Anker;
36  cv::Vec3d h[LATERAL_SIDE];
38  cv::Vec3d v[LATERAL_SIDE];
39  cv::Vec3d C[LATERAL_SIDE];
40  cv::Vec3d h_f; // horizontaler Richtungsvektor der Fassungsebene = measures_.C[_R] - measures_.C[_L]
41  double headRotationCompensation;
42  } measures_ ;
43  const struct vr::Front3D& front3d_;
44  //Faktor Habituell - Korrigiert muss gesetzt werden koennen! const
45  RealConstants real_;
46  ComputationModel computationModel_;
47 
48  cv::Vec3d centrationPoint[LENS_TYPE][LATERAL_SIDE];
49 
50  /*Im wesentlichen Clone aus 3dreconstruction
51  Berechnet nach unten geneigte Nullblickrichtung in gerader u. habitueller Kopfhaltung, normiert.*/
52  void calcDirection_ADP(cv::Vec3d& b_N_F, cv::Vec3d& b_K_F) const;
53  void computeCornealVertexDistance(const LateralSide side);
54  double computeFaceFormAngle(const vr::FrontPic3D& im3D, LateralSide side, double markAngle, double baseCurveRadius);
56  void computeLensPlane(const LateralSide side, const cv::Vec3d& symmetryNormal);
57 public:
58  cv::Vec3d pupils[LATERAL_SIDE];
59  Measuring(const vr::Front3D& front3d, const RealConstants& real, ComputationModel computationModel);
62  void computeMeasures(const bool isRightAvailable, const cv::Matx33d* R_F = 0);
63  //void computeFaceFormAngle(const FrontPic2D& im2D);
64  void computeFaceFormAngle(const vr::FrontPic3D& im3D);
65 
69  void computeRectifiedMeasures(HeadRotationCompensationState hrcs);
70  void computeRectifiedMeasures(HeadRotationCompensationState hrcs, const LateralSide side, cv::Vec3d& p, cv::Matx33d& R_T);
71  cv::Vec2d computeRectifiedCentrationPointEcrReq(const LateralSide side, const cv::Matx33d& R_T, const double factor);
72 
73  //API:
74  //koennten auch member v. measures werden.
75  double getPDistance() const;
76 //Baustelle! 27.6., ungetestet
77  double getPDistance(const LateralSide side) const;
78 //die hier mit Vorsicht
79  double getY(const LateralSide side) const;
80  double getY_CREreq(const LateralSide side) const;
81 
82  double getZ(const LateralSide side) const;
83  double getFrameWidth() const;
84  double getFrameHeight() const;
85  double getDistanceBetweenLenses() const;
86  double getHeadRotation() const;
87  double getInclination() const;
88 
89  double getFaceFormAngle() const;
90 
91  double getCorneaVertexDistance(const LateralSide side) const;
92 
93  void setHeadRotationCorrection(double correction);
94  double getHeadRotationCorrection() const;
95  double getHeadRotationCompensation() const;
96  double getProgressiveCorridorLength() const;
97  // Zentrierpunkte rechts, links
98  // trac/visureal/wiki/v2/MessgrößenAugenoptik/MaschinengerechteDefinitionen#a3.13KoordinatendesZentrierpunktes
99  const cv::Vec3d& getCentrationPoint(const LensType lensType, const LateralSide side) const;
100 };
101 
102 }
Koordinatensystemunabhängige Daten, Dinge, die innerhalb der Engine sind und defaultwerte.
Definition: RealConstants.h:5
Definition: measuring.h:6
Definition: aspect.h:100
void computeMeasures(const bool isRightAvailable, const cv::Matx33d *R_F=0)
Definition: measuring.cpp:149
void computeRectifiedMeasures(HeadRotationCompensationState hrcs)
Definition: measuring.cpp:305