GreyPeak.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "stdafx.h"
  2. #include "GreyPeak.h"
  3. namespace OTSIMGPROC
  4. {
  5. BOOL MyGreyPeak::MergeGreyPeaks(MyGreyPeak* firstRng)
  6. {
  7. auto curRange = firstRng;
  8. while (curRange != NULL)
  9. {
  10. int pt = curRange->GetPeakType();
  11. if (pt == GrayPeakType::normalPeak)//normal peak
  12. {
  13. curRange = curRange->nextRng;
  14. continue;
  15. }
  16. auto preRng = curRange->preRng;
  17. auto nextRng = curRange->nextRng;
  18. if (pt == GrayPeakType::leftBias)//left bias
  19. {
  20. if (preRng != NULL)
  21. {
  22. int curPeak = curRange->peakValue;
  23. int prePeak = preRng->peakValue;
  24. if (prePeak > curPeak)
  25. {
  26. preRng->MergePeak(curRange);
  27. curRange = preRng;
  28. continue;
  29. }
  30. }
  31. }
  32. else if (pt == GrayPeakType::rightBias)//right bias
  33. {
  34. if (nextRng != NULL)
  35. {
  36. int curPeak = curRange->peakValue;
  37. int nextPeak = nextRng->peakValue;
  38. if (nextPeak > curPeak)
  39. {
  40. if (curRange->preRng == NULL)
  41. {
  42. firstRng = nextRng;
  43. }
  44. nextRng->MergePeak(curRange);
  45. curRange = nextRng;
  46. continue;
  47. }
  48. }
  49. }
  50. else if (pt == GrayPeakType::smallPeak)
  51. {
  52. if (preRng != NULL && nextRng != NULL)
  53. {
  54. int curPeak = curRange->peakValue;
  55. int prePeak = preRng->peakValue;
  56. int nextPeak = nextRng->peakValue;
  57. if (prePeak > curPeak && nextPeak > curPeak)
  58. {
  59. if (preRng->peakValue >= nextRng->peakValue)
  60. {
  61. preRng->MergePeak(curRange);
  62. curRange = preRng;
  63. continue;
  64. }
  65. else
  66. {
  67. nextRng->MergePeak(curRange);
  68. curRange = nextRng;
  69. continue;
  70. }
  71. }
  72. else if (prePeak > curPeak && nextPeak < curPeak)
  73. {
  74. preRng->MergePeak(curRange);
  75. curRange = preRng;
  76. continue;
  77. }
  78. else if (nextPeak > curPeak && prePeak < curPeak)
  79. {
  80. nextRng->MergePeak(curRange);
  81. curRange = nextRng;
  82. continue;
  83. }
  84. }
  85. else if (preRng != NULL && nextRng == NULL)
  86. {
  87. preRng->MergePeak(curRange);
  88. curRange = preRng;
  89. continue;
  90. }
  91. else if (preRng == NULL && nextRng != NULL)
  92. {
  93. nextRng->MergePeak(curRange);
  94. firstRng = nextRng;
  95. curRange = nextRng;
  96. continue;
  97. }
  98. }
  99. curRange = curRange->nextRng;
  100. }
  101. return true;
  102. }
  103. }