/**/
///
// function: calculate u and sigma with histogram
// summary : get u and sigma
// parameters:
// pImg : the image
// num : total pixels
// u : 均值 引用传递 返回
// sigma2: 方差 注意不是平均差
// 引用传递 返回u和sigma^2
int GetUAndSigma( const IplImage * pImg, int num, float & u, float & sigma2)
... {
int i;
int histo[256]; //个数统计
float sum;
sum = 0.0;
for(i = 0; i < 256; i++)
...{
histo[i] = 0;
}
//histogram
for(i = 0; i < num; i++ )
...{
histo[(unsigned char)pImg->imageData[i]]++;
}
for(i = 0; i < 256; i++)
...{
sum += i * histo[i];
}
u = sum / num; //平均值
sum = 0.0;
for(i = 0; i < 256; i++)
...{
sum += (u - i) * (u - i) * histo[i] ;
}
sigma2 = sum / num; //方差 注意:不是标准差
return true;
}
/**/ //
// summary: 利用flag 标志更新各个类的均值和方差
//
//
void UpdateUandSigma( const IplImage * pImg, int num, int k, char * flag, int * center, int * sigma)
... {
int i,j;
int histo[256]; //个数统计
float sum;
int n ;
for(j = 0; j < k; j++)
...{
sum = 0.0;
// function: calculate u and sigma with histogram
// summary : get u and sigma
// parameters:
// pImg : the image
// num : total pixels
// u : 均值 引用传递 返回
// sigma2: 方差 注意不是平均差
// 引用传递 返回u和sigma^2
int GetUAndSigma( const IplImage * pImg, int num, float & u, float & sigma2)
... {
int i;
int histo[256]; //个数统计
float sum;
sum = 0.0;
for(i = 0; i < 256; i++)
...{
histo[i] = 0;
}
//histogram
for(i = 0; i < num; i++ )
...{
histo[(unsigned char)pImg->imageData[i]]++;
}
for(i = 0; i < 256; i++)
...{
sum += i * histo[i];
}
u = sum / num; //平均值
sum = 0.0;
for(i = 0; i < 256; i++)
...{
sum += (u - i) * (u - i) * histo[i] ;
}
sigma2 = sum / num; //方差 注意:不是标准差
return true;
}
/**/ //
// summary: 利用flag 标志更新各个类的均值和方差
//
//
void UpdateUandSigma( const IplImage * pImg, int num, int k, char * flag, int * center, int * sigma)
... {
int i,j;
int histo[256]; //个数统计
float sum;
int n ;
for(j = 0; j < k; j++)
...{
sum = 0.0;