鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

Resize

用于调整三维图像大小,属于图像几何变换的一类功能。

函数接口声明如下:

  • 三维图像调整大小:

    HmppResult HMPPI_RResize_8u_C1V(const uint8_t *pSrc, HmpprVolume srcVolume, int srcStep, int srcPlaneStep,

    HmpprCuboid srcVoi, uint8_t *pDst, int dstStep, int dstPlaneStep, HmpprCuboid dstVoi, double xFactor,

    double yFactor, double zFactor, double xShift, double yShift, double zShift, int interpolation);

    HmppResult HMPPI_RResize_16u_C1V(const uint16_t *pSrc, HmpprVolume srcVolume, int srcStep, int srcPlaneStep,

    HmpprCuboid srcVoi, uint16_t *pDst, int dstStep, int dstPlaneStep, HmpprCuboid dstVoi, double xFactor,

    double yFactor, double zFactor, double xShift, double yShift, double zShift, int interpolation);

    HmppResult HMPPI_RResize_32f_C1V(const float *pSrc, HmpprVolume srcVolume, int srcStep, int srcPlaneStep,

    HmpprCuboid srcVoi, float *pDst, int dstStep, int dstPlaneStep, HmpprCuboid dstVoi, double xFactor,

    double yFactor, double zFactor, double xShift, double yShift, double zShift, int interpolation);

参数

参数名

描述

取值范围

输入/输出

pSrc

指向源体积起点的指针。

非空

输入

srcVolume

源volume的大小。

正整数

输入

srcStep

源体积中每个平面连续行起始点之间的距离(以字节为单位)。

非负整数

输入

srcPlaneStep

源连续体积平面之间的距离(以字节为单位)。

非负整数

输入

srcVoi

源体积的感兴趣体积。

正整数

输入

pDst

指向目标体积原点的指针。

非空

输入/输出

dstStep

目标体积中每个平面连续行起始点之间的距离(以字节为单位)。

非负整数

输入

dstPlaneStep

目标连续体积平面之间的距离(以字节为单位)。

非负整数

输入

dstVoi

目标体积的感兴趣体积。

正整数

输入

xFactor

改变源VOI的x维度因子。

正数

输入

yFactor

改变源VOI的y维度因子。

正数

输入

zFactor

改变源VOI的z维度因子。

正数

输入

xShift

在x方向上的偏移值。

实数

输入

yShift

在y方向上的偏移值。

实数

输入

zShift

在z方向上的偏移值。

实数

输入

interpolation

插值算法的类型。

支持以下算法:

HMPPI_INTER_NN

输入

返回值

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

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

传入的任意一个指针存在空指针。

HMPP_STS_STEP_ERR

srcStep、srcPlaneStep、dstStep、dstPlaneStep存在负数或者

例如srcStep小于srcVolume.width乘以输入数据类型字节长度,srcPlaneStep小于srcStep乘以srcVolume.height等。

HMPP_STS_SIZE_ERR

srcVolume、srcVoi和dstVoi中width、height和depth存在负值。

HMPP_STS_INTERPOLAION_ERR

插值算法类型不支持。

HMPP_STS_WRONG_INTERSECT_VOI

srcVoi的x/y/z要比srcVolume的width/height/depth大。

HMPP_STS_RESIZE_FACTOR_ERR

x/y/zFactor存在负数或者0。

示例

void ResizeExample()
{
    HmpprVolume srcVolume = {2, 2, 2};
    HmpprCuboid srcVoi = {0, 0, 0, 2, 2, 2};
    HmpprCuboid dstVoi = {0, 0, 0, 3, 3, 3};
    int srcStep = 2 * sizeof(uint16_t);
    int dstStep = 3 * sizeof(uint16_t);
    int srcPlaneStep = srcStep * 2;
    int dstPlaneStep = dstStep * 3;
    double xFactor = 1.5;
    double yFactor = 1.5;
    double zFactor = 1.5;
    double xShift = 0.;
    double yShift = 0.;
    double zShift = 0.;
    uint16_t pSrc[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int dstLen = dstVoi.width * dstVoi.height * dstVoi.depth;
    uint16_t *pDst = HMPPS_Malloc_16u(dstLen); 
    HmppResult result = HMPPI_RResize_16u_C1V(pSrc, srcVolume, srcStep, srcPlaneStep, srcVoi, pDst, dstStep, dstPlaneStep,
            dstVoi, xFactor, yFactor, zFactor, xShift, yShift, zShift, HMPPI_INTER_NN);
    printf("result = %d\n", result);
    if (result != HMPP_STS_NO_ERR) {
        return;
    }
        for (int i = 0; i < dstLen; i++){
        printf("%d ", pDst[i]);
    }
    printf("\n");
}

运行结果:

result = 0
1 2 2 3 4 4 3 4 4 5 6 6 7 8 8 7 8 8 5 6 6 7 8 8 7 8 8