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

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.

/*********版权所有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