#ifndef _ARITH_COMMONDEF_ #define _ARITH_COMMONDEF_ #include /*********版权所有(C)2020,武汉高德红外股份有限公司*************************************** * 文件名称: 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; // 像主点偏移x,0代表图像中心 int dy; // 像主点偏移y,0代表图像中心 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; //像主点偏移x,0- 图像中心 ,不知道就填0 int dCamy; //像主点偏移y,0- 图像中心 ,不知道就填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