ComputeThreshold_Otsu
计算Otsu阈值的值。计算公式为:


w0:前景点所占的比例。
wl:背景点所占比例(1 - w0)。
u0:前景点灰度值。
u1:背景点的灰度值。
u:图像整体的均值。
函数接口声明如下:
单通道数据的阈值操作:
HmppResult HMPPI_ComputeThreshold_Otsu_8u_C1R(const uint8_t* src, int32_t srcStep, HmppiSize roiSize, uint8_t* threshold);
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
src |
指向源图像感兴趣区域的指针。 |
非空 |
输入 |
srcStep |
源图像中连续行起点之间的距离(以字节为单位)。 |
非空 |
输入 |
roiSize |
源和目标图像感兴趣区域的大小(以像素为单位)。 |
roiSize.width∈(0, INT_MAX],roiSize.height∈(0, INT_MAX] |
输入 |
threshold |
指向Otsu阈值的指针。 |
输入数据类型的范围 |
输出 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
|---|---|
HMPP_STS_NULL_PTR_ERR |
src、dst、srcDst中存在空指针。 |
HMPP_STS_SIZE_ERR |
roiSize的width、height存在零或负值。 |
HMPP_STS_STEP_ERR |
srcStep、dstStep、srcDstStep中存在零或负值。 |
HMPP_STS_ROI_ERR |
roiSize.width大于步长。 |
示例
#define BUFFER_SIZE 36
int ComputeThreshold_Ostu()
{
HmppiSize roi = { 9, 4 };
const uint8_t src[BUFFER_SIZE] = { 1, 2, 4, 8, 16, 8, 4, 2, 1,
1, 2, 4, 8, 16, 8, 4, 2, 1,
1, 2, 4, 8, 16, 8, 4, 2, 1,
1, 2, 4, 8, 16, 8, 4, 2, 1};
uint8_t threshold;
int32_t srcStep = 9 * sizeof(uint8_t);
HmppResult result = HMPPI_ComputeThreshold_Otsu_8u_C1R(src, srcStep, roi, &threshold);
printf("result = %d \n dst = ", result);
if (result != HMPP_STS_NO_ERR) {
printf("result error: %d\n", result);
}
printf("%d\n", threshold);
return 0;
}
运行结果:
result = 0 dst = 4
父主题: 基础运算