核密度函数加权直方图的计算

在本篇博客中,我将与众位看官分享我自己写的关于用核密度函数加权的直方图的计算

欢饮批评指正!!!

核密度函数加权直方图在基于Mean shift的跟踪算法中经常用到。请客官查看我的博客:

样本均值漂移的原理 Mean Shift 原理

常用的核密度函数有

EpanechnikovKernal:

核密度函数加权直方图的计算_第1张图片


在Mean Shift的迭代过程中用的是上述两个函数的截面函数:

核密度函数加权直方图的计算_第2张图片

下面是这两个函数(4)和(5)的程序实现:


下面是调用上述核函数实现的一维加权直方图统计函数 
该函数中的最后一个参数是函数指针类型的参数,用于指定到底用哪个核函数
KernalFunc的定义如下:
//定义一个核函数指针,该函数指针可以指向任意一个符合参数标准的核函数
typedef float (*KernalFunc)(Point2f& center,Point2f& xy,int hx,int hy);


下面是测试上述各个小函数的主函数:

说明:在主函数中,计算了三种不同的一维直方图。

一种是非加权直方图,它的计算函数可以参见我的博客:自己编写的直方图函数

第二种是Epanikov 核函数加权的直方图

第三种是Gaussian核函数加权的直方图

主函数: 


实验结果:

核密度函数加权直方图的计算_第3张图片

上图显示了对美女脸部图像的加权直方图的统计结果(实际计算的时候是在灰度图像上计算的),

红色曲线是未加权直方图,它的中间部分有一个小高突起,是因为美女的脸部灰度值在100到150区间内,

蓝色曲线是高斯加权直方图的结果,可以看到中间的小峰比红色曲线高,这是由于用高斯函数进行了加权,把脸部中间的直方图bin的灰度频率值提高了

绿色曲线是Epanechikov核函数的加权结果,可以看到中间的小峰比蓝色曲线还要高,这是因为Epanechikov核函数比高斯核函数在中心区域更加陡峭所致,所以加权效果也比高斯函数要大的多




你可能感兴趣的:(opencv,直方图,calcHist)