#ifndef _ARITH_COMMONDEF_ #define _ARITH_COMMONDEF_ /*********版权所有(C)2020,武汉高德红外股份有限公司*************************************** * 文件名称: Arith_CommonDef.h * 文件标识:通用数据结构定义 * 内容摘要: * 其它说明: * 当前版本: * 创建作者: * 创建日期:2020/12/05 * 包含关系: *****************************************************************************************/ //外部系统状态(总体下发) typedef enum tagGLB_SYS_MODE { GLB_SYS_WAIT = 0x01, // 空闲 GLB_SYS_STARE = 0x02, // 凝视 GLB_SYS_FSCAN = 0x03, // 扇扫 GLB_SYS_AUTO = 0x04, // 自主搜跟(无人值守) GLB_SYS_SCAN = 0x05 // 周扫 }GLB_SYS_MODE; // 场景模式 typedef enum tagGLB_SCEN_MODE { GLB_SCEN_SKY = 0x01, // 对空模式 GLB_SCEN_GROUND = 0x02, // 对地模式 GLB_SCEN_SEA = 0x03, // 对海模式 GLB_SCEN_NORMAL = 0x00 // 通用 }GLB_SCEN_MODE; // 外引导来源 typedef enum tagGLB_GUIDE_SOURCE { GLB_GUIDE_RADAR = 0x01, //载机雷达 GLB_GUIDE_WARNINGPLANE = 0x02 //预警机 }GLB_GUIDE_SOURCE; // 视频源 typedef enum tagGLB_VIDE_TYPE { GLB_VIDEO_IR_SW = 0x01,//红外短波 GLB_VIDEO_IR_MW = 0x02,//红外中波 GLB_VIDEO_IR_LW = 0x03,//红外长波 GLB_VIDEO_VL = 0x04 //电视 }GLB_VIDE_TYPE; ////像素类型 //typedef enum tagGLB_PT_TYPE //{ // GLB_PT_UBYTE8 = 0, //无符号8位数据 // GLB_PT_UINT16 = 1, //无符号16位数据 // GLB_PT_SINT16 = 2, //有符号16位数据 // GLB_PT_RGB24 = 3, //RGB888 // GLB_PT_RGBA32 = 4, //RGBA8888 // GLB_PT_YUV_UYVY = 5, //YUV422_uyvy // GLB_PT_YUV_NV12 = 6 //}GLB_PT_TYPE; typedef enum _gd_pixel_format_e { GD_PIXEL_FORMAT_NONE = 0, GD_PIXEL_FORMAT_YUV420P, GD_PIXEL_FORMAT_YUV422P, GD_PIXEL_FORMAT_NV12, GD_PIXEL_FORMAT_NV21, GD_PIXEL_FORMAT_NV16, GD_PIXEL_FORMAT_NV61, GD_PIXEL_FORMAT_RGB_PLANAR, GD_PIXEL_FORMAT_BGR_PLANAR, GD_PIXEL_FORMAT_RGB_PACKED, GD_PIXEL_FORMAT_BGR_PACKED, GD_PIXEL_FORMAT_GRAY_Y8, GD_PIXEL_FORMAT_GRAY_Y16, GD_PIXEL_FORMAT_BUTT } GD_PIXEL_FORMAT_E; typedef struct _gd_video_frame_s { unsigned int u32Width; unsigned int u32Height; GD_PIXEL_FORMAT_E enPixelFormat; unsigned int u32Stride[3]; unsigned long long u64PhyAddr[3]; unsigned char* u64VirAddr[3]; } GD_VIDEO_FRAME_S; // 捕控导引阶段定义(算法内部状态) typedef enum tagGLB_STATUS { GLB_STATUS_UNKOWN = 0, //捕控导引阶段 - 未知 GLB_STATUS_WAIT = 1, //捕控导引阶段 - 待命状态 GLB_STATUS_SEARCH = 2, //捕控导引阶段 - 搜素状态 GLB_STATUS_TRACK = 3, //捕控导引阶段 - 跟踪 GLB_STATUS_SCAN = 4, //捕控导引阶段 - 周扫 GLB_STATUS_LOST = 5, //捕控导引阶段 - 跟踪丢失 GLB_STATUS_FSCAN = 6, //捕控导引阶段 - 扇扫 GLB_STATUS_MULTRACK = 9, //多目标跟踪状态 GLB_STATUS_AIM = 10 //内校轴阶段 }GLB_STATUS; // 目标检测算法标识 typedef enum tagemObjSrc { Arith_DST = 1, Arith_DAT = 2, Arith_AI = 3, Arith_KCF = 4, Arith_TLD = 5, Arith_Manual = 6 }emObjSrc; // 尺度模式 typedef enum tagSizeType { unKnown, //不确定目标或未识别尺寸类型 DimTarget, //弱小目标 SmallTarget, //小目标 MiddleTarget, //临界目标 AreaTarget //面目标 }SizeType; // 灰度模式 typedef enum tagGrayType { BrightTarget = 1, //亮目标 DarkTarget = 2, //暗目标 AllGray = 3 //亮暗目标 }GrayType; // 目标跟踪状态 typedef enum tagTrackingStatus { NOT_TRACKING = 0,//未跟踪 STABLE_TRACKING = 1,//稳跟 MEM_TRACKING = 2//记忆跟踪 }TrackingStatus; // 遮挡事件等级判断 typedef enum tagOccLev { NO_OCC = 0,//无遮挡 SIM_OCC = 1,//轻微遮挡 MID_OCC = 2,//中等遮挡 FULL_OCC = 3//完全遮挡 }OccLev; // 目标形变事件 typedef enum tagShapeTransLev { NO_ShapeTrans = 0,//无形变 MID_ShapeTrans = 1,//轻微形变 FULL_ShapeTrans = 2//显著形变 }ShapeTransLev; // 跟踪事件(可包含所有跟踪期间需要特殊处理的事件 // 如强制记忆跟踪、遮挡、形变、变焦、变倍等) typedef struct tagTrackEvent { OccLev occ; ShapeTransLev shapeTrans; }TrackEvent; //////////////////////////////////////////////////////////////////////////////// // 系统符号定义 //////////////////////////////////////////////////////////////////////////////// typedef bool BBOOL; typedef unsigned char UBYTE8; typedef signed char BYTE8; typedef unsigned short UINT16; typedef short SINT16; typedef unsigned int UINT32; typedef int SINT32; typedef unsigned long COLORREF; typedef unsigned short WORD; typedef unsigned long DWORD; typedef unsigned char BYTE; typedef float FLOAT32; typedef double DOUBLE64; typedef long double LDOUBLE80; //////////////////////////////////////////////////////////////////////////////// // 系统数据结构 //////////////////////////////////////////////////////////////////////////////// // 定义坐标结构体--整型32位 typedef struct tagPoint32S // BYTES: 2*4=8 { SINT32 x; // 图像像素x坐标 SINT32 y; // 图像像素y坐标 } POINT32S; // 定义坐标结构体--整型16位 typedef struct tagPoint16S // BYTES: 2*2=4 { SINT16 x; // 图像像素x坐标 SINT16 y; // 图像像素y坐标 } POINT16S; // 定义坐标结构体--浮点型 typedef struct tagPoint32F // BYTES: 2*4=8 { FLOAT32 x; // 图像像素x坐标 FLOAT32 y; // 图像像素y坐标 } POINT32F; #ifndef _RPY_ #define _RPY_ // RPY姿态角 typedef struct tgEulerRPY { double fRoll; // 横滚角 double fPitch; // 俯仰角 double fYaw; // 方位角 } EulerRPY; // 单位:° #endif #ifndef _POLE_ #define _POLE_ // 极坐标系 typedef struct tgPointPole { double alpha; // 俯仰角 double beta; // 方位角 double distance; // 极径 } Pole; // 单位:° #endif #ifndef _POINTXYZ_ #define _POINTXYZ_ // 空间直角坐标系,也可以看做向量 typedef struct tgPointXYZ { double X; double Y; double Z; } PointXYZ; // 单位:米 #endif #ifndef _POINTBLH_ #define _POINTBLH_ typedef struct tgPointBLH { double B; // 纬度 double L; // 经度 double H; // 高程 } PointBLH; // 地理坐标系 //单位:° #endif // 相机内参 typedef struct tgCameraParam { int ImageWidth; int ImageHeight; float f; // 焦距 mm float dSize; // 像元尺寸 um int dx; // 像主点偏移x,0代表图像中心 int dy; // 像主点偏移y,0代表图像中心 float fAglReso;// 角分辨率,内部计算便于使用 bool bImageRataSys; //像旋系统标记,S731实物样机1,数字样机未模拟像旋 -0 } CameraParam; // 伺服信息 typedef struct tgServoParam { float fAz; // 方位 float fPt; // 俯仰 // S731扩展 float fFSMAz; // 快反方位 float fFSMPt; // 快反俯仰 } ServoParam; typedef struct tgDeviceSetupError { double g_YawBias; double g_PitchBias; double g_RollBias; double g_XBias; double g_YBias; double g_ZBias; } DeviceSetupError; // 定义目标宽高结构体--32位 //BYTES: 3*4=12 typedef struct tagSize32S { SINT32 w; // 宽度 SINT32 h; // 高度 SINT32 s; // 面积 } SIZE32S; // 定义目标宽高结构体--浮点型 typedef struct tagSize32F // BYTES: 3*4=12 { FLOAT32 w; // 宽度 FLOAT32 h; // 高度 FLOAT32 s; // 面积 } SIZE32F; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义速度结构体--整型32位 //BYTES: 2*4=8 typedef struct tagSpeed32S { SINT32 vx; // x方向速度 SINT32 vy; // y方向速度 } SPEED32S; // 定义速度结构体--浮点型 typedef struct tagSpeed32F // BYTES: 2*4=8 { FLOAT32 vx; // x方向速度 FLOAT32 vy; // y方向速度 } SPEED32F; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义矩形结构体--左上角坐标及宽高--整型16位 typedef struct tagRect16S // BYTES: 4*2=8 { SINT16 x; // 左上点x坐标 SINT16 y; // 左上点y坐标 SINT16 w; // 矩形宽度 SINT16 h; // 矩形高度 } RECT16S; // 定义矩形结构体--左上角坐标及宽高--整型32位 typedef struct tagRect32S // BYTES: 4*4=16 { SINT32 x; // 左上点x坐标 SINT32 y; // 左上点y坐标 SINT32 w; // 矩形宽度 SINT32 h; // 矩形高度 } RECT32S; // 定义矩形结构体--左上角坐标及宽高--浮点型 typedef struct tagRect32F // BYTES: 4*4=16 { FLOAT32 x; // 左上点x坐标 FLOAT32 y; // 左上点y坐标 FLOAT32 w; // 矩形宽度 FLOAT32 h; // 矩形高度 } RECT32F; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义矩形结构体--中心点坐标及宽高、大小-整型 typedef struct tagCENTERRECT // BYTES: 5*2=10 { SINT16 cx; // 中心点x坐标 SINT16 cy; // 中心点y坐标 SINT16 w; // 矩形宽度 SINT16 h; // 矩形高度 SINT32 s; // 目标大小 }CENTERRECT; // 定义矩形结构体--中心点坐标及宽高、大小-整型32位 typedef struct tagCENTERRECT32S // BYTES: 4*4=16 { SINT32 cx; // 中心点x坐标 SINT32 cy; // 中心点y坐标 SINT32 w; // 矩形宽度 SINT32 h; // 矩形高度 SINT32 s; // 目标大小 } CENTERRECT32S; // 定义矩形结构体--中心点坐标及宽高、大小-浮点型 typedef struct tagCENTERRECT32F // BYTES: 5*4=20 { FLOAT32 cx; // 中心点x坐标 FLOAT32 cy; // 中心点y坐标 FLOAT32 w; // 矩形宽度 FLOAT32 h; // 矩形高度 FLOAT32 s; // 目标大小 } CENTERRECT32F; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义矩形结构体--左上角及右下角坐标 typedef struct tagMINMAXRECT // BYTES: 4*2=8 { SINT16 minX; // 左上点x坐标 SINT16 minY; // 左上点y坐标 SINT16 maxX; // 右下点x坐标 SINT16 maxY; // 右下点y坐标 } MINMAXRECT; // 定义矩形结构体--左上角及右下角坐标-整型32位 typedef struct tagMINMAXRECT32S // BYTES: 4*4=16 { SINT32 minX; // 左上点x坐标 SINT32 minY; // 左上点y坐标 SINT32 maxX; // 右下点x坐标 SINT32 maxY; // 右下点y坐标 } MINMAXRECT32S; // 定义矩形结构体--左上角及右下角坐标-浮点32位 typedef struct tagMINMAXRECT32F // BYTES: 4*4=16 { FLOAT32 minX; // 左上点x坐标 FLOAT32 minY; // 左上点y坐标 FLOAT32 maxX; // 右下点x坐标 FLOAT32 maxY; // 右下点y坐标 } MINMAXRECT32F; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义目标角度结构体 typedef struct tagAngle32F // BYTES: 2*4=8 { FLOAT32 fAz; // 方位角 FLOAT32 fPt; // 俯仰角 FLOAT32 Dr; // 极坐标角度 } ANGLE32F; // 定义目标宽高结构体--16位 //BYTES: 2*2 + 1*4=8 typedef struct tagSize16S { SINT16 w; // 宽度 SINT16 h; // 高度 SINT32 s; // 面积 } SIZE16S; // 定义距离结构体--整型32位 typedef struct tagDist32S // BYTES: 2*4=8 { SINT32 dx; // x方向距离 SINT32 dy; // y方向距离 } DIST32S; // 定义距离结构体--浮点型 typedef struct tagDist32F // BYTES: 2*4=8 { FLOAT32 dx; // x方向距离 FLOAT32 dy; // y方向距离 } DIST32F; //// 图像定义 //typedef struct tagGDImage //{ // UBYTE8* pImage_t;//图像指针首地址 // SINT32 nWidth;//图像实际宽 // SINT32 nHeight;//图像实际高 // GLB_PT_TYPE nPixelType;//图像数据类型 //}GD_VIDEO_FRAME_S; // AB滤波器 typedef struct tagFilter { 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;//上一帧更新的帧编号,扫描模式下防止帧频不稳定(有时一圈更新一次,有时连续帧更新) }Filter; #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; // 定义目标结构体 typedef struct tagTargetObject // BYTES: 3*1 + 1*2 + 7*4 + 3*8 = 57 { // 全局 BBOOL bObject; // 标识目标是否已被创建。1-目标已创建,0-目标未创建 UINT32 unFrmID; // 记录目标被检测到的帧编号 SINT32 nClassID; // 目标类型id,如果有的话 FLOAT32 fDetConf; // 检测置信度(AI目标) // 位置 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; // 目标的象素点的个数 UBYTE8 nObjTypeSize; // 表示目标尺寸类型:1--小目标,2--面目标,3--临界目标(即二者均是),4--弱小目标 // 强度 UINT16 pxObjGray; // 目标的灰度:可以是中心点灰度、或目标均值等 UINT16 pxObjMaxGray; // 目标极值灰度 //04046wcw 20221019 FLOAT32 fObjStd; // 目标方差 4 FLOAT32 fBGStd; // 目标背景方差 FLOAT32 fBGMean; // 目标背景均值 FLOAT32 fSNR; // 目标背景信噪比 UBYTE8 nObjTypeGray; // 表示目标灰度类型:1--亮目标,2--暗目标,0--其它 // 管道相关 UINT32 nInPipesID; // 是否拥有管道:0-目标未加入管道,大于0-目标已加入第(nInPipesID-1)个管道 SINT32 nInPipeDist; // 记录目标被加入管道时,与该管道中心的距离 UBYTE8 ubDirection; // 来源 emObjSrc nObjTypeSrc; // 目标来源 01-小目标 02-面目标 03-AI目标 04-KCF 05-TLD 06-手动起 FLOAT32 fMatchConf; //跟踪阶段匹配度 } TARGET_OBJECT; // 外部引导目标列表,用于批量转锁定 typedef struct tagTargetGuide { int ID; //目标批号,传递给锁定后目标 unsigned char bIsCoLocate; //协同定位标记,直接透传到目标 Pole stTargetPole; //目标极坐标 PointBLH stTargetPos; //目标GPS坐标 float fGuideAzSpeed; //实际锁定点方位角速度 float fGuidePtSpeed; //实际锁定点俯仰角速度 int nLockX; //锁定点当前图像坐标X int nLockY; //锁定点当前图像坐标Y bool bInFOV; //在视场判断 }TargetGuide; // 载体信息 typedef struct tagAirCraftInfo { unsigned char nPlaneID; //载机ID PointBLH stPos;//位置 EulerRPY stAtt;//姿态 }AirCraftInfo; // 相机信息 typedef struct tagCamInfo { int nFocus; //实时焦距值 float fPixelSize; //像元尺寸 GLB_VIDE_TYPE unVideoType; //视频源类型 int dCamx; //像主点偏移x,0- 图像中心 ,不知道就填0 int dCamy; //像主点偏移y,0- 图像中心 ,不知道就填0 bool bImageRataSys; //像旋系统标记,S731实物样机1,数字样机未模拟像旋 -0 }CamInfo; // 伺服状态 typedef struct tagServoInfo { float fServoAz; //当前帧伺服方位角 float fServoPt; //当前帧伺服俯仰角 float fServoAzSpeed; //当前帧伺服方位角速度 float fServoPtSpeed; //当前帧伺服俯仰角速度 }ServoInfo; // 引导信息 typedef struct tagGuideInfo { bool bGuideUpdate; //引导当前帧更新标志(有效标志) float fGuideYaw; float fGuidePitch; float fGuideDistance; GLB_GUIDE_SOURCE nGuideInfSource; // 引导信息来源,本机雷达 }GuideInfo; //跟踪算法控制参数 typedef struct tagARIDLL_PARMA { // 算法开关 bool bEnableDetcetSmallTarget;//小目标检测/跟踪开关 bool bEnableDetcetDimTarget;//弱小目标检测/跟踪开关 bool bEnableDetcetAreaTarget;//面目标检测/跟踪开关 bool bEnableKCFTracker;//面目标KCF跟踪开关 bool bEnableTLD;//tld算法开关 // 算法参数 float fSmallDetectGDK;//小目标检测snr阈值 int nDetectGrayType;//检测目标灰度类型 int fAreaDetectGrayDiffThre;//面目标检测灰度差阈值 int fAreaDetectGradDiffThre;//面目标检测梯度差阈值 int nSearchRadius; // 管道搜索半径 // 轨迹滤波器AB参数 float fA; float fB; SINT32 nScanSearchRadius;//周扫管道关联半径 BBOOL bUseShieldAngle; //屏蔽角算法开关 FLOAT32 fEffectScanAz0_X;//方位有效 FLOAT32 fEffectScanAz0_Y; FLOAT32 fEffectScanAz1_X; FLOAT32 fEffectScanAz1_Y; FLOAT32 fEffectScanAz2_X; FLOAT32 fEffectScanAz2_Y; FLOAT32 fEffectScanAz3_X; FLOAT32 fEffectScanAz3_Y; FLOAT32 fEffectScanAz4_X; FLOAT32 fEffectScanAz4_Y; FLOAT32 fShieldScanAz0_X;//俯仰屏蔽 FLOAT32 fShieldScanAz0_Y; UBYTE8 res[200];//预留 }ARIDLL_PARMA; #define GLB_GUIDE_TARGET_NUM 10 //支持的一次性最大引导目标个数 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 定义操控盒到算法控制命令结构体 typedef struct tagGlbPCCommand // BYTES: 15*2=30 { // 外部下发系统工作状态 by wcw04046 @ 2021/12/06 UBYTE8 ubSysStatusCmd; // 场景模式 UBYTE8 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; // AI识别目标 typedef struct tagobj_res // BYTES: 2*4=8 { int x; int y; int w; int h; float ob_conf; int cls_id; int area; //int id_type; } obj_res ; #endif