Threshold
Thresholding function to process the image by different thresholding methods.
This function applies a fixed level of thresholding to a multi-channel array.
It is typically used to obtain a binary image from a grayscale image or for noise removal, i.e., filtering out pixels with values that are too small or too large.
This function currently supports the HB_VP_THRESH_TOZERO type of threshold.
Operator Effect
| Input Image | Parameter | Output Image |
|---|
 | type = HB_VP_THRESH_TOZERO thresh = 0 maxVal = 0 |  |
Principle
Different threshold types have different processing effects, which are based on the following principles:
The principle expression formula is as follows:
THRESHBINARY:dst(x,y)THRESHBINARYINV:dst(x,y)THRESHTRUNC:dst(x,y)THRESHTOZERO:dst(x,y)THRESHTOZEROINV:dst(x,y)={maxval0ifsrc(x,y)>threshotherwise={0maxvalifsrc(x,y)>threshotherwise={thresholdsrc(x,y)ifsrc(x,y)>threshotherwise={src(x,y)0ifsrc(x,y)>threshotherwise={0src(x,y)ifsrc(x,y)>threshotherwise
API Interface
int32_t hbVPThreshold(hbUCPTaskHandle_t *taskHandle,
hbVPImage *dstImg,
hbVPImage const *srcImg,
hbVPThresholdParam const *thresholdParam);
For detailed interface information, please refer to hbVPThreshold.
Usage
// Include the header
#include "hobot/hb_ucp.h"
#include "hobot/vp/hb_vp.h"
#include "hobot/vp/hb_vp_threshold.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_width,
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_U8C1,
dst_width,
dst_height,
dst_stride,
dst_mem.virAddr,
dst_mem.phyAddr,
nullptr,
0,
0};
// init param
hbVPThresholdParam threshold_param;
threshold_param.thresh = 0;
threshold_param.maxVal = 0;
threshold_param.type = HB_VP_THRESH_TOZERO;
// 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
hbVPThreshold(&task_handle, &dst_img, &src_img, &threshold_param);
// 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);