智能车制作
标题:
求助岱默科技定位眼大津算法当中的一段代码解释
[打印本页]
作者:
二十一画生了
时间:
2016-4-14 11:39
标题:
求助岱默科技定位眼大津算法当中的一段代码解释
诸位大神,近日在看定位眼,岱默科技的,其中图像处理方面用到大津算法求动态阈值,但是他的方差不是按照定义的公式求解的,而是用的这样的方法:/************************************************************************** 岱默科技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
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2