2025-08-16 15:25:29 +08:00

252 lines
5.3 KiB
C

#ifndef PICK_LAZER_WIN_H
#define PICK_LAZER_WIN_H
#include "ImgAccExport.h"
#include <stdlib.h>
#include "math.h"
//#include "MaxWinStg.h"
//#define SV_SLIP_WIN_PIX
//#define SV_SLINE_PIXSUM
//#define SV_MLINE_PIXSUM
//#define SV_MLINE_PIXMEAN
//#define SV_MLINE_PIXDELTA
//#define SV_MLINE_SUMDELTA
//#define SV_WIN_MAXDELTA
//#define SV_REC_RFLCT
#define SV_PRELEN
//#define SV_COL_PIPE
//#define SV_RFLCT_REALIGN
//#define SV_MULTI_FETRRSV_DETAIL
#define PIXCHN 8
#define MAX_H 4096
#define MAX_W 4096
#define FIXED_PROC
// Opt
#define FIXED_COE (1<<0)
#define TRNC_FIXED (1<<0)
#define RMWE_FIXED (1<<4)
#define MAXSTG_Q (1<<10)
#define LAZER_WIN_SIZE 16
#define STG_SIDE_PIX_NUM 2
#ifdef ALL_STG
#define STG_MIN_CNTR_PIX 1
#define STG_MAX_CNTR_PIX 6
#define STG_NUM ((STG_MAX_CNTR_PIX-STG_MIN_CNTR_PIX)/2 + 1)
#else // #ifdef ALL_STG
#define STG_MIN_CNTR_PIX 2
#define STG_MAX_CNTR_PIX 12
#define STG_NUM ((STG_MAX_CNTR_PIX-STG_MIN_CNTR_PIX)/2 + 1)
#endif//#ifdef ALL_STG
#define MULTI_LINE_NUM 5
#define FETR_PER_LINE 2 //
#define PEAK_GAP 2
#define REC_RFLCT
#define RFLCT_PRE_REF_NUM PIXCHN
#define RFLCT_REALIGN
#define PRE_LENGTH_ENHANCE
#ifdef FIXED_PROC
// #define PRELEN_ENHANCE_COE (FIXED_COE/1)
#define PRELEN_ENHANCE_COE (FIXED_COE*2)
#else
#define PRELEN_ENHANCE_COE (0.25f)
#endif
//#define PRE_LENGTH_TRADE_OFF
#define MAX_PRELEN 64
#define DISCONT_TH 3
#define MAX_RGN 2048
//#define MERGE_CROSS
//#define GROWING_MERGE
//#define RGN_PROC_V2
#define PICK_RGN_MAX 2
//#define OVERLAP_PIXTH 384
#define BORDER_PROC
#define RFLCT_TRADE_OFF
//#define REF_NXT_PKT
//#define RFLCT_SIMPLE_PROC
//#define PICK_RGN_XDIST
//#define ENERGY_PICK_ENA
//#define ENERGY_PICK_RLEN 32
//#define RGN_ENERGY_PICK
#ifdef FIXED_PROC
struct StgSet{
unsigned char CntrPix[STG_MAX_CNTR_PIX];
unsigned char SideLPix[STG_SIDE_PIX_NUM];
unsigned char SideRPix[STG_SIDE_PIX_NUM];
int SumCntrPix;
int SumSideLPix;
int SumSideRPix;
} ;
#else // #ifdef FIXED_PROC
struct StgSet{
float CntrPix[STG_MAX_CNTR_PIX];
float SideLPix[STG_SIDE_PIX_NUM];
float SideRPix[STG_SIDE_PIX_NUM];
float SumCntrPix;
float SumSideLPix;
float SumSideRPix;
} ;
#endif // #ifdef FIXED_PROC
struct LazerCharacter{
unsigned short Rid;
unsigned short StartX;
unsigned short EndX;
unsigned short Y;
unsigned short Width;
#ifdef FIXED_PROC
int Energy;
#else
float Energy;
#endif
unsigned char Valid;
unsigned char Seed;
unsigned char Tail;
unsigned char Crs;
unsigned char BeloneTo;
unsigned char BeloneToTreeId;
// unsigned char WkMsk;
} ;
struct LazerTree{
unsigned short TreeID;
unsigned short TreeLen;
#ifdef FIXED_PROC
int TreeEnergy;
#else
float TreeEnergy;
#endif
unsigned char TreeEmpty;
unsigned char TreeGrow;
unsigned char TreeGrowCharaId;
LazerCharacter CurTreeTail;
unsigned char TreeType; // 0:Normal | 1:UpCross | 2: DownCross
unsigned char CrossMsk; // 0:Normal | 1:UpCrossMsk | 2: DownCrossMsk | 3. Up&DownCrossMsk
} ;
struct RgnInfo{
unsigned short PntNum;
#ifdef FIXED_PROC
int Energy;
#else
float Energy;
#endif
unsigned short Seed_XS;
unsigned short Seed_XE;
unsigned short Seed_Y;
unsigned short Tail_XS;
unsigned short Tail_XE;
unsigned short Tail_Y;
unsigned char RgnType; // 0:Normal | 1:UpCross | 2: DownCross | 3: UpDown Cross
unsigned char PastType;
unsigned short NewRid;
unsigned char CrossMsk;// 0:Normal | 1:UpCrossMsk | 2: DownCrossMsk | 3. Up&DownCrossMsk
};
struct PickLaserResult {
/* Start User Var*/
#ifdef FIXED_PROC
int PickRgn_FrmMaxDeltaStg[MAX_H][PICK_RGN_MAX];
#else
float PickRgn_FrmMaxDeltaStg[MAX_H][PICK_RGN_MAX];
#endif
unsigned short PickRgn_FrmMaxDeltaStg_WinRdx[MAX_H][PICK_RGN_MAX];
unsigned short PickRgn_FrmMaxDeltaStg_LazerRdx[MAX_H][PICK_RGN_MAX];
unsigned short PickRgn_FrmMaxDeltaStg_LazerW[MAX_H][PICK_RGN_MAX];
unsigned char PickRgn_FrmMaxDeltaStg_PickMsk[MAX_H][PICK_RGN_MAX];
unsigned short PickRgn_FrmMaxDeltaStg_Rid[MAX_H][PICK_RGN_MAX];
unsigned short PickRgn_FrmMaxDeltaStg_OverlapMsk[MAX_H][PICK_RGN_MAX];
unsigned char PickRgn_FrmMaxDeltaStg_RflctMsk[MAX_H][PICK_RGN_MAX];
unsigned short PickRgn_FrmMaxDeltaStg_LiteRflct[MAX_H][PICK_RGN_MAX];
/*End User Var*/
};
#define MAX_WIN_NUM (MAX_H * PICK_RGN_MAX)
struct StdRgnRslt
{
unsigned short WinRdx[MAX_WIN_NUM]; //
unsigned short WinRltvStr[MAX_WIN_NUM];
unsigned short WinRltvEnd[MAX_WIN_NUM];
unsigned short WinY[MAX_WIN_NUM];
unsigned short WinRid[MAX_WIN_NUM];
unsigned short WinRflct[MAX_WIN_NUM];
unsigned short WinOvrlp[MAX_WIN_NUM];
unsigned char WinPix[MAX_WIN_NUM][LAZER_WIN_SIZE];
};
IMGACC_API void PickLazerWin(
int isL,
int FrmW,
int FrmH,
const unsigned char * SrcPixArray,
#ifdef FIXED_PROC
int MinStgTh,
#else
float MinStgTh,
#endif
short LazerWMin,
short LazerWMax,
#ifdef FIXED_PROC
int RflctPixTh ,
#else
float RflctPixTh ,
#endif
unsigned char RflctOutEna,
int OverlapPixTh ,
unsigned char EnhanStep,
unsigned char PickEna,
unsigned char RgnFltrTh,
unsigned char RmvWkEndEna,
unsigned char RmvWkEndTh,
unsigned char RmvWkEndMultCoe,
unsigned short RmvWkEndMinLen,
unsigned char PickLR_Ena,
unsigned char PickLeft,
unsigned short PickLR_RgnLenTh,
unsigned char EnergyPickEna ,
unsigned short PickEnergyType,
unsigned short RgnEnergyPLen,
unsigned char MeanRgnETh,
PickLaserResult* pResult
);
#endif //#ifndef PICK_LAZER_WIN_H