|
|
|
@ -0,0 +1,867 @@
|
|
|
|
|
/*********版权所有(C)2020,武汉高德红外股份有限公司***************************************
|
|
|
|
|
* 文件名称: Arith_Global.h
|
|
|
|
|
* 文件标识:
|
|
|
|
|
* 内容摘要: 业务无关的通用符号系统
|
|
|
|
|
* 其它说明:
|
|
|
|
|
* 当前版本:
|
|
|
|
|
* 创建作者:软件室算法组
|
|
|
|
|
* 创建日期:2020/02/25
|
|
|
|
|
* 包含关系:本文件被全局引用,除运行平台系统文件外不得添加任何依赖
|
|
|
|
|
*****************************************************************************************/
|
|
|
|
|
#ifndef _ARITH_SYSSTRUCT_
|
|
|
|
|
#define _ARITH_SYSSTRUCT_
|
|
|
|
|
|
|
|
|
|
#include "Arith_CommonDef.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
|
|
|
|
|
|
|
|
|
|
// 默认帧频
|
|
|
|
|
#define GLB_FRM_FREQ 100
|
|
|
|
|
|
|
|
|
|
// 目标尺寸类型定义
|
|
|
|
|
#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_UNKOWN 5 //目标类型 - 未知
|
|
|
|
|
|
|
|
|
|
// 目标灰度类型定义
|
|
|
|
|
#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 500 //默认记忆跟踪帧数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//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 TargetClass_Plane 98
|
|
|
|
|
#define TargetClass_Missle 99
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define DT_TARGET_MAX_NUM 100 // 定义检测器最大检测个数
|
|
|
|
|
|
|
|
|
|
#define DT_MATCHER_MAX_NUM 6 // 定义模板匹配最大检测个数
|
|
|
|
|
|
|
|
|
|
// 管道规模
|
|
|
|
|
#define GLB_PIPE_DEPTH_MAX 10 //管道的最大深度
|
|
|
|
|
|
|
|
|
|
#define MAIN_ALARM_DEPTH_MAX 200 //主管道告警的最大深度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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 //目标记忆跟踪时,管道搜索范围直径
|
|
|
|
|
|
|
|
|
|
//简称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 ) )
|
|
|
|
|
|
|
|
|
|
// 目标类别来源标识
|
|
|
|
|
typedef enum tagemClsSrc
|
|
|
|
|
{
|
|
|
|
|
Arith_CLS_DST = 1,
|
|
|
|
|
Arith_CLS_Area = 2,
|
|
|
|
|
Arith_CLS_Lands = 3,
|
|
|
|
|
Arith_CLS_Hole = 4,
|
|
|
|
|
Arith_CLS_SVM = 5,
|
|
|
|
|
Arith_CLS_AID = 6,
|
|
|
|
|
Arith_CLS_Manual = 7
|
|
|
|
|
}ClsSrc;
|
|
|
|
|
|
|
|
|
|
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; // 管道中目标的宽度、高度(滤波结果)
|
|
|
|
|
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; // 记录目标被检测到的帧编号
|
|
|
|
|
SINT32 unClsType; // 目标类别
|
|
|
|
|
FLOAT32 fDetConf; // 检测置信度(AI目标)
|
|
|
|
|
|
|
|
|
|
// 位置
|
|
|
|
|
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-手动起
|
|
|
|
|
FLOAT32 fMatchConf; //跟踪阶段匹配度
|
|
|
|
|
ClsSrc emClsSrc; // 目标类别来源
|
|
|
|
|
|
|
|
|
|
} 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; // 目标类别来源
|
|
|
|
|
|
|
|
|
|
PointXYZ stPos3D; // 目标3D坐标
|
|
|
|
|
|
|
|
|
|
ObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起
|
|
|
|
|
|
|
|
|
|
UBYTE8 nOcclude_flag; //跟踪器遮挡状态
|
|
|
|
|
|
|
|
|
|
UBYTE8 nDeciStatus; //多跟踪器决策结果 0-无 1-kcf 2-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 GLB_GUIDE_TARGET_NUM 10 //支持的一次性最大引导目标个数
|
|
|
|
|
|
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
// 定义操控盒到算法控制命令结构体
|
|
|
|
|
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 unSetLockunFrmId; // 命令下发帧编号
|
|
|
|
|
BYTE8 ubSetID; // 命令特指目标编号,自动判断给-1
|
|
|
|
|
|
|
|
|
|
//-- 命令字附带参数
|
|
|
|
|
|
|
|
|
|
// 视场内锁定指令字,单一目标
|
|
|
|
|
UINT16 unSetLockPosX; // 锁定点目标图像坐标中心点X
|
|
|
|
|
UINT16 unSetLockPosY; // 锁定点目标图像坐标中心点Y
|
|
|
|
|
UINT16 unSetLockBoxW; // 锁定波门宽度, 目标宽度
|
|
|
|
|
UINT16 unSetLockBoxH; // 锁定波门高度, 目标高度
|
|
|
|
|
|
|
|
|
|
BBOOL bGuideUpDate; // 导引更新标志,多目标共享,下一次引导覆盖当前批目标
|
|
|
|
|
|
|
|
|
|
// 多目标引导锁定接口,最多支持10批次目标
|
|
|
|
|
TargetGuide target[GLB_GUIDE_TARGET_NUM];
|
|
|
|
|
|
|
|
|
|
} GLB_PCCOMMAND;
|
|
|
|
|
|
|
|
|
|
//+++++++定义算法控制参数结构体
|
|
|
|
|
typedef struct tagGlbParameters
|
|
|
|
|
{
|
|
|
|
|
GLB_SYS_MODE nSysMode; // 系统工作模式(响应外部下发)
|
|
|
|
|
GLB_STATUS nStatus; // 当前工作状态(算法自控)
|
|
|
|
|
GLB_STATUS nStatusBeforeLock; // 锁定前工作状态
|
|
|
|
|
SINT32 nCatchFlag; // 捕获过程标记,处理初始跟踪到稳定跟踪过程
|
|
|
|
|
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; // 锁定目标的宽和高
|
|
|
|
|
BYTE8 ubLockID; //指定目标编号
|
|
|
|
|
SINT32 nLockPipeInd; //锁定管道编号【重要】
|
|
|
|
|
BBOOL bSelectObjManual; // 是否手动选择目标转跟踪。0-手动选择跟踪目标,1-自动选择跟踪目标
|
|
|
|
|
|
|
|
|
|
// 外引导
|
|
|
|
|
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; // 导引位置在当前视场标志
|
|
|
|
|
|
|
|
|
|
// 多目标引导信息
|
|
|
|
|
TargetGuide targetGuide[GLB_GUIDE_TARGET_NUM];
|
|
|
|
|
} 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; // 机载高程差
|
|
|
|
|
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_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; // 跟踪目标置信度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; //是否警戒周边干扰
|
|
|
|
|
}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;
|
|
|
|
|
|
|
|
|
|
}PIPE_PARAMETERS;
|
|
|
|
|
#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; //检测灰度类型
|
|
|
|
|
|
|
|
|
|
}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检测信息
|
|
|
|
|
SINT32 Sky_nTrackMemFrmNum; //记忆跟踪帧数
|
|
|
|
|
SINT32 nSmallObjSizeMax; //小面目标的像素数切换阈值
|
|
|
|
|
//用于控制跟踪局部的检测器
|
|
|
|
|
Param_SkyDetect prmTSkyDet; //对空跟踪局部检测器参数
|
|
|
|
|
|
|
|
|
|
}Param_SkyTracker;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// 对地跟踪器参数
|
|
|
|
|
#ifndef _GroundTrackerParameters_
|
|
|
|
|
#define _GroundTrackerParameters_
|
|
|
|
|
typedef struct tagParam_GroundTracker
|
|
|
|
|
{
|
|
|
|
|
BBOOL bEnableAccuracyTrack; //跟踪精度优化 默认1
|
|
|
|
|
BBOOL bUseServePredict; //采用伺服预测 默认1
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
//跟踪算法控制参数
|
|
|
|
|
#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 bCloseBadPointPipe; //关闭坏点管道
|
|
|
|
|
|
|
|
|
|
// 跟踪控制
|
|
|
|
|
Param_SkyTracker stSkyParam; //对空跟踪器算法参数
|
|
|
|
|
Param_GroundTracker stGrdParam; //对地跟踪算法参数
|
|
|
|
|
|
|
|
|
|
// 日志控制
|
|
|
|
|
UBYTE8 nLogLevel; //允许的日志级别
|
|
|
|
|
|
|
|
|
|
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; // 决策跟踪输出的目标状态
|
|
|
|
|
}TSky_Output;
|
|
|
|
|
|
|
|
|
|
#endif
|