压缩跟踪(CT)代码详细学习_模块2(特征的提取和计算)

    这个部分学习的是得到样本以后,如何进行Haar-like特征的提取和计算。详细的看注释吧。有问题我们讨论下吧(我初学者,以前学硬件的)。

// 图像的特征处理相关函数头文件

#pragma once

#include 
#include 

using namespace std;
using namespace cv;

class FeatureHandle
{
public:
	FeatureHandle(void);
	~FeatureHandle(void);
	int featureMinNum;//每一个haar-like特征中含有的矩形框最少数目
	int featureMaxNum;//最多数目
	int featureNum;//每个patch块的haar-like特征的总数, 也就是弱分类器个数???
	vector> features;//特征,使用一个向量来存储的,向量里面也是向量,每一个向量里面是矩形框
	vector> featuresWeight;

	void haarFeature(Rect& _objectPatch, int _featureNum);
	void getFeatureValue(Mat& _imageIntegral, vector& _sampleBox, Mat& _sampleFeatureValue);
};

//这是计算出图像特征的函数
#include "FeatureHandle.h"
#include 
#include

 FeatureHandle::FeatureHandle()
{
	int featureMinNum=2;
	int featureMaxNum=4;
	int featureNum=50;
}
 FeatureHandle::~FeatureHandle()
{
}
void FeatureHandle::haarFeature(Rect& _objectPatch, int _featureNum)//_featureNum形参,实验中就是featureNum,50
	// _objectPatch是待处理的patch块,类型是 Rect
{
	features=vector>(_featureNum,vector());//指定特征中的个数 50
	featuresWeight=vector>(_featureNum, vector());
	//接下来要做的就是将Rect放入到这个特征向量中,所以我们要定义Rect型的数据
	Rect rectTemp;//矩形框有xy坐标以及height,width的属性
	float weightTemp;
	//同时我们在2到3之间随机的产生每一个haar-like特征中的矩形的个数
	int numRect;

	for (int i=0; i<_featureNum; i++)
	{
		RNG rng;//随机数生成器
		//产生1到3之间的随机整数。
		numRect=cvFloor(rng.uniform((double)featureMinNum,(double)featureMaxNum));
		for(int j=0; j& _sampleRect, Mat& _sampleFeatureValue)
	// 其中的 _imageIntegral是图片的积分图的值,通过函数integral(_frame, _imageIntegral, CV_32F);这里为了减少输入,未将它写入
{
	int sampleRectSize= _sampleRect.size();//得到样本的个数
	_sampleFeatureValue.create(featureNum, sampleRectSize,CV_32F );//_sampleFeatureValue的数据类型是cvMat,这里构造的是一个
	//featureNum*sampleRectSize的矩阵,     通过_sampleFeatureValue.at(i, j)对里面的元素进行操作。
	float tempValue;//用来暂时保存计算出来的haar-like特征的值。

	int xMin;//样本的特征矩形框的左上角和右下角的点的坐标
	int xMax;
	int yMin;
	int yMax;

	for( int i=0; i(xMin,yMin) 
					+ _imageIntegral.at(xMax,yMax) -_imageIntegral.at(xMin,yMax)
					- _imageIntegral.at(xMax,yMin));//通过积分图像计算出矩形框内的加权的灰度值
			}
			_sampleFeatureValue.at (i,j) = tempValue;//存储数据
		}
	}
	
}



你可能感兴趣的:(tracking,machine,learning,C++)