FindPeaks3x3

Finds coordinates of peaks (maximums or minimums) with absolute value exceeding threshold value.

Syntax

IppStatus ippiFindPeaks3x3_32s_C1R(const Ipp32s* pSrc, int srcStep, IppiSize roiSize, Ipp32s threshold, IppiPoint* pPeak, int maxPeakCount, int* pPeakCount, IppiNorm norm, int border, Ipp8u* pBuffer);

IppStatus ippiFindPeaks3x3_32f_C1R(const Ipp32f* pSrc, int srcStep, IppiSize roiSize, Ipp32f threshold, IppiPoint* pPeak, int maxPeakCount, int* pPeakCount, IppiNorm norm, int border, Ipp8u* pBuffer);

Parameters

pSrc

Pointer to the first source image ROI.

srcStep

Distance in bytes between starts of consecutive lines in the first source image.

roiSize

Size of the image ROI in pixels.

threshold

Threshold value.

pPeak

Pointer to the coorditanes peaks [maxPeakCount].

maxPeakCount

Maximum number of peaks.

pPeakCount

Pointer to the number of the detected peaks.

border

Border value, only pixel with distance from the edge of the image greater than border are processed.

norm

Specifies type of the norm to form the mask for extremum search:

ippiNormInf

Infinity norm (8-connectivity, 3x3 rectangular mask);

ippiNormL1

L1 norm (4-connectivity, 3x3 cross mask).

pBuffer

Pointer to the working buffer.

Description

The function ippiFindPeaks3x3 is declared in the ippcv.h file. It operates with ROI (see Regions of Interest in Intel IPP).

This function detects local maximum and minimum pixels in the source image:

and stores their coordinates in the pPeak array pPeak[m].x = jm, pPeak[m].y = im, m = 0, ... pPeakCount [0], pPeakCount[0] maxPeakCount

The neighborhood O(i, j) for the extremum search is defined by the parameter norm. The number of detected extremums is returned in pPeakCount[0]. The operation is stopped when the maxPeakCount extremums are found.

The function requires the working buffer pBuffer whose size should be computed by the function ippiFindPeaks3x3GetBufferSize beforehand.

Example "Simplified Peak Search for Calculation of SIFT Features” shows how to use the function ippiFindPeaks3x3_32f_C1R for calculations of the SIFT (Scale Invariant Feature Transform) features [Lowe04].

Return Values

ippStsNoErr

Indicates no error. Any other value indicates an error or a warning.

ippStsNullPtrErr

Indicates an error condition if one of the specified pointers is NULL.

ippStsSizeErr

Indicates an error condition if roiSize has a field with zero or negative value; or if maxPeakCount is less than or equal to 0; or if border is less than 1 or greater than one of 0.5*roiSize.width or of 0.5*roiSize.height.

ippStsStepErr

Indicates an error condition if srcStep is less than roiSize.width*<pixelSize>.

ippStsNotEvenStepErr

Indicates an error condition if srcStep is not divisible by 4.

Simplified Peak Search for Calculation of SIFT Features

          Ipp32s sigma[NIMAGE];      //  sigmas of Gauss blur (increasing
          Ipp32s kerSize[NIMAGE];    //  kernel sizef of Gauss blur (increasing)
          Ipp32f *pDst[NIMAGE];      //  blurred images
          Ipp32f *pSrc;              //  initial image
          Ipp8u *pBuffer;            //  working buffer
          IppiPoint *pPeak;          //  array of peaks
          IppiSize roi;              //  image size
          int step;                  //  row step in bytes
          int bufSize;               //  working buffer size
          int maxPeaks=500;          //  max peaks number for image
          int peakCount;             //  peaks number for image
          Ipp32f threshold=0.02f;    //  peak thresjold

		
          ippiFilterGaussGetBufferSize_32f_C1R(roi,kerSize[NIMAGE-1],&bufSize);
          pBuffer = ippsMalloc_8u(bufSize);
          for (i=0; i<NIMAGE;i++) {  //blur inital image with different Gauss kernels
             ippiFilterGaussBorder_32f_C1R(pSrc,step,pDst[i],step,roi,kerSize[i],
                sigma[i],ippBorderRepl,0,pBuffer);
          }
          ippsFree(pBuffer);
          for (i=0; i<NIMAGE-1;i++) { //  calulate difference of Gaussian (DOG) images
             ippiSub_32f_C1IR(pDst[i+1],step,pDst[i],step,roi);
          }
          ippiFindPeaks3x3GetBufferSize_32f_C1R(roi.width,&bufSize);
          pBuffer = ippsMalloc_8u(bufSize);
          pPeak = (IppiPoint*)ippsMalloc_8u(maxPeaks*sizeof(IppiPoint));
          for (i=1; i<NIMAGE-2;i++) {  // find and process peaks in DOG images
             ippiFindPeaks3x3_32f_C1R(pDst[i],step,roi,threshold,pPeak,maxPeaks,
                &peakCount,ippiNormL1,kerSize[0]/2,pBuffer);
             for (j=0;j<peakCount; j++) {
                Ipp32fpix = pDst[i][pPeak[j].y*step/sizeof(Ipp32f)+pPeak[j].x];
                Ipp32fpup = pDst[i+1][pPeak[j].y*step/sizeof(Ipp32f)+pPeak[j].x];
                Ipp32fpdn = pDst[i-1][pPeak[j].y*step/sizeof(Ipp32f)+pPeak[j].x];
                if (pix>0)if ((pix<pup)||(pix<pdn)) continue;
                if (pix<0)if ((pix>pup)||(pix>pdn)) continue;
//              calculateSIFT feature description for a peak pPeak[j] in DOG image pDst[i]
             }
          }
          ippsFree(pBuffer);
          ippsFree(pPeak);

	

Submit feedback on this help topic

Copyright © 2000 - 2011, Intel Corporation. All rights reserved.