GreyPeak.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. 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. //firstRng = preRng;
  29. continue;
  30. }
  31. }
  32. }
  33. else if (pt == GrayPeakType::rightBias)//right bias
  34. {
  35. if (nextRng != NULL)
  36. {
  37. int curPeak = curRange->peakValue;
  38. int nextPeak = nextRng->peakValue;
  39. if (nextPeak > curPeak)
  40. {
  41. if (curRange->preRng == NULL)
  42. {
  43. firstRng = nextRng;
  44. }
  45. nextRng->MergePeak(curRange);
  46. curRange = nextRng;
  47. //firstRng = nextRng;
  48. continue;
  49. }
  50. }
  51. }
  52. else if (pt == GrayPeakType::smallPeak)
  53. {
  54. if (preRng != NULL && nextRng != NULL)
  55. {
  56. int curPeak = curRange->peakValue;
  57. int prePeak = preRng->peakValue;
  58. int nextPeak = nextRng->peakValue;
  59. if (prePeak > curPeak && nextPeak > curPeak)
  60. {
  61. if (preRng->peakValue >= nextRng->peakValue)
  62. {
  63. preRng->MergePeak(curRange);
  64. curRange = preRng;
  65. //firstRng = preRng;
  66. continue;
  67. }
  68. else
  69. {
  70. nextRng->MergePeak(curRange);
  71. curRange = nextRng;
  72. //firstRng = nextRng;
  73. continue;
  74. }
  75. }
  76. else if (prePeak > curPeak && nextPeak < curPeak)
  77. {
  78. preRng->MergePeak(curRange);
  79. curRange = preRng;
  80. //firstRng = preRng;
  81. continue;
  82. }
  83. else if (nextPeak > curPeak && prePeak < curPeak)
  84. {
  85. nextRng->MergePeak(curRange);
  86. curRange = nextRng;
  87. //firstRng = nextRng;
  88. continue;
  89. }
  90. }
  91. else if (preRng != NULL && nextRng == NULL)
  92. {
  93. preRng->MergePeak(curRange);
  94. curRange = preRng;
  95. //firstRng = preRng;
  96. continue;
  97. }
  98. else if (preRng == NULL && nextRng != NULL)
  99. {
  100. nextRng->MergePeak(curRange);
  101. //firstRng = nextRng;
  102. curRange = nextRng;
  103. continue;
  104. }
  105. }
  106. if (curRange->nextRng == NULL)
  107. {
  108. break;
  109. }
  110. curRange = curRange->nextRng;
  111. }
  112. while (curRange != NULL && curRange->preRng != NULL)
  113. {
  114. resultFirstRng = curRange->preRng;
  115. curRange = curRange->preRng;
  116. }
  117. return true;
  118. }
  119. }