Visible to Intel only — GUID: GUID-4F0DAB12-0424-428B-86CD-99B90EA910D3
Visible to Intel only — GUID: GUID-4F0DAB12-0424-428B-86CD-99B90EA910D3
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:
|
||||
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 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;
}