You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

329 lines
11 KiB

#pragma once
#ifndef _GLOBAL_MACRO_H_
#define _GLOBAL_MACRO_H_
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
////////////////////////////////////////////////////////////////////////////////
//数据类型重命名
////////////////////////////////////////////////////////////////////////////////
typedef bool BBOOL;
typedef unsigned char UBYTE8;
//typedef char BYTE8;
typedef unsigned short UINT16;
typedef short SINT16;
typedef unsigned int UINT32;
typedef int SINT32;
typedef unsigned long COLORREF;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned char BYTE;
typedef float FLOAT32;
typedef double DOUBLE64;
typedef long double LDOUBLE80;
typedef unsigned char PIXELTYPE_TV; //8位数据
typedef unsigned char PIXELTYPE_RGB; //8位数据
#if 0
typedef unsigned short PIXELTYPE; //16位wu符号数据
#endif
typedef short PIXELTYPE_Y; //16位符号数据
typedef SINT32 PIXELDISP;
typedef short POS16S;
typedef float POS32F;
typedef short WH16S;
typedef float WH32F;
// typedef bool BOOL;
////////////////////////////////////////////////////////////////////////////////
//--宏定义
////////////////////////////////////////////////////////////////////////////////
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//全局使用
#define TRUE 1 //真1
#define FALSE 0 //假0
#define PI 3.14159265f //圆周率
#define EPSILON 0.0001f //浮点数精度
// #define MIN(a, b) ((a) < (b) ? (a) : (b)) //取a、b两者中的最小值
// #define MAX(a, b) ((a) > (b) ? (a) : (b)) //取a、b两者中的最大值
#define MINMAX_VAR(a, b, c) MAX(MIN(b, c), MIN(a, MAX(b, c))) //取a、b、c三者中位于中间大小的值即非最大值亦非最小值
#define MINMAX_NUM(a, b, c) MAX(b, MIN(a, c)) //当b<=c时将a限制在b和C之间当b>c时取b
//#define ABS(x) ((x) < 0 ? -(x) : (x)) //取x的绝对值
#define ROUND(x) ((SINT32)((x) - ((x)>=0?0:1) + 0.5f)) //取整 - 对x四舍五入取整
#define FLOOR(a) (SINT32)(a) //取整 - 小数位截断
#define WIDTHBITS(width) ((width * 24 + 31) / 32 * 4) //PC平台中求图像每行的bit数
//#define WIDTHBITS(width) ((SINT32)(width / 4) + 1) //DSP平台中求图像每行的bit数=有效图像宽度/4+1因为四个像素一个32位两边增加了4个黑点
// #define RGB(r, g, b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))) //设置RGB颜色值
#define GetRVALUE(rgb) ((SINT32)(rgb)) //取RGB颜色值中r通道值
#define PI2 6.2831853f //2*pi
#define GLB_IMG_WIDTH_TV 1920
#define GLB_IMG_HEIGHT_TV 1280
#define GLB_IMG_WIDTH_IR 1280
#define GLB_IMG_HEIGHT_IR 1024
#define DETECT_MAX_NUM 5
#define DYT_STATUS_TURNONINIT 0 //DYT上电初始化/退出跟踪初始化
#define DYT_STATUS_SEARCH 1 //DYT搜索阶段
#define DYT_STATUS_STARE 2 //DYT初次截获锁定跟踪器初始化
#define DYT_STATUS_TRACK 3 //DYT跟踪阶段
#define DYT_STATUS_LOST 4 //DYT跟踪丢失阶段
#define DYT_STATUS_RESTARE 5 //DYT十字光标锁定截获
#define DYT_STATUS_MEMORY 6 //DYT记忆跟踪阶段
#define DYT_STATUS_BLINDLOST 7 //DYT盲区丢失阶段
#define DYT_STATUS_STABILIZE 8 //DYT稳像阶段二次截获状态
#define DYT_STATUS_VSTRACK 9 //DYT跟踪器指向阶段
#define DYT_STATUS_LOCKMOVE 10 //DYT拖动状态
#define TRACK_CLEAR 0 //清零指令
#define TRACK_INIT 1 //初始化指令
#define TRACK_TRACK 2 //跟踪指令
#define MANMADEMODE_BRFOREPK 11 //人工截获,射前给宽高中心点
#define MANMADEMODE_AFTERPK 12 //人工截获,射后给中心点位置
#define MANMADEMODE_SUSTARGET 13 //手动截获模式,疑似目标通过按键锁定(射前射后一样流程,合并)
#define CATCHMODE_INIT 0 //截获方式初始化
#define CATCHMODE_AI 1 //AI识别截获
#define CATCHMODE_TEMPLET 2 //模板匹配截获
#define CATCHMODE_MOTION 3 //运动目标检测截获
#define CATCHMODE_AIPLUSMOTION 4 //AI+运动目标检测截获
#define CATCHMODE_LASER 5 //激光锁定
#define CATCHMODE_AIPLUSLASER 6 //AI+激光复合模式,激光信息引导分选截获
#define CATCHMODE_TEMPLETPLUSLASER 7 //匹配+激光复合模式,激光信息引导分选截获
#define CATCHMODE_MOTIONPLUSLASER 8 //运动目标+激光复合模式,激光信息引导分选截获
#define CATCHMODE_NON 9 //解锁
#define CATCHMODE_WAIT 10 //等待状态
#define CONFIRM_TRACKS 5//确认模块存储结果最大数量
#define KCF_Track 1 //KCF跟踪算法标志量
#define Other_Track 2 //其他跟踪算法标志量
#if 0
//定义目标宽高结构体--浮点型
typedef struct tagSize32F //BYTES: 3*4=12
{
FLOAT32 w; //宽度
FLOAT32 h; //高度
FLOAT32 s; //面积
}SIZE32F;
////定义距离结构体--浮点型
//typedef struct tagDist32F //BYTES: 2*4=8
//{
// FLOAT32 dx; //x方向距离
// FLOAT32 dy; //y方向距离
//}DIST32F;
typedef struct tagPOINT16S
{
SINT16 x; //图像像素x坐标
SINT16 y; //图像像素y坐标
}POINT16S;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//定义矩形结构体--中心点坐标及宽高、大小-整型32位
typedef struct tagCENTERRECT32S //BYTES: 4*4=16
{
SINT32 cx; //中心点x坐标
SINT32 cy; //中心点y坐标
SINT32 w; //矩形宽度
SINT32 h; //矩形高度
}CENTERRECT32S;
//定义矩形结构体--中心点坐标及宽高、大小-浮点型
typedef struct tagCENTERRECT32F //BYTES: 4*4=16
{
FLOAT32 cx; //中心点x坐标
FLOAT32 cy; //中心点y坐标
FLOAT32 w; //矩形宽度
FLOAT32 h; //矩形高度
}CENTERRECT32F;
//定义矩形结构体--左上角及右下角坐标-浮点型
typedef struct tagMINMAXRECT32F //BYTES: 4*4=16
{
FLOAT32 minX; //左上点x坐标
FLOAT32 minY; //左上点y坐标
FLOAT32 maxX; //右下点x坐标
FLOAT32 maxY; //右下点y坐标
}MINMAXRECT32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//仿射变换参数
struct WarpsPara{
FLOAT32 angle;
FLOAT32 scale;
FLOAT32 shift;
FLOAT32 noise;
SINT32 num_closest;
SINT32 num_warps;
};
typedef struct tagMINMAXRECT
{
SINT32 maxX; //左上点
SINT32 maxY;
SINT32 minX;
SINT32 minY;
}MINMAXRECT;
#endif
//定义目标宽高结构体--16位 //BYTES: 2*2 + 1*4=8
typedef struct tagSize16S
{
SINT16 w; //宽度
SINT16 h; //高度
SINT32 s; //面积
}SIZE16S;
//定义目标宽高结构体--32位 //BYTES: 3*4=12
typedef struct tagSize32S
{
SINT32 w; //宽度
SINT32 h; //高度
SINT32 s; //面积
}SIZE32S;
//定义矩形结构体--左上角坐标及宽高--整型32位
typedef struct tagRect32S //BYTES: 4*4=16
{
SINT32 x; //左上点x坐标
SINT32 y; //左上点y坐标
SINT32 w; //矩形宽度
SINT32 h; //矩形高度
SINT32 iFrameIdx;
}RECT32S;
//定义矩形结构体--左上角坐标及宽高--浮点型
typedef struct tagRect32F //BYTES: 4*4=16
{
FLOAT32 x; //左上点x坐标
FLOAT32 y; //左上点y坐标
FLOAT32 w; //矩形宽度
FLOAT32 h; //矩形高度
FLOAT32 cx;
FLOAT32 cy;
SINT32 iFrameIdx;
}RECT32F;
//定义坐标结构体--整型32位 //BYTES: 2*4=8
typedef struct tagPoint32S
{
SINT32 x; //图像像素x坐标
SINT32 y; //图像像素y坐标
}POINT32S;
//定义坐标结构体--浮点型
typedef struct tagPoint32F //BYTES: 2*4=8
{
FLOAT32 x; //图像像素x坐标
FLOAT32 y; //图像像素y坐标
}POINT32F;
// kcf参数结构体
typedef struct tagKcfPara // 16 + 4*19 = 92B
{
RECT32F rfBox; //跟踪框
FLOAT32 lamda; //正则项
FLOAT32 padding; //区域扩展系数
FLOAT32 output_sigma_factor; //
FLOAT32 interp_factor; //更新系数
FLOAT32 scale_step; //尺度因子
SINT32 template_size; //模板尺寸
SINT32 cell_size; //hog cell size
FLOAT32 scale; //跟踪框与tempsize的比例
SIZE32S tempsize;
SINT32 cellnumX; //tempsize对应的cell数
SINT32 cellnumY;
SINT32 featureSizeX; //特征数组宽
SINT32 featureSizeY; //特征数组高
SINT32 featureSizeZ; //特征数组通道数
SINT32 fftSizeX; //fft变换尺寸2幂次方
SINT32 fftSizeY;
BBOOL b_kcfTerminator;//true表示无梯度
}KcfPara;
typedef struct
{
FLOAT32 SNR;
FLOAT32 fCendist;
RECT32S areaRect;
FLOAT32 fScore;
BBOOL isBright;
FLOAT32 fGradMeanX;
FLOAT32 fGradMeanY;
PIXELTYPE_TV g_bCandiSegBin[40000];
FLOAT32 ObjMean;
FLOAT32 BackgroundMean;
UINT16 iExistCnt;
}CANDITARINFO;
//定义矩形结构体--左上角及右下角坐标-整型32位
typedef struct tagMINMAXRECT32S //BYTES: 4*4=16
{
SINT32 minX; //左上点x坐标
SINT32 minY; //左上点y坐标
SINT32 maxX; //右下点x坐标
SINT32 maxY; //右下点y坐标
}MINMAXRECT32S;
typedef struct
{
RECT32S tararea;
UINT32 unObjPxlsCnt; //目标的象素点的个数
FLOAT32 diff_W;
FLOAT32 diff_H;
FLOAT32 diff_WH;
FLOAT32 Value;
FLOAT32 snr;
POINT32F centerpoint;
FLOAT32 centerdis;
MINMAXRECT32S mrnRect; //目标上下左右边界坐标
SIZE16S snSize; //目标宽高
FLOAT32 ObjMean;//目标均值
FLOAT32 BackgroundMean;//目标均值
FLOAT32 fObjGradMean;//目标边缘梯度均值
FLOAT32 Euc;//目标离锁定的点的距离
FLOAT32 ObjBkCon;//目标背景差
FLOAT32 contrast[4];//目标四个方向对比度
FLOAT32 SNR;
BBOOL isBright;//目标亮暗判断
BBOOL AloneFlag;//Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>
BBOOL isTarGetFlag;
UBYTE8 ubMaxSaliency;
FLOAT32 grad4Neibor[2];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>Ե<EFBFBD><D4B5>ȡ yy20200430
}TARINFORMATION;
#endif