icvPrecalculate
来源:互联网 发布:简单的c语言程序文件 编辑:程序博客网 时间:2024/05/29 06:36
/* *icvPrecalculate *作用:计算特征值,并排序 *具体来说也就是根据训练样本信息和haar特征信息,在函数内部引用icvGetTrainingDataCallback来 *分批计算正负样本的前numprecalated个haar特征值,并把计算好的特征值进行排序,最后结果存储在data->valcache之中 */staticvoid icvPrecalculate( CvHaarTrainingData* data, //训练样本信息 CvIntHaarFeatures* haarFeatures, //haar特征信息 int numprecalculated ) //预计算特征个数{ CV_FUNCNAME( "icvPrecalculate" ); __BEGIN__; icvReleaseHaarTrainingDataCache( &data ); numprecalculated -= numprecalculated % CV_STUMP_TRAIN_PORTION; numprecalculated = MIN( numprecalculated, haarFeatures->count ); if( numprecalculated > 0 ) { //size_t datasize; int m; CvUserdata userdata; /* private variables */ #ifdef CV_OPENMP CvMat t_data; CvMat t_idx; int first; int t_portion; int portion = CV_STUMP_TRAIN_PORTION; //每批计算特征的数量 #endif /* CV_OPENMP */ m = data->sum.rows; //确定样本总数量,正负样本数之和#ifdef CV_COL_ARRANGEMENT CV_CALL( data->valcache = cvCreateMat( numprecalculated, m, CV_32FC1 ) ); //下面这三组代码是给data->valcache和data->idxcache分配内存#else CV_CALL( data->valcache = cvCreateMat( m, numprecalculated, CV_32FC1 ) );#endif CV_CALL( data->idxcache = cvCreateMat( numprecalculated, m, CV_IDX_MAT_TYPE ) ); userdata = cvUserdata( data, haarFeatures ); #ifdef CV_OPENMP #pragma omp parallel for private(t_data, t_idx, first, t_portion) for( first = 0; first < numprecalculated; first += portion ) { t_data = *data->valcache; t_idx = *data->idxcache; t_portion = MIN( portion, (numprecalculated - first) ); /* indices */ t_idx.rows = t_portion; //每批计算特征的个数 t_idx.data.ptr = data->idxcache->data.ptr + first * ((size_t)t_idx.step); /* feature values */#ifdef CV_COL_ARRANGEMENT t_data.rows = t_portion; t_data.data.ptr = data->valcache->data.ptr + first * ((size_t) t_data.step );#else t_data.cols = t_portion; t_data.data.ptr = data->valcache->data.ptr + first * ((size_t) CV_ELEM_SIZE( t_data.type ));#endif icvGetTrainingDataCallback( &t_data, NULL, NULL, first, t_portion, &userdata );#ifdef CV_COL_ARRANGEMENT cvGetSortedIndices( &t_data, &t_idx, 0 );#else cvGetSortedIndices( &t_data, &t_idx, 1 );#endif#ifdef CV_VERBOSE putc( '.', stderr ); fflush( stderr );#endif /* CV_VERBOSE */ }#ifdef CV_VERBOSE fprintf( stderr, "\n" ); fflush( stderr );#endif /* CV_VERBOSE */ #else icvGetTrainingDataCallback( data->valcache, NULL, NULL, 0, numprecalculated, &userdata ); //调用icvGetTrainingDataCallback函数计算特征值,把计算好的特征值存储在data->valcache中#ifdef CV_COL_ARRANGEMENT cvGetSortedIndices( data->valcache, data->idxcache, 0 ); //对计算好的特征值data->valcache进行排序,并存储在data->idxcache中#else cvGetSortedIndices( data->valcache, data->idxcache, 1 );#endif #endif /* CV_OPENMP */ } __END__;}
0 0
- icvPrecalculate
- poj解题报告——1050
- RedHat Enterprise Linux 6.4使用Centos 6 的yum源
- jQuery EasyUI 在datagrid上使用combotree 进行多选
- Android仿微信(二)——仿微信联系人 首字母分类
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- icvPrecalculate
- Redis作者:深度剖析Redis持久化
- vector内存机制和性能分析
- 分布式计算,Job和task
- 猜算式
- CCBPM中的消息机制,CCIM服务端安装说明
- LINQ使用连接(1、组连接 2、内连接 3、左外连接 4、交叉连接)
- Get the current user permission level on a list item with ecmascript
- java基础==面向对象 三大特性