粒子滤波器之建立选定区域直方图(histo_bin())

/*
  Calculates the histogram bin into which an HSV entry falls
  
  @param h Hue
  @param s Saturation
  @param v Value
  
  @return Returns the bin index corresponding to the HSV color defined by
    \a h, \a s, and \a v.
*/
int histo_bin( float h, float s, float v )
{
  int hd, sd, vd;

  /* if S or V is less than its threshold, return a "colorless" bin */
  vd = MIN( (int)(v * NV / V_MAX), NV-1 );
  if( s < S_THRESH  ||  v < V_THRESH )
    return NH * NS + vd;
  
  /* otherwise determine "colorful" bin */ 
  hd = MIN( (int)(h * NH / H_MAX), NH-1 );
  sd = MIN( (int)(s * NS / S_MAX), NS-1 );
  return sd * NH + hd;
}

通过仔细的分析,可以得出以下结论:

假如某几个像素点的HSV值比较接近,并且H和V值大于一个给定的限定值(S_THRESH,V_THRESH),那么经过上述函数运算后会得到一个相同的值,也就是返回值。如:A(170,0.4,0.3),B(175,0.45,0.27):这两个点经过运算后都会得到44. 也就是会把44返回回去。

故对每一个像素点 : bin = histo_bin(h,s,v); hist[bin]+=1;

所以如果把A、B作为参数,那么最后得到的结果就为:A点:bin=44; hist[44+=1;] B点:bin=44; hist[44]+=1;

这样就把A点和B点作为有相同或相似属性的点统计进直方图。反映在直方图上应该就是和具有A点相似属性的点现在的值为2了。同理可以看出对于S和V,其中一个小于设定值,那么就会归为一类,也就说,如果有10的点S和V值小于设定值,那么十个点就有可能归为一类或两类。具体得就设定值而定。在此函数中,V_THRESH的设定值为0.2,所以有可能会划分为两类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值