PyrUp

Pyrup operator through the smoothing, sampling and other processes will be up-sampled picture, to generate the length and width of the original picture twice the size of the picture, commonly used in the construction of the image pyramid, access to high-resolution original picture and other scenarios.

Operator Effect

Input ImageParameterOutput Image
image-image

Principle

The implementation process of up-sampling is to expand the original image first, inserting zeros on the even rows and columns of the original image, and then performing Gaussian smoothing on the image to finally obtain the target image. The length and width conform to the following constraints:

dst.width=src.width2dst.width=src.width*2

dst.height=src.height2dst.height=src.height*2

The Gaussian filter kernel used in the Gaussian smoothing stage is as follows:

kernel=164[1464141624164624362464162416414641]\begin{aligned}kernel = \frac{1}{64}\begin{bmatrix}1 & 4 & 6 & 4 & 1 \\4 & 16 & 24 & 16 & 4 \\6 & 24 & 36 & 24 & 6 \\4 & 16 & 24 & 16 & 4 \\1 & 4 & 6 & 4 & 1 \end{bmatrix}\end{aligned}

API Interface

int32_t hbVPPyrUp(hbUCPTaskHandle_t *taskHandle, hbVPImage *dstImg, hbVPImage const *srcImg);

For detailed interface information, please refer to hbVPPyrUp.

Usage

// Include the header #include "hobot/hb_ucp.h" #include "hobot/vp/hb_vp.h" #include "hobot/vp/hb_vp_pyr_up.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_U8C1, 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 hbVPPyrUp(&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);