DistanceTransform
计算源图像中每个非零像素到最近的零像素的距离。
函数接口声明如下:
HmppResult HMPPI_DistanceTransform_3x3_8u32f_C1R(const uint8_t* pSrc, int srcStep, float* pDst, int dstStep, HmppiSize roiSize, float* pMetrics);
其中pMetrics可以定义为如下数组:
- 曼哈顿距离
Ipp32f pMetrics[3*3] = { 1, 1, 1, 1, 0, 1, 1, 1, 1 }; - 欧几里得距离
Ipp32f pMetrics[3*3] = { 1.4142f, 1.0f, 1.4142f, 1.0f, 0.0f, 1.0f, 1.4142f, 1.0f, 1.4142f };
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
pSrc |
指向源向量的指针。 |
非空 |
输入 |
srcStep |
源图像中连续行起点之间的距离(以字节为单位)。 |
(0, INT_MAX] |
输入 |
pDst |
指向目的向量的指针。 |
非空 |
输出 |
dstStep |
目标图像中连续行的起点之间的距离(以字节为单位)。 |
(0, INT_MAX] |
输入 |
roiSize |
源和目标图像感兴趣区域的大小(以像素为单位)。 |
roiSize.width∈(0, INT_MAX],roiSize.height∈(0, INT_MAX] |
输入 |
pMetrics |
该指针指向一个用户定义的邻域代价表,用于自定义距离传播规则。 |
非空 |
输入 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
|---|---|
HMPP_STS_NULL_PTR_ERR |
pSrc、pDst、pMetrics中存在空指针。 |
HMPP_STS_STEP_ERR |
srcStep小于或等于0。 |
HMPP_STS_SIZE_ERR |
roiSize.width或roiSize.height小于或等于0。 |
示例
#include <stdio.h>
#include "hmppi.h"
#include "hmpp_type.h"
void DistanceTransformExample()
{
HmppiSize roi = {5, 7};
uint8_t src[45] = {1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5
};
float dst[49] = {0};
int32_t srcStep = 5 * sizeof(uint8_t);
int32_t dstStep = 7 * sizeof(float);
float pMetrics[3*3] = {
1, 1, 1,
1, 0, 1,
1, 1, 1
};
HmppResult res = HMPPI_DistanceTransform_3x3_8u32f_C1R(src, srcStep, dst, dstStep, roi, pMetrics);
printf("result: %d\n", (int)res);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
printf("%f ", dst[i * 7 + j]);
}
printf("\n");
}
}
int main()
{
DistanceTransformExample();
return 0;
}
运行结果:
result: 0 1.00 2.00 3.00 2.00 2.00 0.00 0.00 1.00 2.00 3.00 2.00 1.00 0.00 0.00 1.00 2.00 3.00 2.00 1.00 0.00 0.00 1.00 2.00 3.00 2.00 1.00 0.00 0.00 1.00 2.00 3.00 2.00 1.00 0.00 0.00 1.00 4.00 3.00 2.00 1.00 0.00 0.00 5.00 4.00 3.00 2.00 1.00 0.00 0.00
父主题: 图像统计功能