123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #include "stdafx.h"
- #include "GreyPeak.h"
- namespace OTSIMGPROC
- {
-
- BOOL MyGreyPeak::MergeGreyPeaks(MyGreyPeak* firstRng ,MyGreyPeak*& resultFirstRng)
- {
- auto curRange = firstRng;
- while (curRange != NULL)
- {
- GrayPeakType pt = curRange->GetPeakType();
- if (pt == GrayPeakType::normalPeak)//normal peak
- {
- if (curRange->nextRng == NULL)
- {
- break;
- }
- curRange = curRange->nextRng;
- continue;
- }
- auto preRng = curRange->preRng;
- auto nextRng = curRange->nextRng;
- if (pt == GrayPeakType::leftBias)//left bias
- {
- if (preRng != NULL)
- {
- int curPeak = curRange->peakValue;
- int prePeak = preRng->peakValue;
- if (prePeak > curPeak)
- {
- preRng->MergePeak(curRange);
- curRange = preRng;
- //firstRng = preRng;
- continue;
- }
- }
- }
- else if (pt == GrayPeakType::rightBias)//right bias
- {
- if (nextRng != NULL)
- {
- int curPeak = curRange->peakValue;
- int nextPeak = nextRng->peakValue;
- if (nextPeak > curPeak)
- {
- if (curRange->preRng == NULL)
- {
- firstRng = nextRng;
- }
- nextRng->MergePeak(curRange);
- curRange = nextRng;
- //firstRng = nextRng;
- continue;
- }
- }
- }
- else if (pt == GrayPeakType::smallPeak)
- {
- if (preRng != NULL && nextRng != NULL)
- {
- int curPeak = curRange->peakValue;
- int prePeak = preRng->peakValue;
- int nextPeak = nextRng->peakValue;
- if (prePeak > curPeak && nextPeak > curPeak)
- {
- if (preRng->peakValue >= nextRng->peakValue)
- {
- preRng->MergePeak(curRange);
- curRange = preRng;
- //firstRng = preRng;
- continue;
- }
- else
- {
- nextRng->MergePeak(curRange);
- curRange = nextRng;
- //firstRng = nextRng;
- continue;
- }
- }
- else if (prePeak > curPeak && nextPeak < curPeak)
- {
- preRng->MergePeak(curRange);
- curRange = preRng;
- //firstRng = preRng;
- continue;
- }
- else if (nextPeak > curPeak && prePeak < curPeak)
- {
- nextRng->MergePeak(curRange);
- curRange = nextRng;
- //firstRng = nextRng;
- continue;
- }
- }
- else if (preRng != NULL && nextRng == NULL)
- {
- preRng->MergePeak(curRange);
- curRange = preRng;
- //firstRng = preRng;
- continue;
- }
- else if (preRng == NULL && nextRng != NULL)
- {
- nextRng->MergePeak(curRange);
- //firstRng = nextRng;
- curRange = nextRng;
- continue;
- }
- }
- if (curRange->nextRng == NULL)
- {
- break;
-
- }
- curRange = curRange->nextRng;
- }
- while (curRange != NULL && curRange->preRng != NULL)
- {
- resultFirstRng = curRange->preRng;
- curRange = curRange->preRng;
- }
- return true;
- }
- }
|