/*****************************************************************************/ /* Latent SVM prediction API */ /*****************************************************************************/ #ifndef _LATENTSVM_H_ #define _LATENTSVM_H_ #include #include "_lsvm_types.h" #include "_lsvm_error.h" #include "_lsvm_routine.h" ////////////////////////////////////////////////////////////// // Building feature pyramid // (pyramid constructed both contrast and non-contrast image) ////////////////////////////////////////////////////////////// /* // Getting feature pyramid // // API // int getFeaturePyramid(IplImage * image, const filterObject **all_F, const int n_f, const int lambda, const int k, const int startX, const int startY, const int W, const int H, featurePyramid **maps); // INPUT // image - image // lambda - resize scale // k - size of cells // startX - X coordinate of the image rectangle to search // startY - Y coordinate of the image rectangle to search // W - width of the image rectangle to search // H - height of the image rectangle to search // OUTPUT // maps - feature maps for all levels // RESULT // Error status */ int getFeaturePyramid(IplImage * image, CvLSVMFeaturePyramid **maps); /* // Getting feature map for the selected subimage // // API // int getFeatureMaps(const IplImage * image, const int k, featureMap **map); // INPUT // image - selected subimage // k - size of cells // OUTPUT // map - feature map // RESULT // Error status */ int getFeatureMaps(const IplImage * image, const int k, CvLSVMFeatureMap **map); /* // Feature map Normalization and Truncation // // API // int normalizationAndTruncationFeatureMaps(featureMap *map, const float alfa); // INPUT // map - feature map // alfa - truncation threshold // OUTPUT // map - truncated and normalized feature map // RESULT // Error status */ int normalizeAndTruncate(CvLSVMFeatureMap *map, const float alfa); /* // Feature map reduction // In each cell we reduce dimension of the feature vector // according to original paper special procedure // // API // int PCAFeatureMaps(featureMap *map) // INPUT // map - feature map // OUTPUT // map - feature map // RESULT // Error status */ int PCAFeatureMaps(CvLSVMFeatureMap *map); ////////////////////////////////////////////////////////////// // search object ////////////////////////////////////////////////////////////// /* // Transformation filter displacement from the block space // to the space of pixels at the initial image // // API // int convertPoints(int countLevel, int lambda, int initialImageLevel, CvPoint *points, int *levels, CvPoint **partsDisplacement, int kPoints, int n, int maxXBorder, int maxYBorder); // INPUT // countLevel - the number of levels in the feature pyramid // lambda - method parameter // initialImageLevel - level of feature pyramid that contains feature map for initial image // points - the set of root filter positions (in the block space) // levels - the set of levels // partsDisplacement - displacement of part filters (in the block space) // kPoints - number of root filter positions // n - number of part filters // maxXBorder - the largest root filter size (X-direction) // maxYBorder - the largest root filter size (Y-direction) // OUTPUT // points - the set of root filter positions (in the space of pixels) // partsDisplacement - displacement of part filters (in the space of pixels) // RESULT // Error status */ int convertPoints(int countLevel, int lambda, int initialImageLevel, CvPoint *points, int *levels, CvPoint **partsDisplacement, int kPoints, int n, int maxXBorder, int maxYBorder); /* // Elimination boxes that are outside the image boudaries // // API // int clippingBoxes(int width, int height, CvPoint *points, int kPoints); // INPUT // width - image wediht // height - image heigth // points - a set of points (coordinates of top left or bottom right corners) // kPoints - points number // OUTPUT // points - updated points (if coordinates less than zero then set zero coordinate, if coordinates more than image size then set coordinates equal image size) // RESULT // Error status */ #ifdef __cplusplus extern "C" #endif int clippingBoxes(int width, int height, CvPoint *points, int kPoints); /* // Creation feature pyramid with nullable border // // API // featurePyramid* createFeaturePyramidWithBorder(const IplImage *image, int maxXBorder, int maxYBorder); // INPUT // image - initial image // maxXBorder - the largest root filter size (X-direction) // maxYBorder - the largest root filter size (Y-direction) // OUTPUT // RESULT // Feature pyramid with nullable border */ #ifdef __cplusplus extern "C" #endif CvLSVMFeaturePyramid* createFeaturePyramidWithBorder(IplImage *image, int maxXBorder, int maxYBorder); /* // Computation of the root filter displacement and values of score function // // API // int searchObject(const featurePyramid *H, const filterObject **all_F, int n, float b, int maxXBorder, int maxYBorder, CvPoint **points, int **levels, int *kPoints, float *score, CvPoint ***partsDisplacement); // INPUT // H - feature pyramid // all_F - the set of filters (the first element is root filter, other elements - part filters) // n - the number of part filters // b - linear term of the score function // maxXBorder - the largest root filter size (X-direction) // maxYBorder - the largest root filter size (Y-direction) // OUTPUT // points - positions (x, y) of the upper-left corner of root filter frame // levels - levels that correspond to each position // kPoints - number of positions // score - value of the score function // partsDisplacement - part filters displacement for each position of the root filter // RESULT // Error status */ int searchObject(const CvLSVMFeaturePyramid *H, const CvLSVMFilterObject **all_F, int n, float b, int maxXBorder, int maxYBorder, CvPoint **points, int **levels, int *kPoints, float *score, CvPoint ***partsDisplacement); /* // Computation of the root filter displacement and values of score function // // API // int searchObjectThreshold(const featurePyramid *H, const filterObject **all_F, int n, float b, int maxXBorder, int maxYBorder, float scoreThreshold, CvPoint **points, int **levels, int *kPoints, float **score, CvPoint ***partsDisplacement); // INPUT // H - feature pyramid // all_F - the set of filters (the first element is root filter, other elements - part filters) // n - the number of part filters // b - linear term of the score function // maxXBorder - the largest root filter size (X-direction) // maxYBorder - the largest root filter size (Y-direction) // scoreThreshold - score threshold // OUTPUT // points - positions (x, y) of the upper-left corner of root filter frame // levels - levels that correspond to each position // kPoints - number of positions // score - values of the score function // partsDisplacement - part filters displacement for each position of the root filter // RESULT // Error status */ int searchObjectThreshold(const CvLSVMFeaturePyramid *H, const CvLSVMFilterObject **all_F, int n, float b, int maxXBorder, int maxYBorder, float scoreThreshold, CvPoint **points, int **levels, int *kPoints, float **score, CvPoint ***partsDisplacement, int numThreads CV_DEFAULT(-1)); /* // Computation root filters displacement and values of score function // // API // int searchObjectThresholdSomeComponents(const featurePyramid *H, const filterObject **filters, int kComponents, const int *kPartFilters, const float *b, float scoreThreshold, CvPoint **points, CvPoint **oppPoints, float **score, int *kPoints); // INPUT // H - feature pyramid // filters - filters (root filter then it's part filters, etc.) // kComponents - root filters number // kPartFilters - array of part filters number for each component // b - array of linear terms // scoreThreshold - score threshold // OUTPUT // points - root filters displacement (top left corners) // oppPoints - root filters displacement (bottom right corners) // score - array of score values // kPoints - number of boxes // RESULT // Error status */ #ifdef __cplusplus extern "C" #endif int searchObjectThresholdSomeComponents(const CvLSVMFeaturePyramid *H, const CvLSVMFilterObject **filters, int kComponents, const int *kPartFilters, const float *b, float scoreThreshold, CvPoint **points, CvPoint **oppPoints, float **score, int *kPoints, int numThreads); /* // Compute opposite point for filter box // // API // int getOppositePoint(CvPoint point, int sizeX, int sizeY, float step, int degree, CvPoint *oppositePoint); // INPUT // point - coordinates of filter top left corner (in the space of pixels) // (sizeX, sizeY) - filter dimension in the block space // step - scaling factor // degree - degree of the scaling factor // OUTPUT // oppositePoint - coordinates of filter bottom corner (in the space of pixels) // RESULT // Error status */ int getOppositePoint(CvPoint point, int sizeX, int sizeY, float step, int degree, CvPoint *oppositePoint); /* // Drawing root filter boxes // // API // int showRootFilterBoxes(const IplImage *image, const filterObject *filter, CvPoint *points, int *levels, int kPoints, CvScalar color, int thickness, int line_type, int shift); // INPUT // image - initial image // filter - root filter object // points - a set of points // levels - levels of feature pyramid // kPoints - number of points // color - line color for each box // thickness - line thickness // line_type - line type // shift - shift // OUTPUT // window contained initial image and filter boxes // RESULT // Error status */ int showRootFilterBoxes(IplImage *image, const CvLSVMFilterObject *filter, CvPoint *points, int *levels, int kPoints, CvScalar color, int thickness, int line_type, int shift); /* // Drawing part filter boxes // // API // int showPartFilterBoxes(const IplImage *image, const filterObject *filter, CvPoint *points, int *levels, int kPoints, CvScalar color, int thickness, int line_type, int shift); // INPUT // image - initial image // filters - a set of part filters // n - number of part filters // partsDisplacement - a set of points // levels - levels of feature pyramid // kPoints - number of foot filter positions // color - line color for each box // thickness - line thickness // line_type - line type // shift - shift // OUTPUT // window contained initial image and filter boxes // RESULT // Error status */ int showPartFilterBoxes(IplImage *image, const CvLSVMFilterObject **filters, int n, CvPoint **partsDisplacement, int *levels, int kPoints, CvScalar color, int thickness, int line_type, int shift); /* // Drawing boxes // // API // int showBoxes(const IplImage *img, const CvPoint *points, const CvPoint *oppositePoints, int kPoints, CvScalar color, int thickness, int line_type, int shift); // INPUT // img - initial image // points - top left corner coordinates // oppositePoints - right bottom corner coordinates // kPoints - points number // color - line color for each box // thickness - line thickness // line_type - line type // shift - shift // OUTPUT // RESULT // Error status */ int showBoxes(IplImage *img, const CvPoint *points, const CvPoint *oppositePoints, int kPoints, CvScalar color, int thickness, int line_type, int shift); #endif