otsu 应用
依据像素值的权重,分离图像前景和背景。
otsu 算法确定图像前景和背景阈值
// 关键之处是处理像素值的权重占比
// Otsu algorithm
int Otsu(const Mat src)
{
int height = src.rows;
int width = src.cols;
int size = height * width;
unsigned char* data = src.data;
// histogram
long histogram[256] = { 0 };
// pixel gray value count
for (int i = 0; i < height; i++)
{
unsigned char* p = data + i * src.step;
for (int j = 0; j < width; j++)
{
histogram[int(*p++)]++;
}
}
/*
* sum0:前景的灰度总和 sum1:背景灰度总和
* cnt0:前景像素的总个数 cnt1:背景像素的总个数
* w0: 前景像素个数占整幅图像像素的比例
* w1: 背景像素个数占整幅图像像素的比例
* u0: 前景的平均灰度 u1: 背景的平均灰度
* variance: 类间方差
*/
long sum0 = 0, sum1 = 0;
long cnt0 = 0, cnt1 = 0;
double w0