注册会员
- 积分
- 25
- 威望
- 17
- 贡献
- 8
- 兑换币
- 6
- 注册时间
- 2016-4-14
- 在线时间
- 0 小时
- 毕业学校
- 兰州理工大学
|
诸位大神,近日在看定位眼,岱默科技的,其中图像处理方面用到大津算法求动态阈值,但是他的方差不是按照定义的公式求解的,而是用的这样的方法:/************************************************************************** 岱默科技DEMOK 定位眼摄像头开发小组
*
* 函数名称:OTSU_threshold
* 功能说明:经典大津算法 动态阈值
* 修改时间:2015-12-06
* 备 注:
*************************************************************************/
#define Gourd 256
uint8 OTSU_threshold(uint8 *pic,uint16 num)
{
uint16 i=0;
uint16 Histogram[Gourd];//直方图histogram
for (i=0;i<Gourd;i++)Histogram[i]=0;//数组清零
for (i=0;i<num;i++)
{
Histogram[(int)pic[i]*Gourd/256]++;
}
float pt[Gourd],w[Gourd],u[Gourd],o[Gourd],Ut;
pt[0]=(float)Histogram[0]/num;
w[0]=pt[0];
u[0]=w[0];
for(i=1;i<Gourd;i++)
{
pt[i]=(float)Histogram[i]/num;
w[i]=w[i-1]+pt[i];
u[i]=u[i-1]+i*pt[i];
};
Ut=u[Gourd-1];//整幅图像平均灰度
for(i=0;i<Gourd;i++)
{
o[i]=(1-pt[i])*(u[i]*u[i]/w[i]+(u[i]-Ut)*(u[i]-Ut)/(1-w[i]));//方差
};
int maxi=0;
float maxo=0;
for(i=0;i<Gourd;i++)
{
if(o[i]!=0x7FC0000)
if(o[i]>maxo){maxo=o[i];maxi=i;}
}
return maxi*256/Gourd;
}
小弟愚笨,苦于不理解方差这一行的理解。请诸位大神帮我解释一下。
原来大津算法定义的公式为:
g=w0*w1*(u1-u0)^2
|
|