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