Intel® Integrated Performance Primitives (Intel® IPP) Developer Guide and Reference

ID 790148
Date 3/22/2024
Public
Document Table of Contents

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);

Include Files

ippcv.h

Domain Dependencies

Headers: ippcore.h, ippvm.h, ipps.h, ippi.h

Libraries: ippcore.lib, ippvm.lib, ipps.lib, ippi.lib

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

This function 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.

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.

Example

/*******************************************************************************
* Copyright 2015 Intel Corporation.
*
*
* This software and the related documents are Intel copyrighted materials, and your use of them is governed by
* the express license under which they were provided to you ('License'). Unless the License provides otherwise,
* you may not use, modify, copy, publish, distribute, disclose or transmit this software or the related
* documents without Intel's prior written permission.
* This software and the related documents are provided as is, with no express or implied warranties, other than
* those that are expressly stated in the License.
*******************************************************************************/

// A simple example of finding coordinates of peaks
//     ippiFindPeaks3x3GetBufferSize_32f_C1R
//     ippiFindPeaks3x3_32f_C1R


#include <stdio.h>
#include "ipp.h"

#define WIDTH  128  /* Image width  */
#define HEIGHT 128  /* Image height */
#define KERSIZE 3   /* Kernel size  */

/* Next two defines are created to simplify code reading and understanding */
#define EXIT_MAIN exitLine:                                  /* Label for Exit */
#define check_sts(st) if((st) != ippStsNoErr) goto exitLine; /* Go to Exit if Intel(R) Integrated Performance Primitives (Intel(R) IPP) function returned status different from ippStsNoErr */

/* Results of ippMalloc() are not validated because Intel(R) IPP functions perform bad arguments check and will return an appropriate status  */

int main(void)
{
    IppStatus status = ippStsNoErr;
    Ipp32f *pSrc = NULL;       /*  initial image  */
    Ipp8u *pBuffer = NULL;     /*  working buffer */
    IppiPoint *pPeak = NULL;   /*  array of peaks */
    IppiSize roiSize = { WIDTH, HEIGHT };    /* image size */
    int srcStep = 0;           /*  row step in bytes */
    int bufSize = 0;           /*  working buffer size */
    int maxPeaks=500;          /*  max peaks number for image */
    int peakCount = 0;         /*  peaks number for image */
    Ipp32f threshold=0.02f;    /*  peak threshold */
    Ipp32s borderValue=40;     /*  Border Value */


    pSrc = ippiMalloc_32f_C1(roiSize.width, roiSize.height, &srcStep);

    check_sts( status = ippiFindPeaks3x3GetBufferSize_32f_C1R(roiSize.width,&bufSize) )

    pBuffer = ippsMalloc_8u(bufSize);
    pPeak   = (IppiPoint*)ippsMalloc_8u(maxPeaks*sizeof(IppiPoint));

    check_sts( status = ippiFindPeaks3x3_32f_C1R(pSrc,srcStep,roiSize,threshold,pPeak,maxPeaks,
          &peakCount,ippiNormL1,borderValue,pBuffer) )

EXIT_MAIN
    ippsFree(pBuffer);
    ippsFree(pPeak);
    ippiFree(pSrc);
    printf("Exit status %d (%s)\n", (int)status, ippGetStatusString(status));
    return status;
}