您的位置:首页 > 其它

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

2012-03-11 21:59 302 查看
/*
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,所以有可能会划分为两类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: