/*********版权所有(C)2020,武汉高德红外股份有限公司*************************************** * 文件名称: 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 #include #include #include #include #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