中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

FilterLaplacianBorder

此函数将拉普拉斯滤波器应用于源图像src并将结果存储到目标图像dst。边框像素的值根据边框类型和边框值赋值参数获得。此过滤器的内核是参数指定的3x3或5x5大小的矩阵掩码。内核具有以下值,锚点位于中心单元格。

2 4 4 4 2

2 0 2 4 0 -8 0 4

0 -8 0 4 -8 -24 -8 4

2 0 2 4 0 -8 0 4

2 4 4 4 2

此函数所需应用到的buffer空间,需要先使用FilterLaplacianInit来申请,并在主函数中使用该空间。

函数接口声明如下:

  • 辅助空间buffer申请与释放函数:

    HmppResult HMPPI_FilterLaplacianInit_8u16s_C1R(HmppiSize roiSize, HmppiMaskSize mask, uint8_t **buffer);

    HmppResult HMPPI_FilterLaplacianInit_32f_C1R(HmppiSize roiSize, HmppiMaskSize mask, uint8_t **buffer);

    HmppResult HMPPI_FilterLaplacianRelease(uint8_t *buffer);

  • 主函数:

    HmppResult HMPPI_FilterLaplacianBorder_8u16s_C1R(const uint8_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiMaskSize maskSize, HmppiBorderType borderType, uint8_t borderValue, uint8_t *buffer);

    HmppResult HMPPI_FilterLaplacianBorder_32f_C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep,HmppiSize roiSize, HmppiMaskSize maskSize, HmppiBorderType borderType, float borderValue, uint8_t *buffer);

参数

参数名

描述

取值范围

输入/输出

src

指向源向量的指针。

非空

输入

srcStep

源图像中连续行起点之间的距离(以字节为单位)。

(0, INT_MAX]

输入

dst

指向目的向量的指针。

非空

输出

dstStep

目标图像中连续行的起点之间的距离(以字节为单位)。

(0, INT_MAX]

输入

roiSize

源和目标图像感兴趣区域的大小(以像素为单位)。

roiSize.width∈(0, INT_MAX],roiSize.height∈(0, INT_MAX]

输入

maskSize

预定义掩码

HmppMskSize3x3 或 HmppMskSize5x5

输入

borderType

边界类型

以下HmppiBorderType的枚举值之一:

HMPPI_BORDER_CONST

HMPPI_BORDER_REPL

HMPPI_BORDER_MIRROR

输入

borderValue

指定常量边框像素的常量值,仅当borderType = HMPPI_BORDER_CONST时有意义。

数据类型范围内的值

输入

buffer

指向计算所需缓冲区的指针。在init中申请空间与初始化,在release中释放空间,在主函数中使用申请的空间。

非空

输入/输出

返回值

  • 成功:返回HMPP_STS_NO_ERR
  • 失败:返回错误码。

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

src、dst这两个入参中存在空指针。

HMPP_STS_SIZE_ERR

roiSize.width、roiSize.height这两个入参中存在值小于等于0。

HMPP_STS_STEP_ERR

srcStep、dstStep小于等于0。

HMPP_STS_ROI_ERR

roiSize.width与数据类型大小的乘积大于srcStep或dstStep。

HMPP_STS_NOT_EVEN_STEP_ERR

srcStep(dstStep)不能被src(dst)所属数据类型的字节长度整除。

HMPP_STS_BAD_ARG_ERR

不支持的borderType类型值或者不支持的maskSize值。

示例

#define SRC_BUFFER_SIZE_T 28
#define DST_BUFFER_SIZE_T 16

int LaplacianBorderExample()
{
    HmppiSize roi = { 2, 4 };
    const float src[SRC_BUFFER_SIZE_T] = { 9.8375815e-16, 4.5484828e-16, 1.4972698e-14, -1.3397389e+25, 1.9061152e+27, -8.8007769e+17, -217025.86, -6.2768196e+14, 4.4335606e+33, 1.0258707e-13, -9.3150633e-11, -5192.7163, 2.536292e+25, 6.0832354e+15, 8.5712402e+29, -0.15451884, -0.2848247, -2.1714717e+10, 2.7212473e+17, -1.3591454e-22, 7.6473188e+21, -2.2729285e-30, 1129877.1, -1.0089557e-05, -1.1054221e+21, -3.8945858e-19, -6.8345717e-34, 60685416};
    float dst[DST_BUFFER_SIZE_T] = {0};

    int32_t srcStep = 4 * sizeof(float);
    int32_t dstStep = 4 * sizeof(float);
    uint8_t *buffer = NULL;
    HmppResult result = HMPPI_FilterLaplacianInit_32f_C1R(roi, HmppMskSize3x3, &buffer);

    if (result == HMPP_STS_NO_ERR) {
        result = HMPPI_FilterLaplacianBorder_32f_C1R(src, srcStep, dst, dstStep, roi, HmppMskSize3x3, HMPPI_BORDER_MIRROR, 0.0f, buffer);
    }
    if (result != HMPP_STS_NO_ERR) {
        printf("result error: %d\n", result);
    }
    printf("dst= ");
    for(int32_t i = 0; i < DST_BUFFER_SIZE_T; i++){
        printf("%f ",dst[i]);
    }
    printf("\n");
    HMPPI_FilterLaplacianRelease(buffer);
    buffer = NULL;
    return 0;
}

运行结果:

result = 0
dst = -7.0406216e+18 1.5248922e+28 -3.9418209e+28 7.7666443e+28 -1.5248922e+28 1.7734242e+34 5.1225988e+27 -2.04904e+27 -3.5468485e+34 7.7259126e+27 -2.2689171e+31 2.2694294e+31 -2.0290336e+26 3.5468485e+34 0 0