智能车制作

标题: 求助岱默科技定位眼大津算法当中的一段代码解释 [打印本页]

作者: 二十一画生了    时间: 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