From b34cb5c246376c916f30d389135ae504a0e9bd1f Mon Sep 17 00:00:00 2001 From: wangchongwu <759291707@qq.com> Date: Thu, 21 Aug 2025 21:43:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=A0=E5=87=BA=E7=9B=AE=E6=A0=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E6=8F=90=E9=AB=98=E6=8D=95=E8=8E=B7=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E6=88=90=E5=8A=9F=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NeoTracker/src/Arith_TrackSAObj.cpp | 12 ++++++++-- NeoTracker/src/Arith_Tracker.cpp | 2 ++ NeoTracker/src/Common/Arith_SysStruct.h | 1 + NeoTracker/src/NeoArithStandardDll.cpp | 32 +++++++++++++++++++------ NeoTracker/src/NeoArithStandardDll.h | 5 +++- 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/NeoTracker/src/Arith_TrackSAObj.cpp b/NeoTracker/src/Arith_TrackSAObj.cpp index f110121..ebdc5b1 100644 --- a/NeoTracker/src/Arith_TrackSAObj.cpp +++ b/NeoTracker/src/Arith_TrackSAObj.cpp @@ -182,7 +182,7 @@ bool SA_Tracker::Init(UINT16* pSrc, SINT32 nWidth, SINT32 nHeight, PIPE* pTracki void SA_Tracker::GetTrackState(GLB_INPUT* p_GLB_Input) { UINT32 unTotalCnt = m_LockingPipe->unTotalCnt; - if (unTotalCnt < p_GLB_Input->unFreq * 3) + if (unTotalCnt < p_GLB_Input->unFreq * 2) { m_LockingPipe->ubEventStatus = PIPE_EVENT_JUST_LOCK; // 锁定后3s范围内,处于初始锁定状态 } @@ -1382,7 +1382,6 @@ SINT32 SA_Tracker::FindMatchTarget(PIPE* pPipe, TARGET_OBJECT* ptTargetArray, SI } - SINT32 nEnd = pPipe->ubEnd; // 尺寸变化强逻辑防跳变// by wcw04046 @ 2020/06/22 if (nSimTargetId != -1 && m_ObjStatus.unContiLostCnt < 200) @@ -1506,6 +1505,14 @@ SINT32 SA_Tracker::FindMatchTarget(PIPE* pPipe, TARGET_OBJECT* ptTargetArray, SI fThres = 0.8 * ContiLostThres; fMoveThres = 0.8 * 1.f - ContiLostThres; } + + + // 单一目标初始锁定,不做阈值限制 + if (bSingleTarget && PIPE_EVENT_JUST_LOCK == m_LockingPipe->ubEventStatus) + { + fThres = 0; + } + //若最大相似度不满足阈值,则认为未查找到管道目标,返回-1 if (fSimMax < fThres /*||(SmallTarget == m_SizeMode && fMoveSim_Target < fMoveThres)*/) { @@ -2116,6 +2123,7 @@ void SA_Tracker::UpdateObject2Tracker(TARGET_OBJECT* pTarget, GLB_INPUT* p_GLB_I pObjStatus->fObjStd = pTarget->fObjStd; // 目标方差 pObjStatus->fBGStd = pTarget->fBGStd; // 目标背景方差 pObjStatus->fSNR = pTarget->fSNR; // 信噪比 + pObjStatus->fBGMean = pTarget->fBGMean; // 滤波值 pObjStatus->ptPosFilter.x = pObjStatus->ptPosFilter.x * 0.4 + pObjStatus->ptPos.x * 0.6;//位置在图像系滤波 pObjStatus->ptPosFilter.y = pObjStatus->ptPosFilter.y * 0.4 + pObjStatus->ptPos.y * 0.6;//位置在图像系滤波 diff --git a/NeoTracker/src/Arith_Tracker.cpp b/NeoTracker/src/Arith_Tracker.cpp index 6d75635..94dc6df 100644 --- a/NeoTracker/src/Arith_Tracker.cpp +++ b/NeoTracker/src/Arith_Tracker.cpp @@ -379,6 +379,8 @@ bool Tracker::UpdateTracker2Pipe(GLB_INPUT* p_GLB_Input,GLB_SCEN_MODE type, PIPE Target.pxObjGray = ObjStatus.pxObjGray; Target.fSNR = ObjStatus.fSNR; Target.emClsSrc = ObjStatus.emClsSrc; + Target.fBGMean = ObjStatus.fBGMean; + Target.fBGStd = ObjStatus.fBGStd; //// 如果对空小面目标跟踪器已经检出目标,且是融合决策目标,直接加入管道 //if (type == GLB_SCEN_MODE::GLB_SCEN_SKY && pSkyTracker->mTargetFusion.bObject) diff --git a/NeoTracker/src/Common/Arith_SysStruct.h b/NeoTracker/src/Common/Arith_SysStruct.h index 72b8aa9..fb21861 100644 --- a/NeoTracker/src/Common/Arith_SysStruct.h +++ b/NeoTracker/src/Common/Arith_SysStruct.h @@ -364,6 +364,7 @@ typedef struct tagObjectStatus FLOAT32 fSNR; // 目标信噪比 FLOAT32 fObjStd; // 目标方差 4 FLOAT32 fBGStd; // 目标背景方差 + FLOAT32 fBGMean; // 目标背景均值 UINT16 fGrayFilter; // 灰度滤波值 POINT32F ptCentroid; // 质心定位置 diff --git a/NeoTracker/src/NeoArithStandardDll.cpp b/NeoTracker/src/NeoArithStandardDll.cpp index c161349..7e1a306 100644 --- a/NeoTracker/src/NeoArithStandardDll.cpp +++ b/NeoTracker/src/NeoArithStandardDll.cpp @@ -466,10 +466,22 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu pipeBox.w = pTarget->snSize.w; pipeBox.h = pTarget->snSize.h; - if(SIoUB_Expand(pipeBox,trackBox, 10) > 0.1 && !pPipe->bTrackingPipe) + //if(SIoUB_Expand(pipeBox,trackBox, 10) > 0.1 && !pPipe->bTrackingPipe) + //{ + // continue; + //} + // + if (!pPipe->bTrackingPipe && + (pstOutput->nStatus == GLB_STATUS_TRACK || pstOutput->nStatus == GLB_STATUS_MOTRACK)) + { - continue; + if (ABS(pipeBox.x - trackBox.x) < 256 && ABS(pipeBox.y - trackBox.y) < 256) + { + continue; + } } + + // 告警目标输出 ARIDLL_OBJINFO* pt_detObj = &pstOutput->stAlarmObjs[pstOutput->nAlarmObjCnts]; @@ -493,6 +505,12 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu obj.nOutputID = pPipe->nAlarmBatchID_1; obj.unClsType = pPipe->unClsType; + obj.fSNR = pTarget->fSNR; + obj.nObjGray = pTarget->pxObjGray; + obj.fBkgGray = pTarget->fBGMean; + obj.fBkgStd = pTarget->fBGStd; + + // 若有外部引导批号,则上报该批号 if (pPipe->nGuideBatchID > 0) @@ -674,11 +692,11 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu } // 跟踪状态不送显示 - if (pstOutput->nTrackObjCnts > 0) - { - memset(pstOutput->stAlarmObjs, 0, ST_OBJ_NUM * sizeof(ARIDLL_OBJINFO)); - pstOutput->nAlarmObjCnts = 0; - } + //if (pstOutput->nTrackObjCnts > 0) + //{ + // memset(pstOutput->stAlarmObjs, 0, ST_OBJ_NUM * sizeof(ARIDLL_OBJINFO)); + // pstOutput->nAlarmObjCnts = 0; + //} LOG_DEBUG_OUTPUT("stAlarmObjs[0]:nX:{},nY:{}; stTrackers[0]:nX:{},nY:{}", pstOutput->stAlarmObjs[0].nX, pstOutput->stAlarmObjs[0].nY, pstOutput->stTrackers[0].nX, pstOutput->stTrackers[0].nY); diff --git a/NeoTracker/src/NeoArithStandardDll.h b/NeoTracker/src/NeoArithStandardDll.h index bc15ed7..1934f8d 100644 --- a/NeoTracker/src/NeoArithStandardDll.h +++ b/NeoTracker/src/NeoArithStandardDll.h @@ -76,6 +76,7 @@ typedef struct tagARIDLL_OBJINFO float fBgEntropy; //目标背景信息熵 float fSaliency; //目标显著性值 + // bool nJammingSucess; //目标成功干扰 @@ -89,7 +90,9 @@ typedef struct tagARIDLL_OBJINFO FLOAT32 fConf;//跟踪置信度 ObjSrc ArithSrc;//跟踪算法来源,决策后 - unsigned char byte[20];//预留 + float fBkgGray; //目标背景灰度值 + float fBkgStd; //目标背景灰度标准差 + unsigned char byte[12];//预留 }ARIDLL_OBJINFO;