Integral
Calculate the integral map of the image.
Operator Effect
| Schematic Image |
|---|
 |
Principle
The principle of the operator is to accumulate the pixel values in the rectangle from the origin to the point (X, Y) as the pixel values at the point (X, Y) with the following formula:
sum(X,Y)=x<X,y<Y∑src(x,y)
A common application scenario for integral maps in neural networks is to obtain the integral of the pixel values of a piece of area, which is calculated as follows:
x1⩽x<xx,y1⩽y<y2∑image(x,y)=sum(x2,y2)−sum(x1,y2)−sum(x2,y1)+sum(x1,y1)
API Interface
int32_t hbVPIntegral(hbUCPTaskHandle_t *taskHandle,
hbVPImage *dstImg,
hbVPImage const *srcImg);
For detailed interface information, please refer to hbVPIntegral.
Usage
// Include the header
#include "hobot/hb_ucp.h"
#include "hobot/vp/hb_vp.h"
#include "hobot/vp/hb_vp_integral.h"
// init Image, allocate memory for image data
hbUCPSysMem src_mem;
hbUCPMallocCached(&src_mem, src_stride * src_height, 0);
hbVPImage src_img{HB_VP_IMAGE_FORMAT_Y,
HB_VP_IMAGE_TYPE_U8C1,
src_width,
src_height,
src_stride,
src_mem.virAddr,
src_mem.phyAddr,
nullptr,
0,
0};
hbUCPSysMem dst_mem;
hbUCPMallocCached(&dst_mem, dst_stride * dst_height, 0);
hbVPImage dst_img{HB_VP_IMAGE_FORMAT_Y,
HB_VP_IMAGE_TYPE_S32C1,
dst_width,
dst_height,
dst_stride,
dst_mem.virAddr,
dst_mem.phyAddr,
nullptr,
0,
0};
// init task handle and schedule param
hbUCPTaskHandle_t task_handle{nullptr};
hbUCPSchedParam sched_param;
HB_UCP_INITIALIZE_SCHED_PARAM(&sched_param);
sched_param.backend = HB_UCP_DSP_CORE_0;
// create task
hbVPIntegral(&task_handle, &dst_img, &src_img);
// submit task
hbUCPSubmitTask(task_handle, &sched_param);
// wait for task done
hbUCPWaitTaskDone(task_handle, 0);
// release task handle
hbUCPReleaseTask(task_handle);
// release memory
hbUCPFree(&src_mem);
hbUCPFree(&dst_mem);