| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- ////////////////////////////////////////////////////////////////////////////////////
- /// Fichier EIMBase.h
- ///
- ////////////////////////////////////////////////////////////////////////////////////
- #ifndef _EIMBase_h_
- #define _EIMBase_h_
-
- /*----------------------------------------------------------\
- Includes
- \----------------------------------------------------------*/
- #include "scale.h"
- #include "vector.h"
- #include "CEIMInfo.h"
- #include <vector>
- #include <cassert>
- /*----------------------------------------------------------\
- Constantes
- \----------------------------------------------------------*/
- #define THICKNESS 300 // epaisseur sur laquelle le calcul est effectue
- //#define QI_MIN 60
- #define QI_MIN 5 // Provisoire : pour tests EIM Live
-
- #define MAX_POINTS_EIM_AUTO 1024
- /*----------------------------------------------------------\
- Classes
- \----------------------------------------------------------*/
- class CEIMResult;
- class ExtendedImage;
-
- class CEIMBase
- {
- private:
- enum enumDirection
- {
- enumUp,
- enumDown
- };
- bool LookForFirstPoint (long &, long, long &, unsigned char*);
- bool LookForVariation (long &, char *, long, enumDirection, long &);
- bool AddVector (sParoi &);
- bool FindOpposite (sParoi &, sParoi &);
- void SetMiddlePoint (sSlope &, CVector &, bool reverseSlope=false);
- int MeasureLineBuffer (sParoi &, unsigned char*, char *, long);
- void ComputeEIM (CEIMInfo *);
- void Paroi (void);
- void Diameter();
- void ParallelismeEIM();
- void ParallelismeDistensibilite();
- // élements liés à la mesure
- public:
- CEIMInfo *m_pMeasures; // pointeur sur mesures d'EIM.
- double m_coeff_a, m_coeff_b, m_coeff_c; // Coefficient pour la courbe approximée
- protected:
- CVector m_vUser; // vecteur parallèle à la paroi (normalement ...)
- ExtendedImage *m_image;
- double m_minx_curve;
- double m_max_curve;
- int m_nbpoints_curve;
- bool m_bNearWall; // Indique si la mesure est pour le Near Wall ou le FarWall
- int m_Max_Alignement; // Indique la longueur utilisé pour l'alignement
- int m_indexParoi;
- int m_diag; // Pour le diagnostic de l'arret de l'algorithme
- public:
- Point m_ptDebut;
- Point m_ptFin;
- protected:
- Point m_pt1perp[MAX_POINTS_EIM_AUTO], m_pt2perp[MAX_POINTS_EIM_AUTO];
- Point m_perpap1, m_perpap2;
- std::vector<double> m_arVariance,
- m_arVarianceINT,
- m_arVarianceAA,
- m_arVarianceII;
-
- unsigned int m_uErrorID; // ID de la chaîne à afficher en cas d'erreur
- public:
- unsigned char m_bDelta1,
- m_bDelta2;
- unsigned char m_bSeuil1;
- protected:
- unsigned char m_bBuffer [THICKNESS];// stockage d'une ligne/colonne
- char m_cOffsets [THICKNESS];// stockage de la variation de densite d'une ligne/colonne
- bool m_fDiameter; // type de la derniere mesure : diametre ou EIM
-
- static char Delta (unsigned char b1, unsigned char b2);
- virtual bool GfxImageValid() { return m_image != NULL; }
- public:
- bool m_Assist; // Horizontalisation automatique ou non!
-
- // Version de mesure de l'EIM qui améliore les résultats de l'EIM
- // Uniquement pour Tomtec pour la version 3.0
- bool m_versionTomtecAout08;
- CEIMBase(void);
- virtual ~CEIMBase(void);
-
- virtual void Release(void);
-
- inline bool Valid(void) const { return (m_dwValidPoints ? true : false); };
- bool Measure(ExtendedImage *, const Point &, const Point &, bool, CEIMResult *m_res = NULL);
- double Direction();
- bool Update(CEIMResult *m_res = NULL);
- virtual unsigned char IQ(void)
- {
- assert (m_pMeasures && m_image);
- return (unsigned char )(100 * m_dblQI);
- }
- virtual void GraphMeanInit() { }
- virtual void GraphMeanAddMeasure( bool, double ) { }
- virtual void PrintDiameter() { }
- virtual void PrintErrorQIMin() { }
- virtual void PrintResult() { }
- virtual void SetEimAssisted(bool valide); // [JAK - 27/1/2003]Mesure de paroi assistée
- bool GetEimAssisted(); // [JAK - 27/1/2003]
- int CalculEimAutomatique(int mode, bool bActionDiametre, Point *ptClick0, Point *ptClick1, Point *ptLastClick, unsigned char *bClicks, ExtendedImage* img,bool *fBackToNone);
- int CalculEimAutomatique(int mode, bool bActionDiametre, Point *ptClick0, Point *ptClick1, Point *ptLastClick, unsigned char *bClicks, bool *fBackToNone);
- bool Measure(const Point &, const Point &, bool, CEIMResult *m_res = NULL);
- Point m_StartPoint;
- Point m_EndPoint;
- bool m_bDisplay;
-
- enum enumAlgo
- {
- algoProfile,
- algoSymmetry
- };
- long m_dwPoints, // nombre total de points (d'éléments de m_pMeasures)
- m_dwValidPoints; // nombre de points ayant présenté le bon profil
- double m_dblEIMMax, m_dblEIMMean, m_dblEIMMin, // EIM
- //#ifdef VERSION_SHOW_VARIANCE // [JAK - 17/6/2002]
- m_dblVariance, // [JAK - 13/5/2002]
- //#endif
- m_dblINTMax, m_dblINTMean, m_dblINTMin, // Intima Max , Moyenne , et Min.
- m_dblEIMdMean, m_dblINTdMean, m_dblMEDdMean, // Media Max ,
- m_dblDiaAAMax, m_dblDiaAAMean, m_dblDiaAAMin, // diamètre Adventice/Adventice Max , Moyen et Minimum
- m_dblDiaIIMax, m_dblDiaIIMean, m_dblDiaIIMin, // diamètres Intima/Intima Max , Moyen et Minimum
- m_dblDistance,
- m_dblQI,m_dblQIMean,
- m_dblIA, m_dblIAd;
- std::string m_strInfo; // chaîne de résultat
- enumAlgo m_algoDiameter; // méthode utilisé pour le diamètre
- double m_dblVarianceAA, m_dblVarianceII;
- bool m_parallelismeDiametre;
-
- //returns the last error generated.
- //Use CString.LoadString() to get the corresponding text
- unsigned int GetErrorID(void);
- virtual bool PointInBuffer(const Point& pt);
- virtual unsigned char GetIntensity(const Point& pt);
- };
-
- #endif // EIMBASE_H__10EE0714_09E1_11D2_B0D4_00A024B882A7__INCLUDED_
|