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.

1103 lines
50 KiB

/*********版权所有C2020武汉高德红外股份有限公司***************************************
* Arith_Global.h
*
*
*
*
*
* 2020/02/25
*
*****************************************************************************************/
#ifndef _ARITH_SYSSTRUCT_
#define _ARITH_SYSSTRUCT_
#include "Arith_CommonDef.h"
#include "PlatformDefine.h"
#include "gd_alg_type.h"
#include <math.h>
#include <memory.h>
#include <stdio.h>
#include <float.h>
#include <string>
#define SysDelay (0) //系统延时,指图像比当前帧角度慢的时间 单位ms有符号
//系统参数初始化。
#define GLB_CMD_SYSINITIAL 0x99
//定义雷达导引区域大小 qw 20211227
#define GLB_RADARGUIDE_RECT 400
//定义REID特征的维度
#define GLB_REID_FEATURE_DIMS 1280
// 帧频
#define GLB_FRM_FREQ 50
// 目标尺寸类型定义
#define GLB_OBJ_SIZE_SMALL 1 //目标类型 - 小目标
#define GLB_OBJ_SIZE_FACE 2 //目标类型 - 面目标
#define GLB_OBJ_SIZE_MIDDLE 3 //目标类型 - 小目标与面目标临界
#define GLB_OBJ_SIZE_DIMSMALL 4 //目标类型 - 弱小目标
#define GLB_OBJ_SIZE_AI 5 //目标类型 - AI目标
#define GLB_OBJ_SIZE_UNKOWN 6 //目标类型 - 未知
// 目标灰度类型定义
#define GLB_OBJ_GRAY_BRIGHT 1
#define GLB_OBJ_GRAY_DARK 2
#define GLB_OBJ_GRAY_ALL 3
// 目标状态定义,搜索和跟踪阶段通用
#define GLB_OBJ_NEW 1
#define GLB_OBJ_UPDATE 2
#define GLB_OBJ_LOST 3
#define GLB_OBJ_DELETE 4
// 跟踪参数
#define GLB_MEMORY_FRM_NUM 150 //默认记忆跟踪帧数
#define GLB_SIM_INFLUENCE_FRM 400 //相似目标干扰最大帧计数
//debug 解锁原因
#define GLB_UNLOCK_MANUAL 1 //手动解锁指令,或来自上位机的解锁
#define GLB_UNLOCK_RADAR_CHANGE 2 //雷达批号改变解锁
#define GLB_UNLOCK_OVERTIME_TST 31 //TST超时解锁
#define GLB_UNLOCK_OVERTIME_CEND 32 //CEND超时解锁
#define GLB_UNLOCK_OVERTIME_KCF 33 //KCF超时解锁
#define GLB_UNLOCK_ATTDIR_CHANGE 4 //攻击方向改变解锁,对空对地立靶模式切换
#define GLB_UNLOCK_FOVOUT 5 //出视场解锁
//#define DT_TARGET_MAX_NUM 100 // 定义检测器最大检测个数
// 目标类型标记
#define TargetClass_Plane 98
#define TargetClass_Missle 99
// 面目标检测最大个数--控制耗时
#define DAT_TARGET_NUM_MAX 10 //
// 定义dst最大检测个数
#define DST_MAX_NUM 50
#define DT_TARGET_MAX_NUM DST_MAX_NUM + DAT_TARGET_NUM_MAX // 定义检测器最大检测个数
#define DT_MATCHER_MAX_NUM 6 // 定义模板匹配最大检测个数
// 管道规模
#define GLB_PIPE_DEPTH_MAX 10 //管道的最大深度
#define MAIN_ALARM_DEPTH_MAX 200 //主管道告警的最大深度
#define CLASSIFY_DEPTH_MAX 50 //目标类别的最大深度
#define TRACK_STATUS_DEPTH_MAX 50 //目标状态监控最大深度
#define GLB_GROUP_NUM_MAX 5 //组的最大个数
#define GLB_GROUP_PIPENUM_MAX 3 //组包含的管道个数只支持3个合并
//管道确认帧数
#define GLB_PIPE_AWS_FRAME_STARE 5 //管道目标确认(报警)的最少帧数:凝视
#define GLB_PIPE_AWS_FRAME_SCAN 3 //管道目标确认(报警)的最少帧数:扫描
#define GLB_PIPE_NUM_SECTOR 9 //目标运动方向分割 qw 20220112
//管道丢失帧数
#define GLB_PIPE_UNFOUND_CNT 3 //15管道目标在其视场内没有被找到的次数
#define GLB_PIPE_DEL_MIN_SCAN 5 //管道最少延迟删除帧数- 扫描模式
#define GLB_PIPE_DEL_MIN_STARE 5 //管道最少延迟删除帧数- 凝视/跟踪模式
//管道滤波帧数
#define GLB_PIPE_FILTER_CNT 10 //管道的滤波帧数
#define PIPE_ACOS_TABLE_LEN 1001 // 管道余弦表间隔 qw 20220112
//管道搜索半径
#define GLB_PIPE_RADIUS_SEARCH 50//30//20 //目标搜索时,管道搜索范围直径
#define GLB_PIPE_RADIUS_LOCK 50//12 //目标锁定时,管道搜索范围直径
#define GLB_PIPE_RADIUS_TRACK 50//15 //目标跟踪时,管道搜索范围直径
#define GLB_PIPE_RADIUS_LOST 80//25 //目标记忆跟踪时,管道搜索范围直径
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//最优管道目标决策控制参数
#define PIPE_PRIOR_WEIGHT_DIST 0.7f//最优目标的距离差异权重
#define PIPE_PRIOR_WEIGHT_GRAY 0.05f//最优目标的灰度权重
#define PIPE_PRIOR_WEIGHT_SNR 0.05f//最优目标的信噪比权重
#define PIPE_PRIOR_WEIGHT_SIZE 0.1f//最优目标的大小权重
#define PIPE_PRIOR_WEIGHT_SPEED 0.1f//最优目标的速度权重
//简称LogT LogD LogI LogW LogE LogC LogO
#define ARITH_LOG_LEVEL_TRACE 0
#define ARITH_LOG_LEVEL_DEBUG 1
#define ARITH_LOG_LEVEL_INFO 2
#define ARITH_LOG_LEVEL_WARN 3
#define ARITH_LOG_LEVEL_ERROR 4
#define ARITH_LOG_LEVEL_CRITICAL 5
#define ARITH_LOG_LEVEL_OFF 6
#define PI 3.14159265358979f // 圆周率
#define PI2 2 * PI
#define TRUE 1 // 真1
#define FALSE 0 // 假0
// OPENCV 中的定义冲突
//#define MIN(a, b) ((a) < (b) ? (a) : (b)) // 取a、b两者中的最小值
//#define MAX(a, b) ((a) > (b) ? (a) : (b)) // 取a、b两者中的最大值
#ifndef MIN
# define MIN(a,b) ((a) > (b) ? (b) : (a))
#endif
#ifndef MAX
# define MAX(a,b) ((a) < (b) ? (b) : (a))
#endif
#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 POW2(x) ((x) * (x)) // 平方值计算
//#define FLT_EPSILON 1.192092896e-07F
#define RANDOM(x) (rand() % x)
#define RADIAN(x) (x * PI / 180)
#define ANGLE(x) (x / 3.141592653589793 * 180)
//#define NULL 0
#define ICV_CUBIC_1(x) (((x)*1.5 - 2.5) * (x) * (x) + 1.0)
#define ICV_CUBIC_2(x) ((((x) * (-0.5) + 2.5) * (x)-4.0) * (x) + 2)
#define cosd(x) (cos(RADIAN(x)))
#define sind(x) (sin(RADIAN(x)))
#define RELEASE(x) (delete[] (x);)
#define EPSILON 0.0000001f //最小值-浮点数精度
#define UNEPSILON 100000000 //最大值浮点数精度
#define FEPSILON 0.000001f //最小值-浮点数精度2
// 角度输入输出限值0-360°
#define DEGLIM(DEG) ( (DEG > 180) ? (DEG-360) : ( (DEG < -180) ? (DEG+360) : DEG ) )
#define DEGLIM360(DEG) ( (DEG > 360) ? (DEG-360) : ( (DEG < 0) ? (DEG+360) : DEG ) )
// 判断浮点数a等于b,忽略非常小的误差
#define IS_FLOAT_EQUAL(a, b) (std::abs((a) - (b)) < (FEPSILON))
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//伺服角度
#define SERVO_ANGLE_ZERO (0.0f) //伺服零度
#define SERVO_ANGLE_MIN (0.0f) //(-180.0f) //伺服角度下限 //MSSu, 20121226: 采用与光电雷达一致的角度范围0°360°
#define SERVO_ANGLE_MAX (360.0f)//(180.0f) //伺服角度上限 //MSSu, 20121226: 采用与光电雷达一致的角度范围0°360°
#define SERVO_ANGLE_RANGE (360.0f)//伺服角度范围
// 目标类别来源标识
typedef enum tagemClsSrc
{
Arith_CLS_UNKNOWN = 0,
Arith_CLS_DST = 1, // 小目标综合分类
Arith_CLS_Area = 2, // 面目标综合分类
Arith_CLS_Lands = 3, // 孤岛数分类
Arith_CLS_Hole = 4, // 孔洞数分类
Arith_CLS_SVM = 5, // SVM分类
Arith_CLS_AID = 6, // AI识别分类
Arith_CLS_Manual = 7 // 手动类别
}ClsSrc;
typedef enum tagEmFindState
{
Finded_FAILED = 0, // 未匹配
Finded_SA = 1, // 仅小面匹配
Finded_AI = 2, // 仅AI匹配
Finded_SA_AI = 3, // 小面和AI同时匹配
}FindState;
typedef enum tagTrackUnlockState
{
LockStateUnknown = 0, // 未知状态
Locked_Tracking = 1, // 锁定跟踪状态
Locked_Losting = 2, // 锁定记忆跟踪状态
Unlock_Hand = 3, // 手动下发解锁
Unlock_MemTimeOver = 4, // 记忆超时解锁
Unlock_MemOutFOV = 5, // 出视场解锁
Unlock_ArithTrackFalse = 6, // 算法判断跟踪错误解锁
Unlock_NewGuide = 7, // 新的引导目标解锁
Unlock_GuideLargeGap = 8, // 引导与跟踪误差大解锁
}TrackUnlockState;
typedef struct tagPixcelsCnt
{
SINT32 nObjCnt; //目标的像素数
SINT32 nObjXHoleCnt; //X方向的孔洞的像素数
SINT32 nObjYHoleCnt; //Y方向的孔洞的像素数
}PixcelsCnt;
// 定义目标滤波结构体(32bit×9)
typedef struct tagObjectFilter // BYTES: 9*4=36
{
UINT32 unFilterCnt; // 目标的滤波帧数
ANGLE32F afAngle; // 目标方位角、俯仰角
POINT32F pfCenPos; // 目标的中心点坐标(滤波结果)
SIZE32F sfSize; // 传统算法管道中目标的宽度、高度(尺寸滤波结果)
SIZE32F sfAISize; // AI算法管道中目标的宽度、高度尺寸滤波结果
FLOAT32 fGray; // 管道中目标的灰度均值(滤波结果)
FLOAT32 fPxlsCnt; // 管道中目标的像素大小(滤波结果)
FLOAT32 fSNR; // 管道中目标的信噪比(滤波结果) mww,20130819
ANGLE32F fAngleSpeed; // 目标方位角、俯仰角速度
UINT16 fGrayNeighbor[4]; //管道中目标的四邻阈灰度均值TRBL滤波结果
} OBJECT_FILTER;
// 定义小目标SNR调试结构体
typedef struct tagObjectSNR // BYTES: 4*2 + 4*4 = 24
{
POINT16S Pnt; // 中心点x,y
SINT16 nTGR; // 目标窗口半径
SINT16 nBGR; // 背景窗口半径
FLOAT32 ObjGray; //(x,y)点灰度
FLOAT32 BGMean; // 背景均值
FLOAT32 BGStd; // 背景标准差
FLOAT32 fSNR; //(x,y)点信噪比
FLOAT32 ObjStd;
} OBJECTSNR;
// 定义目标结构体
typedef struct tagTargetObject // BYTES: 3*1 + 1*2 + 7*4 + 3*8 = 57
{
// 全局
BBOOL bObject; // 标识目标是否已被创建。1-目标已创建0-目标未创建
UINT32 unFrmID; // 记录目标被检测到的帧编号
// 位置
POINT32F pfCenPos; // 区域的中心点坐标 //BYTES: 2*4=8
POINT16S pnMaxPos; // 目标的极大值位置(小目标检测用) //BYTES: 2*2=4
ANGLE32F afAngle; // 目标方位角、俯仰角
FLOAT32 fDist; // 距离视场中心距离
PointXYZ pos3d; // 3D定位使用稳定系极坐标对应的直角坐标 //04046wcw 20241203
// 尺寸
MINMAXRECT mrnRect; // 目标上下左右边界坐标 //BYTES: 4*2=8
SIZE16S snSize; // 目标宽高 //BYTES: 2*2 + 1*4=8
UINT32 unObjPxlsCnt; // 目标的象素点的个数
UBYTE8 nObjTypeSize; // 表示目标尺寸类型1--小目标2--面目标3--临界目标即二者均是4--弱小目标
// 强度
UINT16 pxObjGray; // 目标的灰度:可以是中心点灰度、或目标均值等
UINT16 pxObjMaxGray; // 目标极值灰度 //04046wcw 20221019
UINT16 fGrayNeighbor[4]; /*> 目标四周的灰度均值, TRBL */
FLOAT32 fObjStd; // 目标方差 4
FLOAT32 fBGStd; // 目标背景方差
FLOAT32 fBGMean; // 目标背景均值
FLOAT32 fSNR; // 目标背景信噪比
UBYTE8 nObjTypeGray; // 表示目标灰度类型1--亮目标2--暗目标0--其它
// 管道相关
UINT32 nInPipesID; // 是否拥有管道0-目标未加入管道大于0-目标已加入第nInPipesID-1个管道
SINT32 nInPipeDist; // 记录目标被加入管道时,与该管道中心的距离
FLOAT32 nInPipeDistIou;
UBYTE8 ubDirection;
// 来源
ObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起
SINT32 nDetID; // 检测ID
// 类别及置信度
ClsSrc emClsSrc; // 目标类别来源
SINT32 unClsType; // 目标类别
FLOAT32 fDetConf; // 检测置信度或分类置信度(AI目标)
// 匹配
FLOAT32 fMatchConf; // 跟踪阶段匹配度
SIZE16S snAIDetSize; // 匹配得到AI目标的宽高
SINT32 nReIDFeaDim; // ReID特征维度
FLOAT32 *ReIDfeature; // ReID特征
} TARGET_OBJECT;
// 定义模板匹配目标结构体
typedef struct tagMatcherTarget // BYTES: 3*1 + 1*2 + 7*4 + 3*8 = 57
{
// 全局
BBOOL bObject; // 标识目标是否已被创建。1-目标已创建0-目标未创建
UINT32 unFrmID; // 记录目标被检测到的帧编号
FLOAT32 fDetConf; // 检测置信度
// 位置
POINT32F pfCenPos; // 区域的中心点坐标 //BYTES: 2*4=8
POINT16S pnMaxPos; // 目标的极大值位置(小目标检测用) //BYTES: 2*2=4
ANGLE32F afAngle; // 目标方位角、俯仰角
FLOAT32 fDist; // 距离视场中心距离
// 尺寸
MINMAXRECT mrnRect; // 目标上下左右边界坐标 //BYTES: 4*2=8
SIZE16S snSize; // 目标宽高 //BYTES: 2*2 + 1*4=8
UINT32 unObjPxlsCnt; // 目标的象素点的个数
FLOAT32 Angle; // 目标角度
// 来源
ObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起
} MATCHER_TARGET;
// 跟踪器结构体
typedef struct tagObjectStatus
{
UINT32 unFrmId; //当前帧编号
// 跟踪批号,对应外导引批号 by wcw04046 @ 2021/12/09
UBYTE8 nTrackID;
BBOOL bObjAssigned; // 是否初始化了目标的起始位置和大小。1-目标已初始化0-目标未初始化。
BBOOL bInsideFOV;//目标是否在视场
UINT32 unTotalCnt; // 目标已锁定的帧计数器(基于0计数)
UINT32 unTrackedCnt; // 目标实际存在的帧计数器(基于0计数)
UINT32 unContiTrackedCnt; // 目标连续非预测的帧计数器(基于0计数)
UINT32 unContiLostCnt; // 目标连续预测的帧计数器(基于0计数)
BBOOL bObjMiss; // 目标丢失/跟踪失败,解锁
BBOOL bObjLost; //目标丢失/记忆跟踪
POINT32F ptPosPre; // 目标坐标 - 上一帧 //BYTES: 2*4=8
POINT32F ptPos; // 目标坐标 - 当前帧 //BYTES: 2*4=8
POINT32S ptPosRect; //目标坐标-修正值
POINT32F ptPosFilter; // 目标坐标 - 滤波后 //BYTES: 2*4=8
POINT32F ptPosBorn; // 目标初始位置 //BYTES: 2*4=8
SIZE32F sfSize; // 目标宽高 //BYTES: 3*4=12
SIZE32F sfSizeFilter; //尺寸滤波值
SIZE32F sfSizeBorn; // 目标初始宽高 //BYTES: 3*4=12
FLOAT32 fObjPxlsCnt; // 目标的象素点的个数
SPEED32F sfSpeed; // 目标速度 //BYTES: 2*4=8
UINT16 pxObjGray; // 目标灰度值
FLOAT32 fSNR; // 目标信噪比
FLOAT32 fObjStd; // 目标方差 4
FLOAT32 fBGStd; // 目标背景方差
UINT16 fGrayFilter; // 灰度滤波值
POINT32F ptCentroid; // 质心定位置
ANGLE32F afAngle; // 目标伺服角度(方位角、俯仰角) //BYTES: 2*4=8
SPEED32F sfAglSpeed; // 目标角速度(方位角速度、俯仰角速度) //BYTES: 2*4=8
ANGLE32F afAngleBorn; // 目标初始伺服角度(方位角、俯仰角) //BYTES: 2*4=8
FLOAT32 fConfidence; // 匹配置信度(响应)
SINT32 unClsType; // 目标类别
ClsSrc emClsSrc; // 目标类别来源
FLOAT32 fDetConf; // 检测分类置信度
PointXYZ stPos3D; // 目标3D坐标
ObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起
UBYTE8 nOcclude_flag; //跟踪器遮挡状态
UBYTE8 nDeciStatus; //多跟踪器决策结果 0-无 1-kcf 2-AI
SIZE16S snAIDetSize; // 匹配得到AI目标的宽高
} OBJECTSTATUS;
//跟踪决策信息
typedef struct tagTrackDecisionInfo
{
FLOAT32 fIouAID_KCF;//识别与跟踪交并比
FLOAT32 fIouTLD_AID;//TLD与识别交并比
FLOAT32 fIouAIT_KCF;//AI跟踪与KCF交并比
CENTERRECT32F deciRectAID; //重置KCF的AI识别结果
BBOOL bAITResetKCF; //AITrack重置KCF
BBOOL bSelfResetAI; //AITrack自重置
BBOOL bKCFResetAIT; //KCF重置AITrack
BBOOL bAIDResetKCF; //AI识别重置KCF
FLOAT32 fDisAID_KCF; // AI识别结果和跟踪的相对距离用于稳跟判断
}TrackDecisionInfo;
// 算法处理的锁定指令,可根据需要扩展,尽量扁平化,不要设计多重控制。
typedef enum tagLockMode
{
LOCK_NONE = 0, //未锁定,无意义
LOCK_AUTO = 10, //自动锁定处理,锁定探测目标管道(视场内、视场外)
LOCK_POINT = 21, //点选
LOCK_RECT = 22, //框选
LOCK_UNLOCK = 3 //解锁
}LockMode;
// 以下几个数据类型根据项目需求修改,此处只做最关键字段的定义或示范性定义
#define GUIDE_TARGET_NUM 10 //支持的一次性最大引导目标个数
#define GLB_SKYLINE_MAX_POINT 96 // 天地线标定点最大个数
typedef struct tagTargetGuideInner
{
SINT32 ID; //目标批号,传递给锁定后目标
UBYTE8 bIsCoLocate; //协同定位标记,直接透传到目标
Pole stTargetPole; //目标极坐标
PointBLH stTargetPos; //目标GPS坐标
FLOAT32 fGuideAzSpeed; //实际锁定点方位角速度
FLOAT32 fGuidePtSpeed; //实际锁定点俯仰角速度
SINT32 nGuideFocus; //引导时的焦距值
SINT32 nMaxFocus; //最大焦距值
POINT32F ptGuidePOS; //引导位置换算坐标值
BBOOL bGuidePosInFOV; //导引位置在当前视场标志
MINMAXRECT32S mrnRadarSrRect; //导引空间范围
SINT32 nTrackFalseByGuideCnt; //基于引导信息判断跟踪错误帧计数
BBOOL bGuideTrackAway; //当前跟踪与引导偏离标志
}TargetGuideInner;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义操控盒到算法控制命令结构体
typedef struct tagGlbPCCommand // BYTES: 15*2=30
{
// 外部下发系统工作状态 by wcw04046 @ 2021/12/06
GLB_SYS_MODE ubSysStatusCmd;
// 场景模式
GLB_SCEN_MODE ubScenCmd; //对空、对地、对海、通用等
// 锁定命令字
UBYTE8 ubCmd; // 控制命令:初始化、跟踪、解锁、切换视频源、切视场,所有的命令都在这里区分
UINT16 ubCmdLast; // 上一个遥控指令
UINT32 unSetCmdFrmId; // 命令下发帧编号
BYTE8 ubSetID; // 命令特指目标编号,自动判断给-1
//-- 命令字附带参数
// 视场内锁定指令字,单一目标
UINT16 unSetLockPosX; // 锁定点目标图像坐标中心点X
UINT16 unSetLockPosY; // 锁定点目标图像坐标中心点Y
UINT16 unSetLockBoxW; // 锁定波门宽度, 目标宽度
UINT16 unSetLockBoxH; // 锁定波门高度, 目标高度
BBOOL bGuideUpDate; // 导引更新标志,多目标共享,下一次引导覆盖当前批目标
UINT16 unSetCanclePosX; // 解锁点目标图像坐标中心点X
UINT16 unSetCanclePosY; // 解锁点目标图像坐标中心点Y
UINT16 unSetCancleMode; // 解锁模式---0-单点解锁、1-全部解锁
UBYTE8 ubMutiTrack; // 跟踪模式---0默认1单目标2多目标
// 多目标引导锁定接口最多支持10批次目标
SINT32 nGuideAge; // 导引生命周期,帧数计数
TargetGuide target[GUIDE_TARGET_NUM]; // 接收外部传入导引信息
} GLB_PCCOMMAND;
//+++++++定义算法控制参数结构体
typedef struct tagGlbParameters
{
GLB_SYS_MODE nSysMode; // 系统工作模式(响应外部下发)
GLB_STATUS nStatus; // 当前工作状态(算法自控)
GLB_STATUS nStatusBeforeLock; // 锁定前工作状态
GLB_VIDEO_TYPE nVideoSoureType; // 当前视频源类型
GLB_SCEN_MODE nWorkScene; // 工作场景 01-对空 01-对海 00-未知
SINT32 nPipeMaxNum; // 系统航迹规模(管道数量)
SINT32 nAlarmMaxNum; // 系统告警目标规模(告警队列长度)
// 目标锁定控制
LockMode stLockCtrl; // 是否锁定/修正攻击点01目标锁定/修正攻击点02 强制锁定 00不操作。
POINT32F ptLockPos; // 实际锁定点坐标实际锁定点X坐标、实际锁定点Y坐标 //BYTES: 2*4=8
SIZE32S snLockBoxSize; // 锁定目标的宽和高
SIZE32S snLockBoxSizeDefaut; // 锁定目标的默认宽和高
BYTE8 ubLockID; //指定目标编号
SINT32 nLockPipeInd; //锁定管道编号【重要】
BBOOL bSelectObjManual; // 是否手动选择目标转跟踪。1-手动选择跟踪目标0-自动选择跟踪目标
SINT32 bLockRespondCnt; // 锁定指令响应帧计数
//目标捕获定位控制
BBOOL bUseServeArrest; //捕获过程目标定位
// 外引导
BBOOL bEnRadarGuide; // 开启雷达引导
SINT32 nGuideTargetNumber; // 外引导批号
FLOAT32 fGuideAz; // 引导方位角
FLOAT32 fGuidePt; // 引导高低角
FLOAT32 fGuideAzSpeed; // 引导方位角速度
FLOAT32 fGuidePtSpeed; // 引导俯仰角速度
SINT32 nGuideDis; // 引导距离
SINT32 nDetectRegionX; // 引导精度范围X
SINT32 nDetectRegionY; // 引导精度范围Y
BBOOL bGuideUpDate; // 引导更新标志
SINT16 nGuideLastTime; // 导引有效时间,结束后没有收到新的导引,原导引失效 //S726 by wcw04046 @ 2021/11/25
BBOOL bGuideTrackAway; // 当前跟踪与引导偏离标志
POINT32F ptGuidePOS; // 引导位置换算坐标值
BBOOL bGuidePosInFOV; // 导引位置在当前视场标志
BBOOL bMutiTrack; // 是否多目标跟踪标志
// 多目标引导信息
TargetGuideInner targetGuide[GUIDE_TARGET_NUM];
BBOOL bEnForceGuide; // 半自动截获强制提取目标3s
//天地线标定信息
BBOOL bEnLowSkylieSADet; // 是否保留天地线以下的小面检测
BBOOL bGuideCanLockSAPipe; //导引锁定AI无法识别目标开关
SINT16 nSkyLinePointsNum; // 实际外部标定点个数
ANGLE32F skyLinePoints[GLB_SKYLINE_MAX_POINT]; // 天地线标定点数组
} GLB_PARAMETERS;
// ++++++++定义算法每帧输入信息
typedef struct tagGlbInput // BYTES: 60 + 6*4 = 84
{
UBYTE8 unpxType; // 像素类型
UBYTE8 unVideoSrc; // 视频源类型
SINT32 nImageWidth; // 图像宽度
SINT32 nImageHeight; // 图像高度
UINT32 unFreq; // 帧频
UINT32 unFrmId; // 当前帧图像帧编号
ANGLE32F afSvoAgl; // 当前帧伺服角度(方位角、俯仰角)
SPEED32F sfSvoAglSpeed; // 当前帧伺服角速度(方位角速度、俯仰角速度)
PointBLH stPlanePos; // 当前载体位置
EulerRPY afPlatformRPY; // 安装平台姿态角(方位角、俯仰角、横滚角)
CameraParam stCamera; // 相机内参
ServoParam servoInfo; // 广义伺服编码器参数,不代表物方指向
DeviceSetupError setupErr; // 安装误差
SINT32 nElevationDiff; // 机载高程差
UBYTE8 serveCenFlg; //伺服到位标志
SINT32 parallelFlg; // 平台优化使用标记,勿删。
} GLB_INPUT;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 定义算法输出结果结构体
typedef struct tagGlbOutput // BYTES: 8*1 + 6*4 + 115*4 + 48 = 540
{
//SINT32 nPipeObjsCnt; // 当前管道目标个数
//SINT32 nAlarmObjsCnt; // 当前告警目标个数
//SINT32 nAlarmIDCnt; // 当前告警目标批号占用个数
//OBJECTSTATUS ObjectStatusTST; // 小目标跟踪输出的目标状态 //BYTES: 3*1 + 28*4 = 115
//OBJECTSTATUS ObjectStatusCEND; // 形心跟踪输出的目标状态 //BYTES: 3*1 + 28*4 = 115
//OBJECTSTATUS ObjectStatusKCF; // KCF跟踪输出的目标状态
//对地跟踪信息调试
float fKCFRes; //KCF响应
float fAITRes; // AI响应
int nLearnCnt; //TLD学习计数
int nTLDNum; // TLD聚类检测个数
float fMaxNNConf; //TLD检测最大响应
int nAITNum; //AI聚类检测个数()
int nAIJamCnt; //AI干扰状态
int nAIChangCnt; //AI遮挡感知状态
float fLargeResTH; //KCF重捕阈值
float fArrKCFRes;
//对空调试信息
bool sky_bComplexEnv; // 复杂背景标志位
bool sky_bInterferenceMem; // 过竿遮挡记忆标志位
bool sky_bSimIntercept; // 相似目标干扰
bool sky_bResetByAIDet; // 跟踪被AI重置标记
int sky_nClsType; // 目标类型
unsigned char sky_nClassSource; // 目标类别输出来源
unsigned char sky_nDecisionStatus; // 决策状态,输出来源
int sky_nObjTypeSrc; // 目标跟踪来源
int sky_TrkDownRatio; // 对空跟踪降采样倍数
int sky_TrkMemFrm; // 跟踪目标进记忆帧数
int sky_nTrkCX; // 决策目标信息中心点X
int sky_nTrkCY; // 决策目标信息中心点Y
int sky_nTrkW; // 决策目标信息宽度
int sky_nTrkH; // 决策目标信息高度
int sky_nTrkPxlsCnt; // 跟踪目标像素数
float sky_fTrkConf; // 跟踪目标置信度
FindState sky_emFindState; // 小面匹配状态
TrackUnlockState sky_emTUFlag; // 目标锁定解锁标记
OBJECTSTATUS ObjectStatus; // 跟踪决策输出的目标状态
} GLB_OUTPUT;
#ifndef _ALARM_TARGET_
#define _ALARM_TARGET_
typedef struct tagALARM_TARGET
{
UINT32 unFrmID; //目标帧编号
SINT32 nBatchID_1; //输出告警目标序号【目标列表显示】。0-不是告警目标大于0-表示为第nOutputID个输出的告警目标
SINT32 nInPipesID_1; //目标在管道数组中的编号。0-无对应管道大于0-对应于第nInPipesID-1个管道目标。
SINT32 nDetectCnt; //目标真实被检测到的帧数【目标列表显示】
SINT32 nCntSinceCreate;// 被创建后总帧计数
SINT32 nClassID; //目标类型,直接遗传管道结果
SINT32 unClsType; // 目标类别
UBYTE8 ubGrayType; //目标灰度类型
UBYTE8 ubSizeType; //目标类型。1--小目标2--面目标3--临界目标即二者均是4--弱小目标
UBYTE8 nObjStatusChange;//目标状态更改标记 0持续观测目标 1新目标 2目标丢失中 -1目标待删除
UBYTE8 bInFOV; //是否属于当前视场
SINT32 nInFOVCnt; //在视场帧计数
FLOAT32 nThreatConf; //威胁度估计
}ALARM_TARGET;
#endif
// AB滤波器
typedef struct tagAglFilter
{
float m_px;//方位角预测值
float m_pdx;//方位角速度预测值
float m_py;//俯仰角预测值
float m_pdy;//俯仰角速度预测值
// 滤波参数
float m_paraA;
float m_paraB;
int m_ind; //序号
float m_T;//1/系统频率
bool m_Init;//初始化标记
int m_LastFrmID;//上一帧更新的帧编号,扫描模式下防止帧频不稳定(有时一圈更新一次,有时连续帧更新)
POINT16S pnt_Predict; // 预测到像方
}AglFilter;
#define GLB_OBJTRACK_LEN 100 //目标轨迹数组长度
// 定义目标角度轨迹结构体
typedef struct tagObjAglTrack32F
{
UINT32 unFrmID; // 记录目标被检测到的帧编号
ANGLE32F afAngle; // 目标方位角、俯仰角
FLOAT32 fDist; // 距离
} ANGLE_R;
// 定义目标角度信息结构体
typedef struct tagObjAngleR32F // BYTES: 5*4+28=48
{
SINT32 nCnt; // 已记录的历史角度信息个数
SINT32 nStep; // 记录帧间隔
SINT32 nEnd; // 历史循环队列末尾
SINT32 nListSize; // 目标角度数组长度
ANGLE_R parHistoryList[GLB_OBJTRACK_LEN]; // 目标角度信息历史记录
SINT32 nFilterCnt; // 滤波帧数
ANGLE_R arfFilter; // 滤波结果
ANGLE_R arfSpeed; // 目标速度
ANGLE_R arfPredict; // 目标当前帧预测
} OBJ_ANGLE_R;
// 长短时滤波器结构
typedef struct tagFilterMeanNL
{
OBJ_ANGLE_R ObjAglListsNear; //目标短时间轨迹数组(每帧记录一次)
OBJ_ANGLE_R ObjAglListsLong; //目标长时间轨迹数组(每秒记录一次)
CENTERRECT crnObjPrediRtNear; //根据目标短时轨迹在当前帧预测到的位置中心矩形
CENTERRECT crnObjPrediRtLong; //根据目标长时轨迹在当前帧预测到的位置中心矩形
MINMAXRECT32S mrnObjPrediRtNear;//根据目标短时轨迹在当前帧预测到的位置边界矩形
MINMAXRECT32S mrnObjPrediRtLong;//根据目标长时轨迹在当前帧预测到的位置边界矩形
DIST32S dnObjPredictDist; //当前帧目标长短轨迹预测位置距离
SINT32 nObjPredictFarCnt; //目标长短轨迹位置预测距离连续变大计数器
BBOOL bObjPredictAbnormal; //目标长短轨迹位置预测异常标志
BBOOL bObjTrackRefoundSucc; //在目标长短轨迹位置预测异常时,重新成功找到目标的标志
SINT32 nObjTrackLostCntNear; //目标短时轨迹预测失败帧数
SINT32 nObjTrackLostCntLong; //目标长时轨迹预测失败帧数
SINT32 nAbnormalCnt; //跟踪异常计数器(连续---坏点
}FilterMeanNL;
// XYZ-滤波器(吊舱对地无源定位)
typedef struct tagXYZFilter
{
float m_px;//x预测值
float m_pdx;//x速度预测值
float m_py;//y预测值
float m_pdy;//y速度预测值
float m_pz;//z预测值
float m_pdz;//z速度预测值
// 滤波参数
float m_paraA;
float m_paraB;
int m_ind; //序号
float m_T;//1/系统频率
bool m_Init;//初始化标记
int m_LastFrmID;
POINT16S pnt_Predict; // 预测到像方
}XYZFilter;
// 管道
#ifndef _PIPE_
#define _PIPE_
typedef struct tagPIPE
{
SINT32 nPipeID; // 管道编号即队列ID
BBOOL bOccupy; // 标识管道是否已经被占用
BBOOL bTarget; // 标识管道是否是目标
UBYTE8 ubEventStatus; // 事件状态
BBOOL bInsideFOV; // 标记管道是否属于当前视场(目标检测区域)
BBOOL bLost; // 管道消失标记0-不是1-是。
BBOOL bTrackingPipe; // 已跟踪标记
BBOOL bAlarm; // 标识管道是否是告警目标
SINT32 unClsType; // 管道目标类别
ClsSrc emClsSrc; // 目标类别来源
UINT32 unTotalCnt; // 管道已创建的帧计数器
UINT32 unInsideFOVCnt; // 记录管道经过其视场的次数
UINT32 unContinueInFOVCnt; // 连续在视场帧数
UINT32 unExistCnt; // 管道中目标在其视场内真实被检测到的次数
UINT32 unLostCnt; // 管道已消失(目标在其视场内没有被检测到)的帧计数器
UINT32 unContinueExistCnt; // 连续检测到次数 new by wcw
UINT32 nLostFrmID; // 记录管道目标消失前的帧编号
SINT32 nInTargetID_1; // 是否在当前帧找到目标0-管道在当前帧尚未找到对应的目标大于0-管道对应当前帧第nInTargetID-1个目标
UINT32 unLastExistTime; // 管道目标最后一次被检测到的帧时间单位10ms
UBYTE8 ubEnd; // 队列尾
TARGET_OBJECT objHistoryList[GLB_PIPE_DEPTH_MAX]; // 数组实现循环队列 //BYTES: 3*1 + 1*2 + 7*4 + 3*8 = 57* 10 = 570
OBJECT_FILTER ObjectFilter; // 目标的滤波结果 //BYTES: 9*4=36
POINT32F ptBornPos; // 目标初始位置 //BYTES: 2*2=4
POINT32F ptCurrentPnt; // 管道目标在当前帧预测位置 //BYTES: 2*2=4
POINT32F ptStopPnt; // 管道目标在目标转入预测前的位置 //BYTES: 2*2=4
ANGLE32F afBornAgl; // 目标初始角度
ANGLE32F afCurrentAgl; // 管道目标在当前帧预测角度
ANGLE32F afStopAgl; // 管道目标在目标转入预测前的角度
SPEED32F sfAglSpeed; // 目标角速度
SINT32 nMoveCnt; // 目标图像坐标的运动次数
SINT32 bAreaChange; // 标记管道中的目标面积大小变化趋势 //CJ, 20121008
UBYTE8 nPipeType; // 表示管道目标类型1--小目标2--面目标3--临界目标即二者均是4--弱小目标
FLOAT32 fConfidence; // 管道为目标的置信度
SINT32 nBPCnt; // 管道被认为是坏点的次数
UBYTE8 ubDirection; // 管道的方向性扇区编号,运动方向0表示静止
SINT32 nSearchRadius; // 管道搜索半径
SINT32 nDelCntThres; // 自适应的删除帧数,提高稳定管道生存周期
SINT32 nInAlarmArrayIndex_1; //管道位于告警队列位置从1开始
SINT32 nAlarmBatchID_1; //管道告警批号从1开始
SINT32 nGuideBatchID; //外部批号,如果存在外部批号,则使用外部批号送显,内部批号不变,灵活度高
XYZFilter stXYZMotionMod; //3D运动AB滤波器可用于吊舱下视场景的无源定位+预测。
AglFilter stMotionMod; //极坐标AB运动模型
FilterMeanNL stMotionMod_mean; //长短时运动模型
UINT32 unContinueOutFOVCnt; //管道连续出视场次数
UINT32 unSimTargetNum; //波门内相似目标个数
BBOOL blookout; //是否警戒周边干扰
BBOOL bTracking; // 管道跟踪标记
SINT32 nShowPipeID; //送显批号
ObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起
SINT32 nReIDFeaDim; // 管道ReID特征维度
FLOAT32 ReIDfeature[GLB_REID_FEATURE_DIMS]; // 管道ReID特征
FLOAT32 fReIDSim; //当前管道与主目标的ReID相似度
SINT32 nMatchpipe; //累计匹配次数
BBOOL bJammPipe; //是否为干扰管道
}PIPE;
#endif
//管道处理参数(上位机软件界面可调)
#ifndef _PIPEParameters_
#define _PIPEParameters_
typedef struct tagPIPEParameters
{
SINT32 nPipeFOVLostCnt; //管道目标在其视场内没有被找到的次数
SINT32 nPipeFilterCnt; //管道的滤波帧数
SINT32 nPipeRadiusSearch; //管道搜索范围直径 -- 搜索
SINT32 nPipeRadiusLock; //管道搜索范围直径 -- 锁定
SINT32 nPipeRadiusTrack; //管道搜索范围直径 -- 跟踪
SINT32 nPipeRadiusLost; //管道搜索范围直径 -- 跟踪丢失
//管道确认与删除帧数
SINT32 nAwsFrmNumScan; //管道目标的确认帧数- 扫描模式 4
SINT32 nAwsFrmNumStare; //管道目标的确认帧数- 凝视模式 4
SINT32 nPipeDelMinScan; //管道最少延迟删除帧数- 扫描模式 4
SINT32 nPipeDelMinStare; //管道最少延迟删除帧数- 凝视/跟踪模式 4
//最优管道目标决策控制参数
FLOAT32 fPriorDistWeight; //最优目标的距离差异权重
FLOAT32 fPriorGrayWeight; //最优目标的灰度权重
FLOAT32 fPriorSNRWeight; //最优目标的信噪比权重
FLOAT32 fPriorSizeWeight; //最优目标的大小权重
FLOAT32 fPriorSpeedWeitht; //最优目标的速度权重
SINT32 nBinSector; //hist扇区
BBOOL bEnableBPJudge; //坏点判断。1-使能坏点判断0-不使能坏点判断
BBOOL bCloseBadPointPipe; //关闭坏点管道
//BBOOL bEnableBPJudgTrack; //跟踪坏点判断。1-使能跟踪坏点判断0-不使能跟踪坏点判断
//BBOOL bEnableBPJudgDetect; //检测坏点判断。1-使能检测坏点判断0-不使能检测坏点判断
// dengs 2018.12.25 speed
BBOOL bEnableSpeedMin; //是否使用目标速度下限限制。1-使用0-不使用。
BBOOL bEnableSpeedMax; //是否使用目标速度上限限制。1-使用0-不使用。
FLOAT32 fObjAglSpeedMin; //目标角速度下限(单位:度/秒)
FLOAT32 fObjAglSpeedMax; //目标角速度上限(单位:度/秒)
//凝视去虚警策略
BBOOL bEnableMoveDirLimit; //是否使用运动方向限制(要求方向一致性)
BBOOL bEnableMoveDet; // 动目标检测 by wcw04046 @ 2019/01/30
// 周扫管道处理去虚警参数ds tn-2
BBOOL bUseMotionFA; //是否使用运动去虚警策略开关 1
UBYTE8 ubPreScanNum; //预扫描圈数 1
//屏蔽区
FLOAT32 fScanAzMin;
FLOAT32 fScanAzMax;
FLOAT32 fScanPtMin;
FLOAT32 fScanPtMax;
// 默认滤波器参数
FLOAT32 fFilterA;
FLOAT32 fFilterB;
BBOOL bOutMainPipeShadow; //主跟踪目标的背景管道送显开关
}PIPE_PARAMETERS;
#endif
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#ifndef _DAT_PARAMETERS_
#define _DAT_PARAMETERS_
//定义面目标检测算法参数结构体
typedef struct tagDATParameters
{
//单帧检测目标最大个数
SINT32 nFrmObjsMax; //单帧检测目标个数上限
//搜索区域降采样倍数
SINT32 nDSmpScale; //搜索区域降采样倍数
//梯度分割阈值
SINT32 nGradThresMin; //梯度阈值下限2倍降采样
//灰度亮暗目标分割阈值
SINT32 nGrayThresMinBright; //亮灰度阈值下限2倍降采样
SINT32 nGrayThresMinDark; //暗灰度阈值下限2倍降采样
//面目标检测类型
UBYTE8 nDetectGrayType; //面目标检测类型 1-只检测亮目标2-只检测暗目标3-同时检测亮暗目标
//目标合并距离
SINT32 nObjCombineDist; //目标合并距离
//目标确认
SINT32 nObjSizeMin; //目标大小阈值下限2倍降采样
SINT32 nObjSizeMax; //目标大小阈值上限2倍降采样
SINT32 nObjWidthMax; //目标宽度上限2倍降采样
SINT32 nObjHeightMax; //目标高度上限2倍降采样
FLOAT32 fObjWHRatioMin; //目标宽/高比下限2倍降采样
FLOAT32 fObjWHRatioMax; //目标宽/高比上限2倍降采样
FLOAT32 fObjRectRatioMin; //目标矩形度下限2倍降采样
FLOAT32 fObjStdMin; //目标方差下限
SINT32 nObjBkgGrayDiffMin; //目标背景灰度差下限
FLOAT32 fBkgGrayDiffCoeff; //背景灰度差系数
FLOAT32 fgdk; //目标检测的gdk下限 -- 用于自适应调节gdk
//面目标检测去虚警开关(上位机软件界面可调)
UBYTE8 bUseDeFA_ObjVarMin; //是否使用去虚警策略 - 邻域方差下限限制。0-不使用1-使用。
UBYTE8 bUseDeFA_Size; //是否使用去虚警策略 - 目标大小限制。0-不使用1-使用。
UBYTE8 bUseDeFA_WHRatio; //是否使用去虚警策略 - 目标宽高比限制。0-不使用1-使用。
UBYTE8 bUseDeFA_RectRatio; //是否使用去虚警策略 - 目标矩形度限制。0-不使用1-使用。
UBYTE8 bUseDeFA_BTGrayMin; //是否使用去虚警策略 - 极值点与背景最小灰度差下限限制。0-不使用1-使用
}DAT_PARAMETERS;
#endif
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//定义面目标检测算法输出结果结构体
#ifndef _DAT_OUTPUT_
#define _DAT_OUTPUT_
typedef struct tagDATOutput
{
//灰度图指针
UINT16* pnSrDSmpImg; //搜索区域2倍降采样后灰度图像指针2倍降采样
SINT32* pnGrayInt; //灰度幅值积分图指针
UBYTE8* pnGrayBinary; //灰度二值化图像指针
UBYTE8* pnGrayBinaryDark; //暗目标灰度二值化图像指针
UBYTE8* pnGrayBinaryBright; //亮目标灰度二值化图像指针
//梯度图指针
UINT16* pnGradMag; //梯度幅值图指针
SINT32* pnGradInt; //梯度幅值积分图指针
UBYTE8* pnGradBinary; //梯度二值化图像指针
//搜索区域
MINMAXRECT32S mmrSrRect; //搜索区域边界
SIZE32S snSrDSmp; //搜索区域降采样后宽高
SIZE32S snSrDSmpInt; //搜索区域降采样后积分图宽高
MINMAXRECT32S* pmrnBlksRect;//搜索区域分块边界矩形数组
//用于向外部导出二值分割图,未实际分配地址
UBYTE8* DAT_pBinary_Gray; //DAT: 灰度二值化图像2倍降采样
UBYTE8* DAT_pBinary_Mag; //DAT: 梯度二值化图像2倍降采样
//面目标检测个数结果
SINT32 nFrmObjsCnt; //当前帧目标个数
CENTERRECT crCenterRect; //搜索区域宽高
}DAT_OUTPUT;
#endif
// 对空检测器参数
#ifndef _SkyDetectParameters_
#define _SkyDetectParameters_
typedef struct tagParam_SkyDetect
{
BBOOL bEnableDetcetSmallTarget; //小目标检测开关
BBOOL bEnableDetcetAreaTarget; //面目标检测开关
BBOOL bEnableDetcetDimTarget; //弱小目标检测开关
//小目标检测参数设置(上位机软件界面可调)
/////////////////////////////////////////////////////////
FLOAT32 fSmallDetectGDK; //小目标检测snr阈值
FLOAT32 fDimGdk; //弱小目标检测的gdk下限
SINT32 nObjSizeMin; //目标大小阈值下限
SINT32 nObjSizeMax; //目标大小阈值上限
/////////////////////////////////////////////////
//面目标检测参数
SINT32 nDSmpScale; //搜索区域降采样倍数
SINT32 fAreaDetectGradDiffThre; //面目标检测梯度差阈值
SINT32 nGrayThresMinBright; //亮面目标检测灰度差阈值
SINT32 nGrayThresMinDark; //暗面目标检测灰度差阈值
/////////////////////////////////////////////////
//小面公共参数
SINT32 nDetectGrayType; //检测灰度类型
BBOOL bEnLowSkylieSADet; //允许输出低于天地线小面检测标志位
}Param_SkyDetect;
#endif
// 对空跟踪器参数
#ifndef _SkyTrackerParameters_
#define _SkyTrackerParameters_
typedef struct tagParam_SkyTracker
{
//跟踪开关及参数设置
BBOOL Sky_bEnableFullImgDet; //对空跟踪过程中是否使能全图目标检测
BBOOL Sky_bEnableTrackSA; //小面目标跟踪开关(小目标管道或面目标质心)
BBOOL Sky_bEnableKCF; //KCF跟踪算法开关。1-开0-关。
BBOOL Sky_bEnableMatcher; //模板匹配算法开关。1-开0-关。
BBOOL Sky_bSelectObjManual; //是否手动选择目标转跟踪。1-手动选择跟踪目标0-自动选择跟踪目标
BBOOL Sky_bUseAIDet; //是否使用AI检测信息
UINT16 Sky_nUseAIDetFeq; //使用AI识别管道的频率-0表示不使用1表示每帧用一次50表示50帧用一次
SINT32 Sky_nTrackMemFrmNum; //记忆跟踪帧数
SINT32 nSmallObjSizeMax; //小面目标的像素数切换阈值
SINT32 nAreaCombineDist; //面目标合并距离
//用于控制跟踪局部的检测器
Param_SkyDetect prmTSkyDet; //对空跟踪局部检测器参数
}Param_SkyTracker;
#endif
// 对地跟踪器参数
#ifndef _GroundTrackerParameters_
#define _GroundTrackerParameters_
typedef struct tagParam_GroundTracker
{
BBOOL bEnableAccuracyTrack; //跟踪精度优化 默认1
BBOOL bUseServePredict; //采用伺服预测 默认1
UBYTE8 ubSetTrackMode; //设置主跟踪模式 默认0-AI管道 1-KCF
BBOOL bEnableLKCorrect; //LK光流算法开关 默认1
BBOOL bEnableKCF; //KCF跟踪算法开关 默认1
UBYTE8 nKcfUpdataStep; //KCF更新频率 默认2
BBOOL bKCFMutiScales; //KCF多尺度设置 默认1
FLOAT32 fArrestKCFMinThre; //KCF重捕阈值下限 默认0.38
FLOAT32 fArrestKCFMaxThre; //KCF重捕阈值上限 默认0.68
FLOAT32 fKCFResthre; //KCF跟踪阈值 默认0.2
BBOOL bTLDOccJudge; //辅助遮挡判断 默认0
BBOOL bEnableDaSiamRPN; //AI跟踪算法开关 默认1
BBOOL bEnableAIOccJudge; //AI遮挡条件开关 默认1
FLOAT32 fAIOccThre; //AI跟踪阈值 默认0.85
BBOOL bEnableAIDetect; //AI识别开关 默认0
//重捕参数控制
BBOOL bEnableArrestCorr; //重捕范围限制 默认0
BBOOL bEnableArrestAngle; //重捕角度限制 默认0
BBOOL bEnableAreestEsay; //弱重捕开关 默认1
SINT32 nArrestEsayCnt; //弱重捕时长 默认30帧
// 运动模型
BBOOL bEnable3dPredict; // 3D预测开关 默认0
}Param_GroundTracker;
#endif
// AI跟踪器参数
#ifndef _aiTrackerParameters_
#define _aiTrackerParameters_
typedef struct tagParam_AITracker
{
gud_nano_config_t nano_config;//nano track parm
gud_siamrpn_config_t dasiamrpn_config;
}Param_AITracker;
#endif
//跟踪算法控制参数
#ifndef _ARIDLL_Parameters_
#define _ARIDLL_Parameters_
typedef struct tagARIDLL_PARMA
{
//// 对空检测器参数
Param_SkyDetect PrmSkyDetect; //对空检测器算法参数
// 管道参数
SINT32 nPipeRadiusSearch; //管道搜索范围直径 -- 搜索
SINT32 nPipeRadiusLock; //管道搜索范围直径 -- 锁定
SINT32 nPipeRadiusTrack; //管道搜索范围直径 -- 跟踪
SINT32 nPipeRadiusLost; //管道搜索范围直径 -- 跟踪丢失
SINT32 nAwsFrmNumScan; //管道目标的确认帧数- 扫描模式 4
SINT32 nAwsFrmNumStare; //管道目标的确认帧数- 凝视模式 4
SINT32 nPipeDelMinScan; //管道最少延迟删除帧数- 扫描模式 4
SINT32 nPipeDelMinStare; //管道最少延迟删除帧数- 凝视/跟踪模式 4
FLOAT32 fA; //轨迹滤波器AB参数
FLOAT32 fB; //轨迹滤波器AB参数
SINT32 nLockPointW; //点选锁定目标默认宽度
SINT32 nLockPointH; //点选锁定目标默认高度
BBOOL bGuideCanLockSAPipe; //导引锁定AI无法识别目标开关
BBOOL bCloseBadPointPipe; //关闭坏点管道
BBOOL bOutMainPipeShadow; //主跟踪目标的背景管道送显开关
// 跟踪控制
Param_SkyTracker stSkyParam; //对空跟踪器算法参数
Param_GroundTracker stGrdParam; //对地跟踪算法参数
Param_AITracker stAITParam; //ai跟踪算法参数
// 日志控制
UBYTE8 nLogLevel; //允许的日志级别
BBOOL bMutiTrack; //是否多目标跟踪
//算法耗时
FLOAT32 fArithRunTimes;
UBYTE8 res[200];//预留
}ARIDLL_PARMA;
#endif
typedef struct tagTSky_Output
{
SizeType m_SizeMode; // 跟踪目标类型
Param_SkyTracker mTrakingPara_Output; // 对空跟踪输出参数
SINT32 m_nTargetNum; // 对空跟踪局部目标检测个数
TARGET_OBJECT * mTarget_Array; // 对空跟踪局部目标检测队列
SINT32 m_nMatcherNum; // 对空模板匹配目标检测个数
MATCHER_TARGET* mMatcher_Array; // 对空模板匹配目标检测队列
OBJECTSTATUS ObjectStatusTST; // 小目标跟踪输出的目标状态 //BYTES: 3*1 + 28*4 = 115
OBJECTSTATUS ObjectStatusCEND; // 形心跟踪输出的目标状态 //BYTES: 3*1 + 28*4 = 115
OBJECTSTATUS ObjectStatusKCF; // KCF跟踪输出的目标状态
OBJECTSTATUS ObjectStatusDesc; // 决策跟踪输出的目标状态
FindState findState; //小面匹配状态
BBOOL m_bComplexEnv; // 复杂背景标记
BBOOL m_bInterferenceMem; // 过竿遮挡标记
SINT32 unSimTargetNum; // 对空相似目标个数
BBOOL m_bSimInflunce; // 相似干扰标记
}TSky_Output;
typedef struct tagSkyControlInfo
{
BBOOL m_bMemoryTrackOcc; // 基于遮挡强制进记忆的标志位
SINT32 nTrackMemFrmNum; // 记忆跟踪帧数
BBOOL bTrackLowSkyline; // 跟踪目标低于天地线的标志位
}SkyControlInfo;
#endif