CvHaarTrainingData和CvBackgroundData的区别


1 训练样本的代码CvHaarTrainingData

/* Prepared for training samples */
typedef struct CvHaarTrainingData
{
   CvSize winsize;     /* 训练图像的大小 */
   int    maxnum;      /* 训练样本的总数目,maxnum=正样本总数+负样本总数 */
   CvMat  sum;         /* 垂直积分图 */
   CvMat  tilted;      /* 旋转积分图*/
   CvMat  normfactor;  /* 标准化因子*/
   CvMat  cls;         /*正负样本类别标记,如果classes=1.0 则是正样本,如果是 0.0 则是负样本图像 */
   CvMat  weights;     /* 样本权重 */
   CvMat* valcache;    /* 样本的特征,一共有maxnum行 ,特征总数(CvIntHaarFeatures.count)个列*/
   CvMat* idxcache;    /* 对样本标号按特征值升序排序,一共有特征总数(CvIntHaarFeatures.count)个行,maxnum 个列*/
} CvHaarTrainigData;

   训练样本的内容,为了方便,我归了一下类,包括三部分:图像,积分图,特征

1.1 图像

   图像的内容有winsize,maxnum,weight和cls这四种因素

1.2   积分图

    积分图旋转和不旋转两种因素

1.3 特征

  特征包含样本的特征以及对特征的排序这两种因素

注:这三种分类是我个人的分类,仅仅是为了研究的方便。


这里我再说两个重要参数:

1.4 valcache

  valCache是设置在训练前有多少特征值被提前算出存放在内存中。内存模型如下:

1.5 idxCache

   idxCache是valCache中每种特征按特征值从小到大排列的样本的序号。内存模型如下:

1.6 idxCache和valCache

注意,在valCache中的数据是float型的,idxCache中的数据是short型的,利用idxCache数组我们可以方便按特征值的从小到大遍历valCache,这样就节省了内存空间。内存大小是通过运行程序的命令行参数设置的。这样,确定了内存大小,就可以计算每次预计算的特征个数了,如下所示:

 

<span style="font-family:SimSun;font-size:14px;">//1MB == 1048576B  计算一个样本中有多少个特征能被pre计算放在内存中
    numprecalculated = (int) ( ((size_t) mem) * ((size_t) 1048576) /
        ( ((size_t) (npos + nneg)) * (sizeof( float ) + sizeof( short )) ) );</span>



2 负样本代码CvBackgroundData

typedef struct CvBackgroundData
{
   int    count;     <span style="font-family:SimSun;">//</span>负样本的总个数
   char** filename;  <span style="font-family:SimSun;">//</span>各个负样本的<span style="font-family:SimSun;">绝对路径</span>
   int    last;
   int    round;
   CvSize winsize;   <span style="font-family:SimSun;">//</span>负样本图像的大小。可以与正样本的大小不一样
} CvBackgroundData;

3  二者区别

  CvHaarTrainingData所包含内容比较齐全,而且是既包含正样本,也包含负样本;CvBackgroundData显然是针对负样本的。


部分参考内容:

 http://www.opencvchina.com/thread-132-1-1.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值