-
Notifications
You must be signed in to change notification settings - Fork 5
/
LTDP.h
77 lines (65 loc) · 2.73 KB
/
LTDP.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef LTDP_h
#define LTDP_h
#include "opencvHeader.h"
#include <opencv2/ml.hpp>
#include <iostream>
#include <string>
#include <vector>
#include <opencv2/ml.hpp>
#include "Algorithm.hpp"
//using namespace cv;
using namespace std;
class LTDP :public DetectionAlgorithm
{
public:
LTDP():featurelenblock(118)
{
setDefaultParams();
cal_params();
}
LTDP(cv::Size _winSize, cv::Size _blockSize,int _pthreshold=120)
:winSize(_winSize), blockSize(blockSize),pthreshold(_pthreshold),featurelenblock(118)
{
cal_params();
}
virtual int getFeatureLen()const { return featurelen; }
virtual void compute(const cv::Mat& img, vector<float>& features)const;
virtual void setSvmDetector(const cv::Ptr<cv::ml::SVM>& _svm);
virtual void loadSvmDetector(const string& xmlfile);
virtual void detect(const cv::Mat& img, vector<cv::Point>& foundlocations,
vector<double>& weights, double hitThreshold = 0, cv::Size winStride = cv::Size(), const vector<cv::Point>& locations = vector<cv::Point>())const;
virtual void detectMultiScale(const cv::Mat& img, vector<cv::Rect>& foundlocations, vector<double>& weights, double hitThreshold = 0,
cv::Size winStride = cv::Size(), double nlevels = 64, double scale0 = 1.1, double finalThreshold = 2.0, bool usemeanshift = false)const;
virtual void detect(const cv::Mat& img, vector<cv::Point>& foundLocations, double hitThreshold = 0, cv::Size winStride = cv::Size(),
const vector<cv::Point>& locations = vector<cv::Point>()) const;
virtual void detectMultiScale(const cv::Mat& img, vector<cv::Rect>& foundlocations, double hitThreshold = 0, cv::Size winStride = cv::Size(),
double nlevels = 64, double scale0 = 1.1, double finalThreshold = 2.0, bool usemeanshift = false)const;
virtual void set_signThreshold(const int _pthreshold) { pthreshold = _pthreshold; }
virtual ~LTDP() { masks.clear(); ltdpsvm.release();}
public:
cv::Size blockSize;
cv::Size winSize;
private:
int numBlockR;
int numBlockC;
int featurelen;
int numBlockPerWin;
const int featurelenblock;
vector<cv::Mat> masks;
int pthreshold;
cv::Mat lookUpTable;
cv::Mat lookUpTable2;
cv::Ptr<cv::ml::SVM> ltdpsvm;
//vector<float> svmvec;
//double rho;
private:
void setDefaultParams();
void cal_params();
void compute_Ltpvalue(const cv::Mat& src, cv::Mat& ltpimgpos,cv::Mat& ltpimgneg)const;
void compute_histblock(const cv::Mat& ltppos, const cv::Mat& ltpneg, float* feature)const;
void compute_histwin(const cv::Mat& ltppos, const cv::Mat& ltpneg, vector<float>& features)const;
void groupRectangles(vector<cv::Rect>& rectList, vector<double>& weights, int groupThreshold, double eps) const;
void compute_Ltpimg(const cv::Mat& src, cv::Mat& uniformp, cv::Mat& uniformn)const;
void normalizeBlockHistogram(float* blockhist)const;
};
#endif