📄 global.h
字号:
#ifndef GLOBAL_H
#define GLOBAL_H 1
#define MAX3(A,B,C) (((A)>=(B))?(A):(B))>=(C)?(((A)>=(B))?(A):(B)):(C)
#define MIN3(A,B,C) (((A)>=(B))?(B):(A))>=(C)?(C):(((A)>=(B))?(B):(A))
typedef enum
{
ALL_RIGHT,
NO_FACE_FOUND_ERR,
NO_IRIS_FOUND_ERR,
NOSE_FOUND_ERR,
MEM_ERR,
OPEN_FILE_ERR,
OTHER_ERR
} ERROR_TYPE_ENUM;
#define POSENUMBER 4
#define FRONTAL 0
#define LEFT 1
#define RIGHT 2
#define UP 3
#define DOWN 4
#define LEFTUP 5
#define RIGHTUP 6
#define LEFTDOWN 7
#define RIGHTDOWN 8
#define SUBHEIGHT 64 //32
#define SUBWIDTH 64 //32
#define EYEWIDTH 72 //the width of the eye region
#define EYEHEIGHT 32 //the height of the eye region
#define STARTX 0 //the cx value of display position
#define STARTY 0 //the cy value of display position
#define SCROLLWIDTH 800 //the initial width of the view
#define SCROLLHEIGHT 640 //the initial height of the view
#define DETECTTRAINSIZE 80 //训练生成检测用的特征脸的脸库大小
#define DETECTWIDTH 32 //训练生成检测用的特征脸人脸宽度
#define DETECTHEIGHT 32 //训练生成检测用的特征脸人脸高度
#define DETECTEFNUM 14 //检测用特征脸数
#define RECOGTRAINSIZE 600 //400 //500 //训练生成识别用的特征脸的脸库大小
#define RECOGWIDTH 64 //已知人脸库中的人脸大小
#define RECOGHEIGHT 64 //已知人脸库中的人脸大小
#define FACEBASESIZE 300//400 //210 //人脸库大小
#define RECOGEFNUM 32 //识别用特征脸数
#define EPS 0.0000000000001
#define COEF 0.9
#define TSSIZE 180
#define HFCNUM 64
#define WIDTH 64
#define HEIGHT 64
//////From fxtFaceDetect.h//////
#define BORDER 9
#define DEFAULTSTART 30
#define DEFAULTEND 150//80 98.6.10
#define DEFAULTSTEP 10 //20 98.6.10
#define WH 320
#define HH 240
#define VP 25L
#define VN 30L
#define IMN 300
#define VLEN1 116L
#define VLEN2 136L
#define VLEN3 116L
#define INPUT_SIZE 14
/////////////////from xlchen's canny algorithm
// scales angles in radians to fit within the 0-255 range of unsigned char variables
#define ORIENT_SCALE 40.0
#define MAX_FILTER_WIDTH 60
#define uchar unsigned char
//////////////////////////////////////
/////////fxtfacedetect.h///////
BOOL ReadInFaceMask();
void ShrinkImage(BYTE *scrImage, BYTE* destImage, WORD w, WORD h, float cscale);
void ShrinkImage(BYTE *scrImage, BYTE* destImage, WORD scrW, WORD scrH,WORD destW, WORD destH);
void MagnifyImage(BYTE *scrImage, BYTE* destImage, WORD scrW, WORD scrH,WORD destW, WORD destH);
void CalEgvalue(double *matrix,long n,double *eigenvalue,double *c);
DWORD CalEgvector(double *matrix,long n,double *eigenvalue,double *c,double eps);
double NormalVector(double* vector, DWORD N);
double InnerProduct(double* p1,double* p2, DWORD N);
void OrderValues(double* ev, WORD* order, WORD M);
void NewOrder(double* ev, WORD* order, WORD* No, WORD M);
double EuclidDistance(double* pv1, double* pv2, DWORD Length);
double PointDistance(CPoint p1, CPoint p2);
double Project(CPtrArray* pfaEF, double* pMeanFace, BYTE* pImageData,
double* pProjecVector, DWORD dwImageSize, WORD wEigenFaceNum);
BOOL RevertImage(CPtrArray* pfaEF, double* pMeanFace, BYTE* pImageData,
double* project, DWORD dwImageSize, WORD wEigenFaceNum);
double DistanceFromFaceSpace(CPtrArray* pfaEF, double* pMeanFace, BYTE* pImageData,
DWORD dwImageSize, WORD wEigenFaceNum);
void GetSubImageData(BYTE* scrImgData, BYTE* destImgData, WORD scrW, WORD scrH,
CPoint start,CSize size);
void GetHisName(CString filename, CString& HisName);
BOOL IsSamePeople(CString s1, CString s2);
bool RGB2HSI(BYTE R, BYTE G, BYTE B, WORD& H, float& S, float& I);
BOOL RGB2YIQ(BYTE R, BYTE G, BYTE B, BYTE & Y, float & I, float & Q);
BOOL RGB2Fai(BYTE R, BYTE G, BYTE B, int& Fai);
BYTE RGB2I(BYTE R, BYTE G, BYTE B);
int RGB2Fai(BYTE R, BYTE G, BYTE B);
void global_DoRotation(BYTE * inImg,BYTE* outImg,int outImgWidth,int outImgHeight,int rx,int ry,int rsize,int rangle);
void global_DoRotation2(BYTE * inImg,int inImgWidth,int inImgHeight,BYTE* outImg,int outImgWidth,int outImgHeight,int rx,int ry,int rsize,int rangle);
void global_DoRotation3(BYTE * inImg,int inImgWidth,int inImgHeight,BYTE* outImg,int outImgWidth,int outImgHeight,int rx,int ry,int rsize,int rangle);
double arctg(double x,double y);
//void RGB2HSV(float,float,float,float,float,float);
float RGB2HSV(BYTE,BYTE,BYTE,BOOL);
void gConvert(BYTE *InData,BYTE *OutData,int FaiMin,int FaiMax,int fIMin,int fIMax,DWORD dwSize);
CPoint gXPosAndMu(int *XData,int XSize);
void gOneDimensionErrosion(int *XData,int XSize);
template <class T>
BOOL NormDistParaEsti( T* data, int n, T& mu, T& delta)
{
int i;
double u, d;
u = 0.0;
for(i=0; i<n; i++)
u += (double)data[ i ];
u /= n;
d = 0.0;
for(i=0; i<n; i++)
d += (double) (u - data[ i ]) * (u - data[ i ]);
d /= double( n );
d = double( sqrt(d) );
mu = T( u );
delta = T( d );
return TRUE;
}
template <class T>
void VectorDivideScalor(T* v, T s, int n)
{
for(int i=0; i<n; i++)
v[i] /= s;
}
template <class T>
void AddVector(T* v1, T* v2, int n)
{
for(int i=0; i<n; i++)
v1[i] += v2[i];
}
template <class T>
void AddVector(T* dv, T* sv1, T* sv2, int n)
{
for(int i=0; i<n; i++)
dv[i] = sv1[i] + sv2[i];
}
template <class T>
void SubstractVector(T* dv, T* sv1, T* sv2, int n)
{
for(int i=0; i<n; i++)
dv[i] = sv1[i] - sv2[i];
}
template <class T>
void AccSqrSubVector(T* dv, T* sv1, T* sv2, int n)
{
for(int i=0; i<n; i++)
dv[i] += T((sv1[i] - sv2[i]) * (sv1[i] - sv2[i]));
}
/////////////xlchen's canny//////////////
double Gaussian(double x, double s);
double hypotenuse(double x, double y);
void ThresholdingTracker(int high, int low, int Width, int Height,
uchar *Img, uchar *EdgeIntensity, uchar *EdgeDir);
int follow(int i, int j, int low, int Width, int Height, uchar *Img,
uchar *EdgeIntensity, uchar *EdgeDir);
void CannyEdge(double Sigma, int Width, int Height, uchar *Img,
uchar *PotentialEdge, uchar *EdgeIntensity, uchar *EdgeDir);
/////////////zhm's FindMaxPosition of an array//////////////
int FindMaxPosition(int *Data,int Size);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -