OpenCV中Haar+Adaboost重要结构体
HaarDetectObjects_ScaleImage_Invoker(目标检测结构信息):此结构体中设计到训练和检测所用的部分结构体。其具体信息如下:
const CvHaarClassifierCascade* cascade;
int stripSize;
double factor;
Mat sum1, sqsum1, *norm1, *mask1;
Rect equRect;
std::vector<Rect>* vec;
std::vector<int>* rejectLevels;
std::vector<double>* levelWeights;
Mutex* mtx;
与Haar + Adaboost训练相关的结构体信息。
1)CvHaarClassifierCascade(Haar级联分类器)
typedef struct CvHaarClassifierCascade
{
int flags; // 标志位
int count; // 强分类器数目
CvSize orig_window_size; // 训练原始窗口大小
CvSize real_window_size; // 待检测物体的真实窗口大小
double scale; // Haar块缩放的尺度
CvHaarStageClassifier* stage_classifier; // 强分类器数组
CvHidHaarClassifierCascade* hid_cascade; // hid级联分类器,用于检测
} CvHaarClassifierCascade;
2)CvHaarStageClassifier(Haar强分类器)
typedef struct CvHaarStageClassifier
{
int count;// 强分类器中弱分类器数目
float threshold; // 强分类器阈值
CvHaarClassifier* classifier; // 弱分类器组信息
int next; // 下一个强分类器
int child;
int parent;
} CvHaarStageClassifier;
3)CvHaarClassifier(Haar弱分类器)
typedef struct CvHaarClassifier
{
int count; // 决策树中节点数目
CvHaarFeature* haar_feature; // 弱分类器特征类型,大小,种类
float* threshold; // 弱分类器阈值
int* left; // 弱分类器左子节点
int* right; // 弱分类器右子节点
float* alpha; // 弱分类器权重
} CvHaarClassifier;
4)CvHaarFeature(Haar特征)
typedef struct CvHaarFeature
{
int tilted;// 是否旋转
struct // Haar特征相关信息
{
CvRect r; // Haar特征中矩形
float weight; // Haar特征中矩形权重
} rect[CV_HAAR_FEATURE_MAX]; // Haar特征由2~3个具有权重的矩形组成
} CvHaarFeature;
5)CvRect(矩形)
typedef struct CvRect
{
int x;// 左上角横坐标
int y;// 左上角纵坐标
int width;// 矩形宽度
int height; // 矩形高度
...
} CvRect;
与Haar + Adaboost检测相关的结构体信息
1)CvHidHaarClassifierCascade(hid级联分类器)
typedef struct CvHidHaarClassifierCascade
{
int count; // 有多少个stage,即多少个stage_classifier
int isStumpBased; // 是否是决策树桩
int has_tilted_features; // 是否有旋转特征
int is_tree; // 弱分类器是否是树
double inv_window_area; // 窗口面积的倒数
CvMat sum, sqsum, tilted; // 存放积分图、积分图平方、旋转等结构体
CvHidHaarStageClassifier* stage_classifier; // 强分类器
sqsumtype *pq0, *pq1, *pq2, *pq3; // 平方和积分图中对应特征的四点
sumtype *p0, *p1, *p2, *p3; // 积分图中对应特征的四点
void** ipp_stages; // stage的首地址,保存着一系列连续的stage。每个stage中包含一系列的树,每棵树都有一系列的节点
} CvHidHaarClassifierCascade;
2)CvHidHaarStageClassifier(hid强分类器)
typedef struct CvHidHaarStageClassifier
{
int count; // 有多少个树,即多少个classifier
float threshold; // 强分类器阈值
CvHidHaarClassifier* classifier; // 分类器
int two_rects; // 矩形数(不确定)
struct CvHidHaarStageClassifier* next; // 下一个强分类器
struct CvHidHaarStageClassifier* child;
struct CvHidHaarStageClassifier* parent;
} CvHidHaarStageClassifier;
3)CvHidHaarClassifier(hid弱分类器)
typedef struct CvHidHaarClassifier
{
int count; // 有多少个树节点,即多少个node
//CvHaarFeature* orig_feature;
CvHidHaarTreeNode* node; // 弱分类器中的节点
float* alpha; // 弱分类器节点所占比重
} CvHidHaarClassifier;
3)CvHidTreeNode(hid弱分类器节点)
typedef struct CvHidHaarTreeNode
{
CvHidHaarFeature feature; // 特征
float threshold; // 判断往左还是往右的阈值,大于阈值往左,小于阈值往右
int left; // 左子树
int right; // 右子树
} CvHidHaarTreeNode;
4)CvHidHaarFeature(hid特征)
typedef struct CvHidHaarFeature
{
struct
{
sumtype *p0, *p1, *p2, *p3; // Haar特征矩形四点对应积分图
float weight; // Haar特征中小矩形所占权重
}
rect[CV_HAAR_FEATURE_MAX]; // CV_HAAR_FEATURE_MAX为3,一个CvHidHaarFeature表示一个Haar特征,即3或2个rect,以及rect相应的权重
} CvHidHaarFeature;