Peak Finder

Image Recognition 2012.02.02 21:41
주어진 데이터를 받아서 극대점과 극소점을 찾는다. 극점은 이전 극점과 일정한 차이(delta)가 날 때만 취한다. 맨 처음과 나중에 들어오는 데이터가 극점일 때, 별도의 처리가 필요하다.

BOOL peakFinder(std::vector<double>& data, double delta, /*IN*/
                          std::vector<int>& maxPosition, /*OUT*/
                          std::vector<int>& minPosition) /*OUT*/
{
    int maxPos = -1;
    int minPos = -1;
    bool lookForMax = true;
    double maxVal = -FLT_MAX ;       
    double minVal = FLT_MAX ;
    for (int i = 0; i < data.size(); i++) {
        double currVal = data[i] ;
        if (currVal > maxVal) {
            maxVal = currVal ;
            maxPos = i;
        } else if (currVal < minVal) {
            minVal = currVal ;
            minPos = i;
        }
        //
        if (lookForMax) {
            // 극대값을 찾는 상태이고, 현재값이 maxVal보다 충분이 아래면,
            // 이 maxVal이 극대값임 & 현재위치가 극소값의 후보가 됨;
            if (currVal < (maxVal - delta)) {
                maxPosition.push_back(maxPos);
                minVal = currVal ;
                minPos = i;
                lookForMax = false; //다음번에는 최소값을 찾는다;
            }
        } else {
            // 극소값을 찾는 상태이고, 현재값이 minVal보다 충분히 위면,
            // 이 minVal이 극소점임 & 현재위치가 극대값 후보가 됨;
            if (currVal > (minVal + delta)) {
                minPosition.push_back(minPos);
                maxVal = currVal;
                maxPos = i;
                lookForMax = true; //다음번에는 최대값을 찾는다;
            }
        }
 
    }
    return TRUE;
} 

데이터 구간이 (0,255) 히스트그램:

delta = 5;

""


delta  = 10;

""

delta = 15 ;

""

  

 

'Image Recognition' 카테고리의 다른 글

Perspective Transformation  (2) 2012.02.14
Integral Image을 이용한 Adaptive Threshold  (0) 2012.02.04
Peak Finder  (1) 2012.02.02
QR-code : decoder  (0) 2012.01.26
QR-code : detector  (0) 2012.01.12
Adaboost  (0) 2010.12.28
Posted by helloktk