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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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