GreyPeak.cpp 2.8 KB

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