CvAux中文参考手册Wikipedia,自由的百科全书目录∙ 1 立体匹配o 1.1 FindStereoCorrespondence ∙ 2 View Morphing Functionso 2.1 MakeScanlineso 2.2 PreWarpImageo 2.3 FindRunso 2.4 DynamicCorrespondMultio 2.5 MakeAlphaScanlineso 2.6 MorphEpilinesMultio 2.7 PostWarpImageo 2.8 DeleteMoire∙ 3 3D Tracking Functionso 3.1 3dTrackerCalibrateCameraso 3.2 3dTrackerLocateObjects∙ 4 Eigen Objects (PCA) Functionso 4.1 CalcCovarMatrixExo 4.2 CalcEigenObjectso 4.3 CalcDecompCoeffo 4.4 EigenDecompositeo 4.5 EigenProjection∙ 5 Embedded Hidden Markov Models Functions o 5.1 CvHMMo 5.2 CvImgObsInfoo 5.3 Create2DHMMo 5.4 Release2DHMMo 5.5 CreateObsInfoo 5.6 ReleaseObsInfoo 5.7 ImgToObs_DCTo 5.8 UniformImgSegmo 5.9 InitMixSegmo 5.10 EstimateHMMStateParamso 5.11 EstimateTransProbo 5.12 EstimateObsProbo 5.13 EViterbio 5.14 MixSegmL2[编辑]立体匹配[编辑]FindStereoCorrespondence计算一对校正好的图像的视差图cvFindStereoCorrespondence(const CvArr* leftImage, const CvArr* rightImage, int mode, CvArr* depthImage,int maxDisparity,double param1, double param2, double param3,double param4, double param5 );leftImage:: 左图,必须为8位的灰度图rightImage:: 右图,必须为8位的灰度图mode:: 指定采用的算法(当前只支持 CV_DISPARITY_BIRCHFIELD ) depthImage:: 输出的视差图, 8位的灰度图maxDisparity:: 指定最大的可能差异(视差).物体越近视差越大.param1, param2, param3, param4, param5:: - 算法的参数,param1 为遮挡时的处罚值(constant occlusion penalty), param2 为匹配时的奖励值, param3 定义高可靠区域 (set of contiguous pixels whose reliability is at least param3), param4 定义比较可靠区域defines a moderatelyreliable region, param5 定义有些可靠的区域defines a slightlyreliable region. 如果省略一些参数就会采用默认值.在Birchfield算法中param1 = 25, param2 = 5, param3 = 12, param4 = 15, param5 = 25 (这些数值来自书籍"Depth Discontinuities by Pixel-to-Pixel Stereo" Stanford University Technical Report STAN-CS-TR-96-1573, July 1996.)函数cvFindStereoCorrespondence计算两个校正后的灰度图像的视差图例子。
计算一对图像的视差/*---------------------------------------------------------------------------------*/IplImage* srcLeft = cvLoadImage("left.jpg",1);IplImage* srcRight = cvLoadImage("right.jpg",1);IplImage* leftImage = cvCreateImage(cvGetSize(srcLeft), IPL_DEPTH_8U, 1);IplImage* rightImage = cvCreateImage(cvGetSize(srcRight),IPL_DEPTH_8U, 1);IplImage* depthImage = cvCreateImage(cvGetSize(srcRight),IPL_DEPTH_8U, 1);cvCvtColor(srcLeft, leftImage, CV_BGR2GRAY);cvCvtColor(srcRight, rightImage, CV_BGR2GRAY);cvFindStereoCorrespondence( leftImage, rightImage,CV_DISPARITY_BIRCHFIELD, depthImage, 50, 15, 3, 6, 8, 15 );/*---------------------------------------------------------------------------------*/本例子使用的图片可在以下地址下载/pics/left.jpg/pics/right.jpg[编辑]View Morphing Functions[编辑]MakeScanlinesCalculates scanlines coordinates for two cameras by fundamental matrixvoid cvMakeScanlines( const CvMatrix3* matrix, CvSize img_size, int* scanlines1,int* scanlines2, int* lengths1, int* lengths2, int* line_count );matrix:: Fundamental matrix.imgSize:: Size of the image.scanlines1:: Pointer to the array of calculated scanlines of the firstimage.scanlines2:: Pointer to the array of calculated scanlines of the second image.lengths1:: Pointer to the array of calculatedlengths (in pixels) of the first image scanlines.lengths2:: Pointer to the array of calculated lengths (in pixels) of the second image scanlines.line_count:: Pointer to the variable that stores the number of scanlines.The functioncvMakeScanlinesfinds coordinates of scanlines for two images. This function returns the number of scanlines. The function does nothing except calculating the number of scanlines if the pointersscanlines1orscanlines2are equal to zero.[编辑]PreWarpImageRectifies imagevoid cvPreWarpImage( int line_count, IplImage* img, uchar* dst,int* dst_nums, int* scanlines );line_count:: Number of scanlines for the image.img:: Image to prewarp.dst:: Data to store for the prewarp image.dst_nums:: Pointer to the array of lengths of scanlines.scanlines:: Pointer to the array of coordinates of scanlines.The functioncvPreWarpImagerectifies the image so that the scanlines in the rectified image are horizontal. The output buffer of sizemax(width,height)*line_count*3must be allocated before calling the function.[编辑]FindRunsRetrieves scanlines from rectified image and breaks them down into runsvoid cvFindRuns( int line_count, uchar* prewarp1, uchar* prewarp2,int* line_lengths1, int* line_lengths2,int* runs1, int* runs2,int* num_runs1, int* num_runs2 );line_count:: Number of the scanlines.prewarp1:: Prewarp data of the first image.prewarp2:: Prewarp data of the secondimage.line_lengths1:: Array of lengths of scanlines in the first image.line_lengths2:: Array of lengths of scanlines in the second image.runs1:: Array of runs in each scanline in the firstimage.runs2:: Array of runs in each scanline in the secondimage.num_runs1:: Array of numbers of runs in each scanline in the first image.num_runs2:: Array of numbers of runs in each scanline in the second image.The functioncvFindRunsretrieves scanlines from the rectified image and breaks each scanline down into several runs, that is, series of pixels of almost the same brightness.[编辑]DynamicCorrespondMultiFinds correspondence between two sets of runs of two warped imagesvoid cvDynamicCorrespondMulti( int line_count, int* first, int*first_runs,int* second, int* second_runs,int* first_corr, int* second_corr );line_count:: Number of scanlines.first:: Array of runs of the first image.first_runs:: Array of numbers of runs in each scanline of the first image.second:: Array of runs of the second image.second_runs:: Array of numbers of runs in each scanline of the secondimage.first_corr:: Pointer to the array of correspondence information found for the first runs.second_corr:: Pointer to the array of correspondence information found for the second runs.The functioncvDynamicCorrespondMultifinds correspondence between two sets of runs of two images. Memory must be allocated before calling this function. Memory size for one array of correspondence information ismax( width,height )* numscanlines*3*sizeof ( int ).[编辑]MakeAlphaScanlinesCalculates coordinates of scanlines of image from virtual cameravoid cvMakeAlphaScanlines( int* scanlines1, int* scanlines2,int* scanlinesA, int* lengths,int line_count, float alpha );scanlines1:: Pointer to the array of the first scanlines.scanlines2:: Pointer to the array of the second scanlines.scanlinesA:: Pointer to the array of the scanlines found in the virtual image.lengths:: Pointer to the array of lengths of the scanlines found in the virtual image.line_count:: Number of scanlines.alpha:: Position of virtual camera(0.0 - 1.0). The functioncvMakeAlphaScanlinesfinds coordinates of scanlines for the virtual camera with the given camera position. Memory must be allocated before calling this function. Memory size for the array of correspondence runs is numscanlines*2*4*sizeof(int). Memory size for the array of the scanline lengths isnumscanlines*2*4*sizeof(int).[编辑]MorphEpilinesMultiMorphs two pre-warped images using information about stereo correspondencevoid cvMorphEpilinesMulti( int line_count, uchar* first_pix, int*first_num,uchar* second_pix, int* second_num,uchar* dst_pix, int* dst_num,float alpha, int* first, int* first_runs, int* second, int* second_runs,int* first_corr, int* second_corr );line_count:: Number of scanlines in the prewarp image.first_pix:: Pointer to the first prewarp image.first_num:: Pointer to the array of numbers of points in each scanline in the first image.second_pix:: Pointer to the second prewarp image.second_num:: Pointer to the array of numbers of points in each scanline in the second image.dst_pix:: Pointer to the resulting morphed warped image.dst_num:: Pointer to the array of numbers of points in each line.alpha:: Virtual camera position(0.0 - 1.0).first:: First sequence of runs.first_runs:: Pointer to the number of runs in each scanline in the first image.second:: Second sequence of runs.second_runs:: Pointer to the number of runs in each scanline in the second image.first_corr:: Pointer to the array of correspondence information found for the first runs.second_corr:: Pointer to the array of correspondence information found for the second runs. The functioncvMorphEpilinesMultimorphs two pre-warped images using information about correspondence between the scanlines of two images.[编辑]PostWarpImageWarps rectified morphed image backvoid cvPostWarpImage( int line_count, uchar* src, int* src_nums,IplImage* img, int* scanlines );line_count:: Number of the scanlines.src:: Pointer to the prewarp image virtual image.src_nums:: Number of the scanlines in the image.img:: Resulting unwarp image.scanlines:: Pointer to the array of scanlines data.The functioncvPostWarpImagewarps the resultant image from the virtual camera by storing its rows across the scanlines whose coordinates are calculated by cvMakeAlphaScanlines.[编辑]DeleteMoireDeletes moire in given imagevoid cvDeleteMoire( IplImage* img );img:: Image.The functioncvDeleteMoiredeletes moire from the given image. The post-warped image may have black (un-covered) points because of possible holes between neighboring scanlines. The function deletes moire (black pixels) from the image by substituting neighboring pixels for black pixels. If all the scanlines are horizontal, the function may be omitted.[编辑]3D Tracking FunctionsThe section discusses functions for tracking objects in 3d space using a stereo camera. Besides C API, there is DirectShow 3dTracker filter and the wrapper application 3dTracker. Here you may find a description how to test the filter on sample data.[编辑]3dTrackerCalibrateCamerasSimultaneously determines position and orientation of multiple camerasCvBool cv3dTrackerCalibrateCameras(int num_cameras,const Cv3dTrackerCameraIntrinsics camera_intrinsics[],CvSize checkerboard_size,IplImage *samples[],Cv3dTrackerCameraInfo camera_info[]);num_cameras:: the number of cameras to calibrate. This is the size of each of the three array parameters.camera_intrinsics:: cameraintrinsics for each camera, such as determined byCalibFilter.checkerboard_size:: the width and height (in number of squares) of the checkerboard.samples:: images from each camera, witha view of the checkerboard.camera_info:: filled in with the resultsof the camera calibration. This is passed into 3dTrackerLocateObjectsto do tracking.The functioncv3dTrackerCalibrateCamerassearches for a checkerboard of the specified size in each of the images. For each image in which it finds the checkerboard, it fillsin the corresponding slot incamera_infowith the position and orientation of the camera relative to the checkerboard and sets thevalidflag. If it finds the checkerboard in all the images, it returns true; otherwise it returns false. This function does not change the membersof thecamera_infoarray that correspond to images in which the checkerboard was not found. This allows you to calibrate each camera independently,instead of simultaneously. To accomplish this, do the following: 1. clear all thevalidflags before calling this function the first time;1. call this function with each set of images;1. check all thevalidflags after each call. When all thevalidflags are set, calibration is complete. . Note that this method works well only if the checkerboard is rigidly mounted; if it is handheld,all the cameras should be calibrated simultanously to get an accurate result. To ensure that all cameras are calibrated simultaneously, ignore thevalidflags and use the return value to decide when calibration is complete. [编辑]3dTrackerLocateObjectsDetermines 3d location of tracked objectsint cv3dTrackerLocateObjects(int num_cameras,int num_objects,const Cv3dTrackerCameraInfo camera_info[],const Cv3dTracker2dTrackedObject tracking_info[],Cv3dTrackerTrackedObject tracked_objects[]);num_cameras:: the number of cameras.num_objects:: the maximum number of objects found by any camera. (Also the maximum number of objects returned intracked_objects.)camera_info:: camera position and location information for each camera, as determined by 3dTrackerCalibrateCameras.tracking_info:: the 2d position of each object as seen by each camera. Although this is specified as a one-dimensional array, it is actually a two-dimensional array:const Cv3dTracker2dTrackedObjecttracking_info[num_cameras][num_objects]. Theidfield of any unused slots must be -1. Ids need not be ordered or consecutive.tracked_objects:: filled in with the results. Thefunctioncv3dTrackerLocateObjectsdetermines the 3d position of tracked objects based on the 2dtracking information from multiple cameras and the camera position and orientation information computed by 3dTrackerCalibrateCameras. It locates any objects with the sameidthat are tracked by more than one camera. It fills in thetracked_objectsarray and returns the number of objects located. Theidfields of any unused slots intracked_objectsare set to -1.[编辑]Eigen Objects (PCA) FunctionsThe functions described in this section do PCA analysis and compression for a set of 8-bit images that may not fit into memoryall together. If your data fits into memory and the vectors are not8-bit (or you want a simpler interface), use cvCalcCovarMatrix, cvSVD and cvGEMM to do PCA[编辑]CalcCovarMatrixExCalculates covariance matrix for group of input objectsvoid cvCalcCovarMatrixEx( int object_count, void* input, int io_flags, int iobuf_size, uchar* buffer, void* userdata,IplImage* avg, float* covar_matrix );object_count:: Number of source objects.input:: Pointer either to the array ofIplImageinput objects or to the read callback function according to the value of the parameterioFlags.io_flags:: Input/output flags.iobuf_size:: Input/output buffersize.buffer:: Pointer to the input/output erdata:: Pointerto the structure that contains all necessary data for thecallback:: functions.avg:: Averaged object.covar_matrix:: Covariance matrix. An output parameter; must be allocated before the call. The function cvCalcCovarMatrixExcalculates a covariance matrix of the input objects group using previously calculated averaged object. Depending onioFlagsparameter it may be used either in direct access or callback mode. If ioFlagsis notCV_EIGOBJ_NO_CALLBACK, buffer must be allocated before calling the function.[编辑]CalcEigenObjectsCalculates orthonormal eigen basis and averaged object for group of input objectsvoid cvCalcEigenObjects( int nObjects, void* input, void* output, int ioFlags,int ioBufSize, void* userData, CvTermCriteria* calcLimit,IplImage* avg, float* eigVals ); nObjects:: Number of source objects.input:: Pointer either to the array of IplImage input objects or to the read callback function according to the value of the parameter ioFlags output:: Pointer either to the array of eigen objects or to the write callback function according to the value of the parameter ioFlags .ioFlags:: Input/output flags.ioBufSize:: Input/output buffer size in bytes. The size is zero, if erData:: Pointer to the structure that contains all necessary data for the callback functions.calcLimit:: Criteria that determine when to stopcalculation of eigen objects.avg:: Averaged object.eigVals:: Pointer to the eigenvalues array in the descending order; may be <pre>NULL. The functioncvCalcEigenObjectscalculates orthonormal eigen basis and the averaged object for a group of the input objects. Depending onioFlagsparameter it may be used either in direct access or callback mode. Depending on the parametercalcLimit, calculations are finished either after firstcalcLimit.max_iterdominating eigen objects are retrieved or if the ratio of the current eigenvalue to the largest eigenvalue comes down tocalcLimit.epsilonthreshold. The valuecalcLimit -> typemust beCV_TERMCRIT_NUMB, CV_TERMCRIT_EPS, orCV_TERMCRIT_NUMB | CV_TERMCRIT_EPS. The function returns the real valuescalcLimit->max_iterandcalcLimit->epsilon.The function also calculates the averaged object, which must be created previously. Calculated eigen objects are arranged accordingto the corresponding eigenvalues in the descending order.. The parametereigValsmay be equal toNULL, if eigenvalues are not needed. The functioncvCalcEigenObjectsuses the function cvCalcCovarMatrixEx.[编辑]CalcDecompCoeffCalculates decomposition coefficient of input objectdouble cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );obj:: Input object.eigObj:: Eigen object.avg:: Averaged object.The functioncvCalcDecompCoeffcalculates one decomposition coefficient of the input object usingthe previously calculated eigen object and the averaged object.[编辑]EigenDecompositeCalculates all decomposition coefficients for input objectvoid cvEigenDecomposite( IplImage* obj, int eigenvec_count, void* eigInput,int ioFlags, void* userData, IplImage* avg, float* coeffs );obj:: Input object.eigenvec_count:: Number of eigen objects.eigInput:: Pointer either to the array ofIplImageinput objects or to the read callback function according to the value of the parameterioFlags.ioFlags:: Input/output erData:: Pointer to the structurethat contains all necessary data for the callback functions.avg:: Averaged object.coeffs:: Calculated coefficients; an output parameter. The functioncvEigenDecompositecalculates all decomposition coefficients for the input object using the previously calculated eigen objects basis and the averaged object. Depending onioFlagsparameter it may be used either in direct access or callback mode. [编辑]EigenProjectionCalculates object projection to the eigen sub-spacevoid cvEigenProjection( void* input_vecs, int eigenvec_count, intio_flags, void* userdata,float* coeffs, IplImage* avg, IplImage*proj );input_vec:: Pointer to either an array ofIplImageinput objects or to a callback function, depending onio_flags.eigenvec_count:: Number of eigenvectors.io_flags:: Input/output flags; see erdata:: Pointer to the structurethat contains all necessary data for the callback functions.coeffs:: Previously calculated decomposition coefficients.avg:: Average vector, calculated by cvCalcEigenObjects.proj:: Projection to the eigen sub-space. The functioncvEigenProjectioncalculates an object projection to the eigen sub-space or, in other words, restores an object using previously calculated eigen objects basis, averaged object, and decomposition coefficients of therestored object. Depending onio_flagsparameter it may be used either in direct access or callback mode. [编辑]Embedded Hidden Markov Models FunctionsIn order to support embedded models the user must define structuresto represent 1D HMM and 2D embedded HMM model.[编辑]CvHMMEmbedded HMM Structuretypedef struct _CvEHMM{int level;int num_states;float* transP;float** obsProb;union{CvEHMMState* state;struct _CvEHMM* ehmm;} u;} CvEHMM;level:: Level of embedded HMM. Iflevel ==0, HMM is most external. In 2D HMM there are two types of HMM: 1external and several embedded. External HMM haslevel ==1, embedded HMMs havelevel ==0.num_states:: Number of states in 1D HMM.transP:: State-to-state transition probability, square matrix(num_state×num_state ).obsProb:: Observation probability matrix.state:: Array of HMM states. For the last-level HMM, that is, an HMM without embedded HMMs, HMM states are real.ehmm:: Array of embedded HMMs. If HMM is not last-level, then HMM states are not real and they are HMMs.For representation of observations the following structure is defined:[编辑]CvImgObsInfoImage Observation Structuretypedef struct CvImgObsInfo{int obs_x;int obs_y;int obs_size;float** obs;int* state;int* mix;} CvImgObsInfo;obs_x:: Number of observations in the horizontal direction.obs_y:: Number of observations in the vertical direction.obs_size:: Length of every observation vector.obs:: Pointer to observation vectors stored consequently. Number of vectors isobs_x*obs_y.state:: Array of indices of states, assigned to every observation vector.mix:: Index of mixture component, corresponding to the observation vector within an assigned state.obs_x 水平方向的观测向量,obs_垂直方向的观测和向量。