粒子滤波器之巴式距离测试直方图相似度
2012-03-12 14:22
381 查看
在粒子滤波器中,放出去的采样粒子是否采集到我们所需跟踪目标,这里就需要一个判断:也就是将采样粒子与我的事先定义好的参照粒子作比较。于是在比较的过程中就出现了怎样比较,怎样评价他们的相似度。这里可以使用巴氏距离。
在统计学中,Bhattacharyya距离(以下称巴氏距离)测量的是两个离散或连续概率分布的相似性。计算方式和Bhattacharyya系数关系很密切。两种计算方式都以A. Bhattacharyya名字命名,Bhattacharyya是一位30年代在印度统计研究所工作的统计学家。巴氏系数可用来对两组样本的相关性进行测量。这一方法常用来作分类器算法。
数学定义
离散概率分布
对于在X数域上的两个离散概率分布p和q,巴氏距离定义为[2]:
DB(p,q) = -ln(BC(p,q))
其中
BC(p,q) = ∑√p(x)q(x)
BC被称作Bhattacharyya系数(巴氏系数)
BC(p,q) = ∫√p(x)q(x)dx
0≤BC≤1q且0≤DB≤∞
两种情形中,巴氏距离DB均不满足三角不等式
计算巴氏系数涉及到对该两个样本的重叠部分进行基本形式的积分。两个样本值的积分被分成指定数目的部分。而每一个样本的每一个部分的成员数被用于下式中:
Bhattacharyya = ∑{i=1|n}√(∑ai·∑bi)
其中,a,b为两个样本,n是分块数,ai, bi分别是在a, b中第i部分的成员数。
这样一来,这个式子就会随着因某块中有两个样本的公共成员而变大,也会随着某块中有一大片重叠的样本成员而变大。分块数的选定依赖于样本中的成员数量;如果分块太少会因过估了重叠区域而失去精确性,如果分块太多会因为造成空块而失去精确性。
如果两个样本完全没有重叠,巴氏系数将会等于0,因为每一个分块都将被0乘。这意味着完全分离的样本不能被巴氏系数单独测定出来。
0≤BC≤1q且0≤DB≤∞
-连续概率分布
在连续情形中,Bhattacharyya系数如下定义:
从函数中可以看出,计算相似度的函数likelihood()中去调用了histo_dist_sq(),也就是在此函数中区进行巴氏距离的一部分运行,然后返回回来一个值d_sq。最后完成相似度的计算。返回。
在统计学中,Bhattacharyya距离(以下称巴氏距离)测量的是两个离散或连续概率分布的相似性。计算方式和Bhattacharyya系数关系很密切。两种计算方式都以A. Bhattacharyya名字命名,Bhattacharyya是一位30年代在印度统计研究所工作的统计学家。巴氏系数可用来对两组样本的相关性进行测量。这一方法常用来作分类器算法。
数学定义
离散概率分布
对于在X数域上的两个离散概率分布p和q,巴氏距离定义为[2]:
DB(p,q) = -ln(BC(p,q))
其中
BC(p,q) = ∑√p(x)q(x)
BC被称作Bhattacharyya系数(巴氏系数)
BC(p,q) = ∫√p(x)q(x)dx
0≤BC≤1q且0≤DB≤∞
两种情形中,巴氏距离DB均不满足三角不等式
计算巴氏系数涉及到对该两个样本的重叠部分进行基本形式的积分。两个样本值的积分被分成指定数目的部分。而每一个样本的每一个部分的成员数被用于下式中:
Bhattacharyya = ∑{i=1|n}√(∑ai·∑bi)
其中,a,b为两个样本,n是分块数,ai, bi分别是在a, b中第i部分的成员数。
这样一来,这个式子就会随着因某块中有两个样本的公共成员而变大,也会随着某块中有一大片重叠的样本成员而变大。分块数的选定依赖于样本中的成员数量;如果分块太少会因过估了重叠区域而失去精确性,如果分块太多会因为造成空块而失去精确性。
如果两个样本完全没有重叠,巴氏系数将会等于0,因为每一个分块都将被0乘。这意味着完全分离的样本不能被巴氏系数单独测定出来。
0≤BC≤1q且0≤DB≤∞
-连续概率分布
在连续情形中,Bhattacharyya系数如下定义:
Bhattacharyya系数
Bhattacharyya系数[3](Bhattacharyya Coefficient, 巴氏系数)是对两个统计样本的重叠量的近似计算。巴氏系数可用来对两组样本的相关性进行测量。计算巴氏系数涉及到对该两个样本的重叠部分进行基本形式的积分。两个样本值的积分被分成指定数目的部分。而每一个样本的每一个部分的成员数被用于下式中:
Bhattacharyya = ∑{i=1|n}√(∑ai·∑bi)
其中,a,b为两个样本,n是分块数,ai, bi分别是在a, b中第i部分的成员数。 这样一来,这个式子就会随着因某块中有两个样本的公共成员而变大,也会随着某块中有一大片重叠的样本成员而变大。分块数的选定依赖于样本中的成员数量;如果分块太少会因过估了重叠区域而失去精确性,如果分块太多会因为造成空块而失去精确性。 如果两个样本完全没有重叠,巴氏系数将会等于0,因为每一个分块都将被0乘。这意味着完全分离的样本不能被巴氏系数单独测定出来。
/* Computes squared distance metric based on the Battacharyya similarity coefficient between histograms. @param h1 first histogram; should be normalized @param h2 second histogram; should be normalized @return Returns a squared distance based on the Battacharyya similarity coefficient between \a h1 and \a h2 */ float histo_dist_sq( histogram* h1, histogram* h2 ) { float* hist1, * hist2; float sum = 0; int i, n; n = h1->n; hist1 = h1->histo; hist2 = h2->histo; /* According the the Battacharyya similarity coefficient, D = \sqrt{ 1 - \sum_1^n{ \sqrt{ h_1(i) * h_2(i) } } } */ for( i = 0; i < n; i++ ) sum += sqrt( hist1[i]*hist2[i] ); return 1.0 - sum; }
/* Computes the likelihood of there being a player at a given location in an image @param img image that has been converted to HSV colorspace using bgr2hsv() @param r row location of center of window around which to compute likelihood @param c col location of center of window around which to compute likelihood @param w width of region over which to compute likelihood @param h height of region over which to compute likelihood @param ref_histo reference histogram for a player; must have been normalized with normalize_histogram() @return Returns the likelihood of there being a player at location (\a r, \a c) in \a img */ float likelihood( IplImage* img, int r, int c, int w, int h, histogram* ref_histo ) { IplImage* tmp; histogram* histo; float d_sq; /* extract region around (r,c) and compute and normalize its histogram */ cvSetImageROI( img, cvRect( c - w / 2, r - h / 2, w, h ) ); tmp = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 3 ); cvCopy( img, tmp, NULL ); cvResetImageROI( img ); histo = calc_histogram( &tmp, 1 ); cvReleaseImage( &tmp ); normalize_histogram( histo ); /* compute likelihood as e^{\lambda D^2(h, h^*)} */ d_sq = histo_dist_sq( histo, ref_histo ); free( histo ); return exp( -LAMBDA * d_sq ); }
从函数中可以看出,计算相似度的函数likelihood()中去调用了histo_dist_sq(),也就是在此函数中区进行巴氏距离的一部分运行,然后返回回来一个值d_sq。最后完成相似度的计算。返回。
相关文章推荐
- 粒子滤波器之建立选定区域直方图(histo_bin())
- 图像相似度(测试)--基于直方图特征的图像搜索
- 直方图比较图像,相似度小于5时重名名
- 【练习7.4】使用直方图陆地移动距离EMD区分不同光线条件下的图片cvCalcEMD2
- 第二次433M无线距离测试
- 海量数据相似度计算之simhash和海明距离
- [经典算法] 字符串相似度-编辑距离
- 基于陆地移动距离(EMD)的彩色图像直方图距离计算
- 《编程之美》- 3.3 - 计算字符串相似度 即 最小编辑距离问题
- 字符串距离-相似度
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- postgresql 关于geo 按距离排序返回 性能测试
- RGB HSV 颜色空间 颜色距离 颜色相似度
- similarity 字符串编辑距离相似度匹配
- 计算图像的梯度及梯度直方图相似度(Matlab代码)
- 相似度属性之距离
- 海量数据相似度计算之simhash和海明距离
- 距离和相似度度量
- Android OpenGL ES 2.0 开启了深度测试但是在一定距离还是呈现透明状态
- 相似度算法——Levenshtein(编辑距离)