PlaqueBase.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. ////////////////////////////
  2. // Fichier PlaqueBase.h //
  3. ////////////////////////////
  4. #ifndef _PlaqueBase_h_
  5. #define _PlaqueBase_h_
  6. /*------------------------------------------------\
  7. Includes
  8. \-------------------------------------------------*/
  9. #include "scale.h"
  10. #include "vector.h"
  11. #include "CPlaqueInfo.h"
  12. #include "CPlaqueResult.h"
  13. #include <vector>
  14. #include <cassert>
  15. #include "region.h"
  16. #include "../TRIM/img.h"
  17. #include "../Container/extendedimage.h"
  18. using namespace std;
  19. /*----------------------------------------------------------\
  20. Constantes
  21. \----------------------------------------------------------*/
  22. const short NBVECTEURSMAX = 8184;
  23. const short NBPTSLONGEANTMAX = 512;
  24. #ifndef max
  25. #define max(a,b) (((a) > (b)) ? (a) : (b))
  26. #endif
  27. #ifndef min
  28. #define min(a,b) (((a) < (b)) ? (a) : (b))
  29. #endif
  30. /*----------------------------------------------------------\
  31. Classes
  32. \----------------------------------------------------------*/
  33. class CPlaqueResult;
  34. class ExtendedImage;
  35. enum EnumEtape
  36. {
  37. etapeRien,
  38. etapeSegments,
  39. etapeTacheSeuil,
  40. etapeReglage
  41. };
  42. enum enumType
  43. {
  44. typeUndefined,
  45. typeBW,
  46. typeRGB,
  47. typeManual
  48. };
  49. class CPlaqueBase
  50. {
  51. public:
  52. CPlaqueBase();
  53. virtual ~CPlaqueBase();
  54. CPlaqueInfo *m_pMeasures; // pointeur sur mesures de Plaque
  55. void RAZ();
  56. void Release();
  57. unsigned long m_clrVert;
  58. unsigned long m_clrOrange;
  59. unsigned long m_clrBleue;
  60. enumType m_type;
  61. int m_nSommeLongueurs;
  62. int m_nMesures;
  63. int m_nMesuresTotal;
  64. int m_nLongueurMax;
  65. EnumEtape m_Etape;
  66. int m_iTache;
  67. int m_nPointsDansPlaque;
  68. int m_iSommeIntensitesPlaque;
  69. int m_IntervallesIntensite[3]; // Les 3 intervalles d'intensité
  70. int m_iMax;
  71. img m_wimg; // Image de travail pour mettre les pixels verts
  72. Point m_tPtLongeantPlaque[NBPTSLONGEANTMAX + NBVECTEURSMAX];
  73. int m_nPtLongeantPlaque;
  74. // Extrémités des vecteurs trouvées
  75. // std::vector< Point > m_ptList; // pour la spline
  76. // short m_nPtList;
  77. Point m_tbPtsTrouvesFin[NBVECTEURSMAX];
  78. short m_nVecteursTrouves;
  79. // Centre de la tache indiquant le seuil inférieur
  80. Point m_ptInferieur;
  81. // (0=aiguilles, 1=inverse) calculé d'après position du pt inférieur et du 1° segment utilisateur
  82. int m_nSensTrigo;
  83. int m_nNetBTraite;
  84. // Les 2 points limites extérieures du seuillage par propagation
  85. Point m_pointLimite1;
  86. Point m_pointLimite2;
  87. Region m_rgnATraiter; // région de traitement
  88. Rect m_rcStenose; // rectangle englobant de la sténose
  89. int m_debug1; // Variables pour Debugger la partie Alchemy
  90. int m_debug2;
  91. int m_debug3;
  92. int m_debug4;
  93. int m_debug5;
  94. // Variables pour l'analyse des plaques
  95. double m_scoreRepartition; // Score de répartition
  96. double m_scoreRepartitionR; // Dans le rouge
  97. double m_scoreRepartitionB; // Dans le jaune
  98. double m_scoreRepartitionV; // Dans le vert
  99. double m_surfaceR; // Surface Rouge
  100. double m_surfaceB;
  101. double m_surfaceV;
  102. double m_surface; // totale
  103. int m_nbPixelsR; // Nombre de pixels rouges
  104. int m_nbPixelsB;
  105. int m_nbPixelsV;
  106. int m_nbPixels; // Total
  107. int m_GSM; // Grey Scale Median
  108. protected:
  109. ExtendedImage *m_result;
  110. ExtendedImage m_result2;
  111. unsigned long *m_etudie;
  112. unsigned int m_uErrorID; // ID de la chaîne à afficher en cas d'erreur
  113. int Mesurer_3(int nSeuil);
  114. int ParametrerRegionATraiter();
  115. protected:
  116. bool SetRegion (const CVector &vFirst, const CVector &vLast, int iLength);
  117. protected:
  118. //***** Mesurer 1 des segments définis / utilisateur
  119. int Mesurer_3_1Segment (const Point &pt1, const Point &pt2);
  120. void CalculerSensVecteurs ();
  121. //***** Seuillage par propagation
  122. virtual int TraiterPoint(int x, int y);
  123. int Threshold(int iMax);
  124. // Suivit de contour de plaque
  125. bool SuiviContour();
  126. bool IsBorder(int x, int y);
  127. bool SuiviContourLocal(int x, int y, double Xd, double Yd, bool Initialise = false);
  128. void SuiviContourRemplis(int x, int y);
  129. //***** Calcul de la surface & de l'intensité de la plaque
  130. int CalculerSurfaceEtIntensitePlaque(bool bManuelle);
  131. public:
  132. int CalculerPlaqueManuelle();
  133. bool DoBlobColoring();
  134. bool DoClosing();
  135. double Get_SommeLongueurs(); // [LAU - 2/5/2006]
  136. // Returns the last error generated.
  137. // Use CString.LoadString() to get the corresponding text
  138. unsigned int GetErrorID(void);
  139. virtual bool PointInBufferResult(const int& x, const int &y);
  140. virtual bool PointInBufferResult(const Point& pt);
  141. virtual int GetIntensityResult(const int& x, const int& y);
  142. virtual int GetIntensityResult(const Point& pt);
  143. virtual bool IsColor(int x, int y);
  144. virtual unsigned long GetPixelResult(const int& x, const int& y);
  145. virtual unsigned long GetPixelResult(const Point& pt);
  146. virtual unsigned long GetPixelEtudie(const int& x, const int& y);
  147. virtual unsigned long GetPixelEtudie(const Point& pt);
  148. // virtual void SetPixelResult(Point& pt);
  149. virtual void SetPixelResult(int x, int y);
  150. virtual void SetPixelEtudie(Point& pt, unsigned long vColor);
  151. virtual void SetPixelEtudie(int x, int y, unsigned long vColor);
  152. virtual int GetWidth();
  153. virtual int GetHeight();
  154. virtual void CopyResultDansEtudie();
  155. virtual void AffectLeadResult();
  156. virtual void CopieResultSvg();
  157. virtual void GraphMeanInit() { };
  158. virtual void GraphMeanAddMeasure( bool, double ) { };
  159. int OnLButtonUp(ExtendedImage *h_image, int x, int y);
  160. virtual int OnLButtonUp(int x, int y);
  161. virtual int OnLButtonUp(Point& point);
  162. virtual unsigned char GetIntensityTache(Point& ptCentre, int nRayonTache);
  163. virtual int calculPlaque(ExtendedImage *h_image, int x, int y, int nbPts, unsigned char *points, int seuil1, int seuil2);
  164. virtual int TestFantome(ExtendedImage *h_image, CPlaqueResult * );
  165. virtual int calculPlaque2(ExtendedImage *h_image, int nbPts, unsigned char *points);
  166. virtual void AnalysePlaque(int seuil1, int seuil2);
  167. // virtual void CalculScoreRepartition();
  168. double Mean();
  169. double Max();
  170. unsigned char Density();
  171. double Surface();
  172. bool TestCouleur();
  173. };
  174. #endif