📄 cvaux.h.svn-base
字号:
//////////////////////////////////////////////////////////////////////////////////////////// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.//// By downloading, copying, installing or using the software you agree to this license.// If you do not agree to this license, do not download, install,// copy or use the software.////// License For Embedded Computer Vision Library//// Copyright (c) 2008, EMCV Project,// Copyright (c) 2000-2007, Intel Corporation,// All rights reserved.// Third party copyrights are property of their respective owners.//// Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met://// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer.// * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution.// * Neither the name of the copyright holders nor the names of their contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY // OF SUCH DAMAGE.//// Contributors:// * Shiqi Yu (Shenzhen Institute of Advanced Technology, Chinese Academy of Sciences)#ifndef __CVAUX__H__#define __CVAUX__H__#include <cv.h>#ifdef __cplusplusextern "C" {#endifCVAPI(CvSeq*) cvSegmentImage( const CvArr* srcarr, CvArr* dstarr, double canny_threshold, double ffill_threshold, CvMemStorage* storage );/****************************************************************************************\* Eigen objects *\****************************************************************************************/typedef int (CV_CDECL * CvCallback)(int index, void* buffer, void* user_data);typedef union{ CvCallback callback; void* data;}CvInput;#define CV_EIGOBJ_NO_CALLBACK 0#define CV_EIGOBJ_INPUT_CALLBACK 1#define CV_EIGOBJ_OUTPUT_CALLBACK 2#define CV_EIGOBJ_BOTH_CALLBACK 3/* Calculates covariation matrix of a set of arrays */CVAPI(void) cvCalcCovarMatrixEx( int nObjects, void* input, int ioFlags, int ioBufSize, uchar* buffer, void* userData, IplImage* avg, float* covarMatrix );/* Calculates eigen values and vectors of covariation matrix of a set of arrays */CVAPI(void) cvCalcEigenObjects( int nObjects, void* input, void* output, int ioFlags, int ioBufSize, void* userData, CvTermCriteria* calcLimit, IplImage* avg, float* eigVals );/* Calculates dot product (obj - avg) * eigObj (i.e. projects image to eigen vector) */CVAPI(double) cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );/* Projects image to eigen space (finds all decomposion coefficients */CVAPI(void) cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput, int ioFlags, void* userData, IplImage* avg, float* coeffs );/* Projects original objects used to calculate eigen space basis to that space */CVAPI(void) cvEigenProjection( void* eigInput, int nEigObjs, int ioFlags, void* userData, float* coeffs, IplImage* avg, IplImage* proj );/****************************************************************************************\* 1D/2D HMM *\****************************************************************************************/typedef struct CvImgObsInfo{ int obs_x; int obs_y; int obs_size; float* obs;//consequtive observations int* state;/* arr of pairs superstate/state to which observation belong */ int* mix; /* number of mixture to which observation belong */}CvImgObsInfo;/*struct for 1 image*/typedef CvImgObsInfo Cv1DObsInfo;typedef struct CvEHMMState{ int num_mix; /*number of mixtures in this state*/ float* mu; /*mean vectors corresponding to each mixture*/ float* inv_var; /* square root of inversed variances corresp. to each mixture*/ float* log_var_val; /* sum of 0.5 (LN2PI + ln(variance[i]) ) for i=1,n */ float* weight; /*array of mixture weights. Summ of all weights in state is 1. */}CvEHMMState;typedef struct CvEHMM{ int level; /* 0 - lowest(i.e its states are real states), ..... */ int num_states; /* number of HMM states */ float* transP;/*transition probab. matrices for states */ float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm if level == 1 - martix of matrices */ union { CvEHMMState* state; /* if level == 0 points to real states array, if not - points to embedded hmms */ struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */ } u;}CvEHMM;/*CVAPI(int) icvCreate1DHMM( CvEHMM** this_hmm, int state_number, int* num_mix, int obs_size );CVAPI(int) icvRelease1DHMM( CvEHMM** phmm );CVAPI(int) icvUniform1DSegm( Cv1DObsInfo* obs_info, CvEHMM* hmm );CVAPI(int) icvInit1DMixSegm( Cv1DObsInfo** obs_info_array, int num_img, CvEHMM* hmm);CVAPI(int) icvEstimate1DHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm);CVAPI(int) icvEstimate1DObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );CVAPI(int) icvEstimate1DTransProb( Cv1DObsInfo** obs_info_array, int num_seq, CvEHMM* hmm );CVAPI(float) icvViterbi( Cv1DObsInfo* obs_info, CvEHMM* hmm);CVAPI(int) icv1DMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );*//*********************************** Embedded HMMs *************************************//* Creates 2D HMM */CVAPI(CvEHMM*) cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );/* Releases HMM */CVAPI(void) cvRelease2DHMM( CvEHMM** hmm );#define CV_COUNT_OBS(roi, win, delta, numObs ) \{ \ (numObs)->width =((roi)->width -(win)->width +(delta)->width)/(delta)->width; \ (numObs)->height =((roi)->height -(win)->height +(delta)->height)/(delta)->height;\}/* Creates storage for observation vectors */CVAPI(CvImgObsInfo*) cvCreateObsInfo( CvSize numObs, int obsSize );/* Releases storage for observation vectors */CVAPI(void) cvReleaseObsInfo( CvImgObsInfo** obs_info );/* The function takes an image on input and and returns the sequnce of observations to be used with an embedded HMM; Each observation is top-left block of DCT coefficient matrix */CVAPI(void) cvImgToObs_DCT( const CvArr* arr, float* obs, CvSize dctSize, CvSize obsSize, CvSize delta );/* Uniformly segments all observation vectors extracted from image */CVAPI(void) cvUniformImgSegm( CvImgObsInfo* obs_info, CvEHMM* ehmm );/* Does mixture segmentation of the states of embedded HMM */CVAPI(void) cvInitMixSegm( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );/* Function calculates means, variances, weights of every Gaussian mixture of every low-level state of embedded HMM */CVAPI(void) cvEstimateHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );/* Function computes transition probability matrices of embedded HMM given observations segmentation */CVAPI(void) cvEstimateTransProb( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );/* Function computes probabilities of appearing observations at any state (i.e. computes P(obs|state) for every pair(obs,state)) */CVAPI(void) cvEstimateObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );/* Runs Viterbi algorithm for embedded HMM */CVAPI(float) cvEViterbi( CvImgObsInfo* obs_info, CvEHMM* hmm );/* Function clusters observation vectors from several images given observations segmentation. Euclidean distance used for clustering vectors. Centers of clusters are given means of every mixture */CVAPI(void) cvMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );/****************************************************************************************\* A few functions from old stereo gesture recognition demosions *\****************************************************************************************//* Creates hand mask image given several points on the hand */CVAPI(void) cvCreateHandMask( CvSeq* hand_points, IplImage *img_mask, CvRect *roi);/* Finds hand region in range image data */CVAPI(void) cvFindHandRegion (CvPoint3D32f* points, int count, CvSeq* indexs, float* line, CvSize2D32f size, int flag, CvPoint3D32f* center, CvMemStorage* storage, CvSeq **numbers);/* Finds hand region in range image data (advanced version) */CVAPI(void) cvFindHandRegionA( CvPoint3D32f* points, int count, CvSeq* indexs, float* line, CvSize2D32f size, int jc, CvPoint3D32f* center, CvMemStorage* storage, CvSeq **numbers);/****************************************************************************************\* Additional operations on Subdivisions *\****************************************************************************************/// paints voronoi diagram: just demo functionCVAPI(void) icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );// checks planar subdivision for correctness. It is not an absolute check,// but it verifies some relations between quad-edgesCVAPI(int) icvSubdiv2DCheck( CvSubdiv2D* subdiv );// returns squared distance between two 2D points with floating-point coordinates.CV_INLINE double icvSqDist2D32f( CvPoint2D32f pt1, CvPoint2D32f pt2 ){ double dx = pt1.x - pt2.x; double dy = pt1.y - pt2.y; return dx*dx + dy*dy;}/****************************************************************************************\* More operations on sequences *\****************************************************************************************//*****************************************************************************************/#define CV_CURRENT_INT( reader ) (*((int *)(reader).ptr))#define CV_PREV_INT( reader ) (*((int *)(reader).prev_elem))#define CV_GRAPH_WEIGHTED_VERTEX_FIELDS() CV_GRAPH_VERTEX_FIELDS()\ float weight;#define CV_GRAPH_WEIGHTED_EDGE_FIELDS() CV_GRAPH_EDGE_FIELDS()typedef struct CvGraphWeightedVtx{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -