/*M/////////////////////////////////////////////////////////////////////////////////////// // // 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. // // // Intel License Agreement // For Open Source Computer Vision Library // // Copyright (C) 2000, 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: // // * Redistribution's of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // * Redistribution's 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. // // * The name of Intel Corporation may not 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 Intel Corporation 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. // //M*/ #ifndef _CV_VM_H_ #define _CV_VM_H_ /*----------------------- Internal ViewMorphing Functions ------------------------------*/ /*======================================================================================*/ typedef struct CvMatrix4 { float m[4][4]; } CvMatrix4; /* Scanline section. Find coordinates by fundamental matrix */ /* Epsilon and real zero */ #define EPSILON 1.e-4 //#define REAL_ZERO(x) ( (x) < EPSILON && (x) > -EPSILON) #define REAL_ZERO(x) ( (x) < 1e-8 && (x) > -1e-8) #define SIGN(x) ( (x)<0 ? -1:((x)>0?1:0 ) ) CvStatus icvMakeScanlinesLengths( int* scanlines, int numlines, int* lens); /*=============================== PreWarp section ======================================*/ CvStatus icvFindRunsInOneImage( int numLines, /* number of scanlines */ uchar* prewarp, /* prewarp image */ int* line_lens, /* line lengths in pixels */ int* runs, /* result runs */ int* num_runs); /*================================ Morphing section ====================================*/ CvStatus icvMorphEpilines8uC3( uchar* first_pix, /* raster epiline from the first image */ uchar* second_pix, /* raster epiline from the second image */ uchar* dst_pix, /* raster epiline from the destination image */ /* (it's an output parameter) */ float alpha, /* relative position of camera */ int* first, /* first sequence of runs */ int first_runs, /* it's length */ int* second, /* second sequence of runs */ int second_runs, int* first_corr, /* correspond information for the 1st seq */ int* second_corr, int dst_len); /* correspond information for the 2nd seq */ /*========================== Dynamic correspond section ================================*/ CvStatus icvDynamicCorrespond( int* first, /* first sequence of runs */ /* s0|w0|s1|w1|...|s(n-1)|w(n-1)|sn */ int first_runs, /* number of runs */ int* second, /* second sequence of runs */ int second_runs, int* first_corr, /* s0'|e0'|s1'|e1'|... */ int* second_corr ); /*============================= PostWarp Functions =====================================*/ CvStatus icvFetchLine8uC3R( uchar* src, int src_step, uchar* dst, int* dst_num, CvSize src_size, CvPoint start, CvPoint end ); CvStatus icvDrawLine8uC3R( uchar* src, int src_num, uchar* dst, int dst_step, CvSize dst_size, CvPoint start, CvPoint end ); /*============================== Fundamental Matrix Functions ==========================*/ CvStatus icvPoint7( int* points1, int* points2, double* F, int* amount ); CvStatus icvCubic( double a2, double a1, double a0, double* squares ); double icvDet( double* M ); double icvMinor( double* M, int x, int y ); int icvGaussMxN( double *A, double *B, int M, int N, double **solutions ); CvStatus icvGetCoef( double *f1, double *f2, double *a2, double *a1, double *a0 ); /*================================= Scanlines Functions ================================*/ CvStatus icvGetCoefficient( CvMatrix3* matrix, CvSize imgSize, int* scanlines_1, int* scanlines_2, int* numlines); CvStatus icvGetCoefficientDefault( CvMatrix3* matrix, CvSize imgSize, int* scanlines_1, int* scanlines_2, int* numlines); CvStatus icvGetCoefficientStereo( CvMatrix3* matrix, CvSize imgSize, float* l_epipole, float* r_epipole, int* scanlines_1, int* scanlines_2, int* numlines ); CvStatus icvGetCoefficientOrto( CvMatrix3* matrix, CvSize imgSize, int* scanlines_1, int* scanlines_2, int* numlines); CvStatus icvGetCrossEpilineFrame( CvSize imgSize, float* epiline, int* x1, int* y1, int* x2, int* y2 ); CvStatus icvBuildScanlineLeftStereo( CvSize imgSize, CvMatrix3* matrix, float* l_epipole, float* l_angle, float l_radius, int* scanlines_1, int* scanlines_2, int* numlines); CvStatus icvBuildScanlineRightStereo( CvSize imgSize, CvMatrix3* matrix, float* r_epipole, float* r_angle, float r_radius, int* scanlines_1, int* scanlines_2, int* numlines); CvStatus icvGetStartEnd1( CvMatrix3* matrix, CvSize imgSize, float* l_start_end, float* r_start_end ); CvStatus icvGetStartEnd2( CvMatrix3* matrix, CvSize imgSize, float* l_start_end, float* r_start_end ); CvStatus icvGetStartEnd3( CvMatrix3* matrix, CvSize imgSize, float* l_start_end, float* r_start_end ); CvStatus icvGetStartEnd4( CvMatrix3* matrix, CvSize imgSize, float* l_start_end, float* r_start_end ); CvStatus icvBuildScanlineLeft( CvMatrix3* matrix, CvSize imgSize, int* scanlines_1, int* scanlines_2, float* l_start_end, int* numlines ); CvStatus icvBuildScanlineRight( CvMatrix3* matrix, CvSize imgSize, int* scanlines_1, int* scanlines_2, float* r_start_end, int* numlines ); /*=================================== LMedS Functions ==================================*/ CvStatus icvLMedS7( int* points1, int* points2, CvMatrix3* matrix); CvStatus icvLMedS( int* points1, int* points2, int numPoints, CvMatrix3* fundamentalMatrix ); /* CvStatus icvFindFundamentalMatrix( int* points1, int* points2, int numpoints, int method, CvMatrix3* matrix); */ void icvChoose7( int* ml, int* mr, int num, int* ml7, int* mr7 ); double icvMedian( int* ml, int* mr, int num, double* F ); int icvBoltingPoints( int* ml, int* mr, int num, double* F, double Mj, int* *new_ml, int* *new_mr, int* new_num); CvStatus icvPoints8( int* ml, int* mr, int num, double* F ); CvStatus icvRank2Constraint( double* F ); CvStatus icvSort( double* array, int length ); double icvAnalyticPoints8( double* A, int num, double* F ); int icvSingularValueDecomposition( int M, int N, double* A, double* W, int get_U, double* U, int get_V, double* V ); /*======================================================================================*/ #endif/*_CV_VM_H_*/