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.

601 lines
17 KiB

#ifndef _ARITH_COMMONDEF_
#define _ARITH_COMMONDEF_
#include <stdbool.h>
/*********版权所有C2020武汉高德红外股份有限公司***************************************
* Arith_CommonDef.h
*
*
*
*
*
* 2020/12/05
*
*****************************************************************************************/
typedef void* ArithHandle; // 算法句柄类型
// 跟踪器输入规模定义,注意栈空间
#define INPUT_OBJ_NUM (100) //外部最大输入目标个数
// 跟踪器输出规模定义
#define ST_OBJ_NUM (100) //短时目标个数
#define LT_OBJ_NUM (10) //长时跟踪目标个数
//外部系统状态(总体下发)
typedef enum tagGLB_SYS_MODE
{
GLB_SYS_WAIT = 0x01, // 空闲
GLB_SYS_STARE = 0x02, // 凝视
GLB_SYS_FSCAN = 0x03, // 扇扫
GLB_SYS_AUTO = 0x04, // 自主搜跟(无人值守)
GLB_SYS_SCAN = 0x05 // 周扫
}GLB_SYS_MODE;
// 场景模式
typedef enum tagGLB_SCEN_MODE
{
GLB_SCEN_SKY = 0x01, // 对空模式
GLB_SCEN_GROUND = 0x02, // 对地模式
GLB_SCEN_SEA = 0x03, // 对海模式
GLB_SCEN_NONE = 0x00, // 未设置
GLB_SCEN_LAB = 0x04, // 实验室靶标
GLB_SCEN_CUSTOM = 0x05 // 自定义模式:用于算法开发验证,不稳定版本 add @ 20241010
}GLB_SCEN_MODE;
// 外引导来源
typedef enum tagGLB_GUIDE_SOURCE
{
GLB_GUIDE_RADAR = 0x01, //载机雷达
GLB_GUIDE_WARNINGPLANE = 0x02 //预警机
}GLB_GUIDE_SOURCE;
// 视频源
typedef enum tagGLB_VIDEO_TYPE
{
GLB_VIDEO_IR_SW = 0x01,//红外短波
GLB_VIDEO_IR_MW = 0x02,//红外中波
GLB_VIDEO_IR_LW = 0x03,//红外长波
GLB_VIDEO_VL = 0x04 //电视
}GLB_VIDEO_TYPE;
// 红外截波段类型,用于多光谱目标识别,根据需要添加
typedef enum tagGLB_IR_BAND_TYPE
{
GLB_BAND_MW_0 = 0x020,//中波全色
GLB_BAND_MW_1 = 0x021,//中波1
GLB_BAND_MW_2 = 0x022//中波2
}GLB_IR_BAND_TYPE;
// 捕控导引阶段定义(算法内部状态)
typedef enum tagGLB_STATUS
{
GLB_STATUS_UNKOWN = 0, //捕控导引阶段 - 未知
GLB_STATUS_WAIT = 1, //捕控导引阶段 - 待命状态
GLB_STATUS_SEARCH = 2, //捕控导引阶段 - 搜索状态
GLB_STATUS_TRACK = 3, //捕控导引阶段 - 跟踪
GLB_STATUS_SCAN = 4, //捕控导引阶段 - 周扫
GLB_STATUS_LOST = 5, //捕控导引阶段 - 跟踪丢失
GLB_STATUS_FSCAN = 6, //捕控导引阶段 - 扇扫
GLB_STATUS_MOTRACK = 9, //多目标跟踪状态
GLB_STATUS_AIM = 10 //内校轴阶段
}GLB_STATUS;
// 算法标识
typedef enum tagemObjSrc
{
Arith_DST = 1,
Arith_DAT = 2,
Arith_AI = 3,
Arith_KCF = 4,
Arith_TLD = 5,
Arith_Manual = 6,
Arith_SiamRPN = 7,
Arith_NanoTrack = 8,
Arith_VitTrack = 9
}ObjSrc;
// 尺度模式
typedef enum tagSizeType
{
unKnown, //不确定目标或未识别尺寸类型
DDimTarget, //超级弱小目标
DimTarget, //弱小目标
SmallTarget, //小目标
MiddleTarget, //临界目标
AreaTarget //面目标
}SizeType;
// 灰度模式
typedef enum tagGrayType
{
BrightTarget = 1, //亮目标
DarkTarget = 2, //暗目标
AllGray = 3 //亮暗目标
}GrayType;
// 目标跟踪状态
typedef enum tagTrackingStatus
{
NOT_TRACKING = 0,//未跟踪
STABLE_TRACKING = 1,//稳跟
MEM_TRACKING = 2//记忆跟踪
}TrackingStatus;
// 遮挡事件等级判断
typedef enum tagOccLev
{
NO_OCC = 0, //无遮挡
SIM_OCC = 1,//轻微遮挡
MID_OCC = 2,//中等遮挡
FULL_OCC = 3//完全遮挡
}OccLev;
// 目标形变事件
typedef enum tagShapeTransLev
{
NO_ShapeTrans = 0,//无形变
MID_ShapeTrans = 1,//轻微形变
FULL_ShapeTrans = 2//显著形变
}ShapeTransLev;
// 跟踪事件(可包含所有跟踪期间需要特殊处理的事件
// 如强制记忆跟踪、遮挡、形变、变焦、变倍等)
typedef struct tagTrackEvent
{
OccLev occ;
ShapeTransLev shapeTrans;
}TrackEvent;
//跟踪决策事件
typedef enum tagTrackDecision
{
NO_Deci = 0, //无决策结果
KCF_Deci = 1, //KCF
AIT_Deci = 2, //AI
AID_Deci = 3, //AI识别
Predict_Deci =4 //长时预测
}TrackDecision;
// 定义红外目标类别编号
#define DT_TARGET_CLS_ID 99 //红外检测无目标区分能力赋值为99
////////////////////////////////////////////////////////////////////////////////
// 系统符号定义
////////////////////////////////////////////////////////////////////////////////
typedef bool BBOOL;
typedef unsigned char UBYTE8;
typedef signed 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;
////////////////////////////////////////////////////////////////////////////////
// 系统数据结构
////////////////////////////////////////////////////////////////////////////////
// 定义坐标结构体--整型32位
typedef struct tagPoint32S // BYTES: 2*4=8
{
SINT32 x; // 图像像素x坐标
SINT32 y; // 图像像素y坐标
} POINT32S;
// 定义坐标结构体--整型16位
typedef struct tagPoint16S // BYTES: 2*2=4
{
SINT16 x; // 图像像素x坐标
SINT16 y; // 图像像素y坐标
} POINT16S;
// 定义坐标结构体--浮点型
typedef struct tagPoint32F // BYTES: 2*4=8
{
FLOAT32 x; // 图像像素x坐标
FLOAT32 y; // 图像像素y坐标
} POINT32F;
// RPY姿态角
typedef struct tgEulerRPY
{
double fRoll; // 横滚角
double fPitch; // 俯仰角
double fYaw; // 方位角
} EulerRPY; // 单位:°
// 极坐标系
typedef struct tgPointPole
{
double alpha; // 俯仰角
double beta; // 方位角
double distance; // 极径
} Pole; // 单位:°
// 空间直角坐标系,也可以看做向量
typedef struct tgPointXYZ
{
double X;
double Y;
double Z;
} PointXYZ; // 单位:米
typedef struct tgPointBLH
{
double B; // 纬度
double L; // 经度
double H; // 高程
} PointBLH; // 地理坐标系 //单位:°
// 相机内参
typedef struct tgCameraParam
{
int ImageWidth;
int ImageHeight;
float f; // 焦距 mm
float dSize; // 像元尺寸 um
int dx; // 像主点偏移x0代表图像中心
int dy; // 像主点偏移y0代表图像中心
float fAglReso;// 角分辨率,内部计算便于使用
bool bImageRataSys; //像旋系统标记S731实物样机1数字样机未模拟像旋 -0
} CameraParam;
// 伺服信息
typedef struct tgServoParam
{
float fAz; // 方位
float fPt; // 俯仰
// S731扩展
float fFSMAz; // 快反方位
float fFSMPt; // 快反俯仰
} ServoParam;
typedef struct tgDeviceSetupError
{
double g_YawBias;
double g_PitchBias;
double g_RollBias;
double g_XBias;
double g_YBias;
double g_ZBias;
} DeviceSetupError;
// 定义目标宽高结构体--32位 //BYTES: 3*4=12
typedef struct tagSize32S
{
SINT32 w; // 宽度
SINT32 h; // 高度
SINT32 s; // 面积
} SIZE32S;
// 定义目标宽高结构体--浮点型
typedef struct tagSize32F // BYTES: 3*4=12
{
FLOAT32 w; // 宽度
FLOAT32 h; // 高度
FLOAT32 s; // 面积
} SIZE32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义速度结构体--整型32位 //BYTES: 2*4=8
typedef struct tagSpeed32S
{
SINT32 vx; // x方向速度
SINT32 vy; // y方向速度
} SPEED32S;
// 定义速度结构体--浮点型
typedef struct tagSpeed32F // BYTES: 2*4=8
{
FLOAT32 vx; // x方向速度
FLOAT32 vy; // y方向速度
} SPEED32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义矩形结构体--左上角坐标及宽高--整型16位
typedef struct tagRect16S // BYTES: 4*2=8
{
SINT16 x; // 左上点x坐标
SINT16 y; // 左上点y坐标
SINT16 w; // 矩形宽度
SINT16 h; // 矩形高度
} RECT16S;
// 定义矩形结构体--左上角坐标及宽高--整型32位
typedef struct tagRect32S // BYTES: 4*4=16
{
SINT32 x; // 左上点x坐标
SINT32 y; // 左上点y坐标
SINT32 w; // 矩形宽度
SINT32 h; // 矩形高度
} RECT32S;
// 定义矩形结构体--左上角坐标及宽高--浮点型
typedef struct tagRect32F // BYTES: 4*4=16
{
FLOAT32 x; // 左上点x坐标
FLOAT32 y; // 左上点y坐标
FLOAT32 w; // 矩形宽度
FLOAT32 h; // 矩形高度
} RECT32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义矩形结构体--中心点坐标及宽高、大小-整型
typedef struct tagCENTERRECT // BYTES: 5*2=10
{
SINT16 cx; // 中心点x坐标
SINT16 cy; // 中心点y坐标
SINT16 w; // 矩形宽度
SINT16 h; // 矩形高度
SINT32 s; // 目标大小
}CENTERRECT;
// 定义矩形结构体--中心点坐标及宽高、大小-整型32位
typedef struct tagCENTERRECT32S // BYTES: 4*4=16
{
SINT32 cx; // 中心点x坐标
SINT32 cy; // 中心点y坐标
SINT32 w; // 矩形宽度
SINT32 h; // 矩形高度
SINT32 s; // 目标大小
} CENTERRECT32S;
// 定义矩形结构体--中心点坐标及宽高、大小-浮点型
typedef struct tagCENTERRECT32F // BYTES: 5*4=20
{
FLOAT32 cx; // 中心点x坐标
FLOAT32 cy; // 中心点y坐标
FLOAT32 w; // 矩形宽度
FLOAT32 h; // 矩形高度
FLOAT32 s; // 目标大小
} CENTERRECT32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义矩形结构体--左上角及右下角坐标
typedef struct tagMINMAXRECT // BYTES: 4*2=8
{
SINT16 minX; // 左上点x坐标
SINT16 minY; // 左上点y坐标
SINT16 maxX; // 右下点x坐标
SINT16 maxY; // 右下点y坐标
} MINMAXRECT;
// 定义矩形结构体--左上角及右下角坐标-整型32位
typedef struct tagMINMAXRECT32S // BYTES: 4*4=16
{
SINT32 minX; // 左上点x坐标
SINT32 minY; // 左上点y坐标
SINT32 maxX; // 右下点x坐标
SINT32 maxY; // 右下点y坐标
} MINMAXRECT32S;
// 定义矩形结构体--左上角及右下角坐标-浮点32位
typedef struct tagMINMAXRECT32F // BYTES: 4*4=16
{
FLOAT32 minX; // 左上点x坐标
FLOAT32 minY; // 左上点y坐标
FLOAT32 maxX; // 右下点x坐标
FLOAT32 maxY; // 右下点y坐标
} MINMAXRECT32F;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义目标角度结构体
typedef struct tagAngle32F // BYTES: 2*4=8
{
FLOAT32 fAz; // 方位角
FLOAT32 fPt; // 俯仰角
FLOAT32 Dr; // 极坐标角度
} ANGLE32F;
// 定义目标宽高结构体--16位 //BYTES: 2*2 + 1*4=8
typedef struct tagSize16S
{
SINT16 w; // 宽度
SINT16 h; // 高度
SINT32 s; // 面积
} SIZE16S;
// 定义距离结构体--整型32位
typedef struct tagDist32S // BYTES: 2*4=8
{
SINT32 dx; // x方向距离
SINT32 dy; // y方向距离
} DIST32S;
// 定义距离结构体--浮点型
typedef struct tagDist32F // BYTES: 2*4=8
{
FLOAT32 dx; // x方向距离
FLOAT32 dy; // y方向距离
} DIST32F;
// 外部引导目标列表,用于批量转锁定
typedef struct tagTargetGuide
{
SINT32 ID; //目标批号,传递给锁定后目标
UBYTE8 bIsCoLocate; //协同定位标记,直接透传到目标
Pole stTargetPole; //目标极坐标
PointBLH stTargetPos; //目标GPS坐标
FLOAT32 fGuideAzSpeed; //实际锁定点方位角速度
FLOAT32 fGuidePtSpeed; //实际锁定点俯仰角速度
SINT32 nLockX; //锁定点当前图像坐标X
SINT32 nLockY; //锁定点当前图像坐标Y
BBOOL bInFOV; //在视场判断
}TargetGuide;
// 载体信息
typedef struct tagAirCraftInfo
{
unsigned char nPlaneID; //载机ID
PointBLH stPos; //位置
EulerRPY stAtt; //姿态
}AirCraftInfo;
// 相机信息
typedef struct tagCamInfo
{
int nFocus; //实时焦距值
float fPixelSize; //像元尺寸
GLB_VIDEO_TYPE unVideoType; //视频源类型
int dCamx; //像主点偏移x0- 图像中心 不知道就填0
int dCamy; //像主点偏移y0- 图像中心 不知道就填0
float fAglReso; //角分辨率
}CamInfo;
// 伺服状态
typedef struct tagServoInfo
{
float fServoAz; //当前帧伺服方位角
float fServoPt; //当前帧伺服俯仰角
float fServoAzSpeed; //当前帧伺服方位角速度
float fServoPtSpeed; //当前帧伺服俯仰角速度
}ServoInfo;
// 引导信息
typedef struct tagGuideInfo
{
BBOOL bGuideUpdate; //引导当前帧更新标志(有效标志)
FLOAT32 fGuideYaw;
BBOOL fGuidePitch;
BBOOL fGuideDistance;
GLB_GUIDE_SOURCE nGuideInfSource; // 引导信息来源,本机雷达
}GuideInfo;
//*****************************************************************************
#define AIT_DETECTION_MAX_NUM 50
typedef struct tagAITPATH
{
//DasimaRPN
const char *siam_model;
const char *siam_cls;
const char *siam_reg;
}AIT_PATH;
typedef struct tagAITTARGET
{
CENTERRECT32F tTarget;
float fScore;
}AIT_TARGET;
// AI跟踪器类型
typedef enum tagAITrackerType
{
DaSaimRPN = 0,
NanoTrack = 1,
VitTrack = 2
}AITrackerType;
// nanotrack输出结构
typedef struct tagTrack_Res_Nano
{
RECT32S rect; // 跟踪器自带评估分值
float score; // 跟踪器自带评估分值
int peak_num; // 超过阈值的波峰数量
float peak_ratio; // 超过阈值的波峰投影占比
int peak_status; // 通过波峰图分析的干扰判断结果 1:有干扰 0无干扰
int disturb_status; // 通过CLS特征图二分类网络模型的干扰判断结果 1:有干扰 0无干扰
}Track_Res_Nano;
//定义ai跟踪器的输出
typedef struct tagAITInfo
{
//*******工作状态*******
int nStatus; //空闲/跟踪/定位/重捕状态信息等
int nErrorCode; //错误码编号
int nFrameId;
//*****跟踪目标信息*****
int nX; //目标中心点图像坐标x
int nY; //目标中心点图像坐标y
int nObjW; //目标宽度
int nObjH; //目标高度
unsigned char ubIDType; //目标识别类别标签
float fProb; //目标识别置信度
//******调试信息*********
unsigned char bInited;
int nTotalCnt; //跟踪帧数
int nContiLostCnt; //丢失
//int nDetectNum;
int nContiDetectNum;
RECT32F rfBox; //x,y 这里表示中心点
RECT32F rfBoxPre; //x,y 这里表示中心点
float fX; //表示中心点
float fY;
float fObjW;
float fObjH;
int nSearchX; //搜索区域中心X
int nSearchY; //搜索区域中心Y
int nSearchW; //搜索区域宽度W
int nSearchH; //搜索区域高度H
//******AI跟踪高得分检测结果*******
int nDetectNum;
AIT_TARGET nDetectArray[AIT_DETECTION_MAX_NUM];
int nClusterNum;
CENTERRECT32F nSimilarArray[AIT_DETECTION_MAX_NUM];
//******AI nanotrack输出*******
Track_Res_Nano stNanoTrack_out;
AITrackerType type;//AI跟踪算法类型标记
}AIT_OUTPUT;
//定义ai跟踪器的控制指令
typedef struct tagAITCommand
{
bool bTrack; //持续跟踪指令清空0表明解锁
bool bControlAIT; //AITrack可自循环跟踪也可由决策结果指导跟踪
unsigned char nInitMode; //1-AITrack自初始化跟踪 2-采用决策box初始化
CENTERRECT32F InitBox; //初始化跟踪指令
CENTERRECT32F TargetBox; //指示目标框用于确认下一帧的搜索范围范围在AI跟踪内部根据提示目标框自行计算
}AIT_Command;
#endif