#include "memory.h" #include "string.h" #include "HeadDetector.h" #include "Viola2.h" #include "stdlib.h" #include "stdio.h" #include "CCZip.h" #define SCALAR_DISC_PO2 8 #define SCALAR_DISC (1<Maps; #define ErrorEMBase 5 u32 EM = ErrorEMBase; for (int i = 0 ; i < VECTOR_DIM - 1 ; i++) for (int j = i + 1 ; j < VECTOR_DIM ; j++) { u32 REsLucky; REsLucky = REs; REs &= (Map->Bits[pV->Scalar[j]>>5][pV->Scalar[i]] >> (pV->Scalar[j]&31)); if (!REs) { if (EM) { REs = REsLucky; EM--; } else return 0; } Map++; } EM = 1 + EM - ErrorEMBase; return EM; } void FEAT_SetVector(Feature_TYPE *FeatMap,FEAT_Vector *pV) { Feature_Comb2_Map *Map; Map = FeatMap->Maps; for (int i = 0 ; i < VECTOR_DIM - 1 ; i++) for (int j = i + 1 ; j < VECTOR_DIM ; j++) { Map->Bits[pV->Scalar[j]>>5][pV->Scalar[i]] |= 1 << (pV->Scalar[j]&31); Map++; } } s32 XYD[VECTOR_DIM_SQR] = {-6,-2,2,6}; void FEAT_GetImageVector(s32 *Pixel_A,s32 Pitch,FEAT_Vector *pV,s32 *pXYDOptimized) { for (u32 Counter = 0 ; Counter < VECTOR_DIM ; Counter++) { pV->Scalar[Counter] = *(Pixel_A + *(pXYDOptimized++)) & (SCALAR_DISC - 1); } } void FEAT_OptimizeForImage(void *pFT,MAP *Pixels) { u32 ACC = 0; for (int i = 0;iXYDOptimized[ACC++] = XYD[i] + XYD[j] * Pixels->PITCH; } } u32 FEAT_IsIn (void* LB,s32 *Pixel_A,s32 *Pixel_B , s32 Pitch) { FEAT_Vector V; FEAT_GetImageVector(Pixel_A,Pitch,&V,((Feature_TYPE *)LB)->XYDOptimized); return FEAT_TestMap((Feature_TYPE *)LB,&V); } u32 FEAT_AddBase(void* LB,s32 *Pixel_A,s32 *Pixel_B , s32 Pitch , u32 learnMode , u32 SecondPass) { FEAT_Vector V; if (learnMode == 1) { FEAT_GetImageVector(Pixel_A,Pitch,&V,((Feature_TYPE *)LB)->XYDOptimized); FEAT_SetVector((Feature_TYPE *)LB,&V); } return 0; } void FEAT_FinishLearn(void* LB) { };