PlaqueBase.h 6.1 KB

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