大津
作者:互联网
void Ostu() { //初始化 u = 0; avgValue = 0; w0 = 0; maxVariance = 0; //清空灰度数组 for(i = 0; i < 256; i++) { histogram[i] = 0; } // 生成灰度柱状图 uint8_t *p_image = &image[0][1]; for (i = 0; i < 70; ++i) //有0-255 种灰度 把每种灰度的数量统计出来,所以下标代表灰度 数组里的数字代表此种灰度有多少个 { for (int j = 0; j < 186; ++j) {//44-374 ++histogram[*p_image]; p_image++; } p_image += 2; } for (i = 0; i < 256; ++i) { histogram[i] = histogram[i] / size; //灰度数量/尺寸 =比例 u += i * histogram[i]; //当前灰度值*比例的累加就是 总的平均灰度 } for (i = 0; i < 256; ++i) { w0 += histogram[i]; //前景像素占比 假设前i个是前景 avgValue += i * histogram[i]; //前景总的灰度 t = avgValue / w0 - u; //前景平均灰度-总灰度 t=u-u0 variance = t * t * w0 / (1 - w0); // g = w0/(1-w0)*(u0-u1)^2 if (variance > maxVariance) { //找到使灰度差最大的值 maxVariance = variance; Ostu_Threshold = i; //那个值就是阈值 } } //生成二值化数组 加速二值化 for(i = 0; i < Ostu_Threshold; i++) { Bin_Array[i] = 0; } for(i = Ostu_Threshold; i < 256; i++) { Bin_Array[i] = 1; } }
- 背景像素占比
- 前景像素占比
- 背景的平均灰度值
- 前景的平均灰度值
- 0~M灰度区间的灰度累计值
- 类间方差:
- 将公式3.4.5带入公式6 可得最终简化公式:
标签:,++,image,histogram,灰度,w0,256 来源: https://www.cnblogs.com/jizhaoyang/p/11280711.html