Home | History | Annotate | Download | only in src
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                        Intel License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
     14 // Third party copyrights are property of their respective owners.
     15 //
     16 // Redistribution and use in source and binary forms, with or without modification,
     17 // are permitted provided that the following conditions are met:
     18 //
     19 //   * Redistribution's of source code must retain the above copyright notice,
     20 //     this list of conditions and the following disclaimer.
     21 //
     22 //   * Redistribution's in binary form must reproduce the above copyright notice,
     23 //     this list of conditions and the following disclaimer in the documentation
     24 //     and/or other materials provided with the distribution.
     25 //
     26 //   * The name of Intel Corporation may not be used to endorse or promote products
     27 //     derived from this software without specific prior written permission.
     28 //
     29 // This software is provided by the copyright holders and contributors "as is" and
     30 // any express or implied warranties, including, but not limited to, the implied
     31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     32 // In no event shall the Intel Corporation or contributors be liable for any direct,
     33 // indirect, incidental, special, exemplary, or consequential damages
     34 // (including, but not limited to, procurement of substitute goods or services;
     35 // loss of use, data, or profits; or business interruption) however caused
     36 // and on any theory of liability, whether in contract, strict liability,
     37 // or tort (including negligence or otherwise) arising in any way out of
     38 // the use of this software, even if advised of the possibility of such damage.
     39 //
     40 //M*/
     41 
     42 #ifndef _CV_VM_H_
     43 #define _CV_VM_H_
     44 
     45 /*----------------------- Internal ViewMorphing Functions ------------------------------*/
     46 
     47 /*======================================================================================*/
     48 
     49 typedef struct CvMatrix4
     50 {
     51     float m[4][4];
     52 }
     53 CvMatrix4;
     54 
     55 
     56 /* Scanline section. Find coordinates by fundamental matrix */
     57 
     58 /* Epsilon and real zero */
     59 #define EPSILON             1.e-4
     60 //#define REAL_ZERO(x)        ( (x) < EPSILON && (x) > -EPSILON)
     61 #define REAL_ZERO(x) ( (x) < 1e-8 && (x) > -1e-8)
     62 
     63 #define SIGN(x)				( (x)<0 ? -1:((x)>0?1:0 ) )
     64 
     65 CvStatus  icvMakeScanlinesLengths( int*        scanlines,
     66                                     int         numlines,
     67                                     int*        lens);
     68 
     69 /*=============================== PreWarp section ======================================*/
     70 
     71 CV_INLINE int icvGetColor(uchar* valueRGB);
     72 
     73 CvStatus  icvFindRunsInOneImage(
     74                                 int     numLines,       /* number of scanlines		*/
     75                                 uchar*  prewarp,        /* prewarp image 			*/
     76                                 int*    line_lens,      /* line lengths in pixels	*/
     77                                 int*    runs,           /* result runs				*/
     78                                 int*    num_runs);
     79 
     80 /*================================ Morphing section ====================================*/
     81 
     82 CvStatus  icvMorphEpilines8uC3(    uchar*  first_pix, /* raster epiline from the first image       */
     83                                     uchar*  second_pix, /* raster epiline from the second image      */
     84                                     uchar*  dst_pix,    /* raster epiline from the destination image */
     85                                                         /* (it's an output parameter)                */
     86                                     float   alpha,      /* relative position of camera               */
     87                                     int*    first,      /* first sequence of runs                    */
     88                                     int     first_runs, /* it's length                               */
     89                                     int*    second,     /* second sequence of runs                   */
     90                                     int     second_runs,
     91                                     int*    first_corr, /* correspond information for the 1st seq    */
     92                                     int*    second_corr,
     93                                     int     dst_len);   /* correspond information for the 2nd seq    */
     94 
     95 /*========================== Dynamic correspond section ================================*/
     96 
     97 CvStatus  icvDynamicCorrespond(   int*  first,         /* first sequence of runs           */
     98                                                          /* s0|w0|s1|w1|...|s(n-1)|w(n-1)|sn */
     99                                     int   first_runs,    /* number of runs                   */
    100                                     int*  second,        /* second sequence of runs          */
    101                                     int   second_runs,
    102                                     int*  first_corr,    /* s0'|e0'|s1'|e1'|...              */
    103                                     int*  second_corr );
    104 
    105 /*============================= PostWarp Functions =====================================*/
    106 
    107 CvStatus  icvFetchLine8uC3R(
    108                                 uchar*   src,  int   src_step,
    109                                 uchar*   dst,  int*  dst_num,
    110                                 CvSize  src_size,
    111                                 CvPoint start,
    112                                 CvPoint end );
    113 
    114 CvStatus  icvDrawLine8uC3R(
    115                                 uchar*   src,  int  src_num,
    116                                 uchar*   dst,  int  dst_step,
    117                                 CvSize  dst_size,
    118                                 CvPoint start,
    119                                 CvPoint end );
    120 
    121 
    122 /*============================== Fundamental Matrix Functions ==========================*/
    123 CvStatus  icvPoint7(  int*        points1,
    124                         int*        points2,
    125                         double*     F,
    126                         int*        amount
    127                         );
    128 
    129 CvStatus  icvCubic(      double a2, double a1,
    130                             double a0, double* squares );
    131 
    132 double icvDet( double* M );
    133 double   icvMinor( double* M, int x, int y );
    134 
    135 int
    136 icvGaussMxN( double *A, double *B, int M, int N, double **solutions );
    137 
    138 CvStatus
    139 icvGetCoef( double *f1, double *f2, double *a2, double *a1, double *a0 );
    140 
    141 /*================================= Scanlines Functions ================================*/
    142 
    143 CvStatus  icvGetCoefficient(  CvMatrix3*     matrix,
    144                                 CvSize         imgSize,
    145                                 int*            scanlines_1,
    146                                 int*            scanlines_2,
    147                                 int*            numlines);
    148 
    149 CvStatus  icvGetCoefficientDefault(   CvMatrix3*     matrix,
    150                                         CvSize         imgSize,
    151                                         int*            scanlines_1,
    152                                         int*            scanlines_2,
    153                                         int*            numlines);
    154 
    155 CvStatus  icvGetCoefficientStereo(    CvMatrix3*     matrix,
    156                                         CvSize         imgSize,
    157                                         float*          l_epipole,
    158                                         float*          r_epipole,
    159                                         int*            scanlines_1,
    160                                         int*            scanlines_2,
    161                                         int*            numlines
    162                                     );
    163 
    164 CvStatus  icvGetCoefficientOrto(  CvMatrix3*     matrix,
    165                                     CvSize         imgSize,
    166                                     int*            scanlines_1,
    167                                     int*            scanlines_2,
    168                                     int*            numlines);
    169 
    170 
    171 CvStatus  icvGetCrossEpilineFrame(    CvSize     imgSize,
    172                                         float*      epiline,
    173                                         int*        x1,
    174                                         int*        y1,
    175                                         int*        x2,
    176                                         int*        y2
    177                                     );
    178 
    179 CvStatus  icvBuildScanlineLeftStereo(
    180                                         CvSize         imgSize,
    181                                         CvMatrix3*     matrix,
    182                                         float*          l_epipole,
    183                                         float*          l_angle,
    184                                         float           l_radius,
    185                                         int*            scanlines_1,
    186                                         int*            scanlines_2,
    187                                         int*            numlines);
    188 
    189 CvStatus  icvBuildScanlineRightStereo(
    190                                         CvSize         imgSize,
    191                                         CvMatrix3*     matrix,
    192                                         float*          r_epipole,
    193                                         float*          r_angle,
    194                                         float           r_radius,
    195                                         int*            scanlines_1,
    196                                         int*            scanlines_2,
    197                                         int*            numlines);
    198 
    199 CvStatus  icvGetStartEnd1(
    200                                     CvMatrix3*     matrix,
    201                                     CvSize         imgSize,
    202                                     float*          l_start_end,
    203                                     float*          r_start_end );
    204 
    205 CvStatus  icvGetStartEnd2(
    206                                     CvMatrix3*     matrix,
    207                                     CvSize         imgSize,
    208                                     float*          l_start_end,
    209                                     float*          r_start_end );
    210 
    211 CvStatus  icvGetStartEnd3(
    212                                     CvMatrix3*     matrix,
    213                                     CvSize         imgSize,
    214                                     float*          l_start_end,
    215                                     float*          r_start_end );
    216 
    217 CvStatus  icvGetStartEnd4(
    218                                     CvMatrix3*     matrix,
    219                                     CvSize         imgSize,
    220                                     float*          l_start_end,
    221                                     float*          r_start_end );
    222 
    223 CvStatus  icvBuildScanlineLeft(
    224                                     CvMatrix3*     matrix,
    225                                     CvSize         imgSize,
    226                                     int*            scanlines_1,
    227                                     int*            scanlines_2,
    228                                     float*          l_start_end,
    229                                     int*            numlines
    230                                     );
    231 
    232 CvStatus  icvBuildScanlineRight(
    233                                     CvMatrix3*     matrix,
    234                                     CvSize         imgSize,
    235                                     int*            scanlines_1,
    236                                     int*            scanlines_2,
    237                                     float*          r_start_end,
    238                                     int*            numlines
    239                                     );
    240 
    241 
    242 /*=================================== LMedS Functions ==================================*/
    243 CvStatus  icvLMedS7(
    244                         int*            points1,
    245                         int*            points2,
    246                         CvMatrix3*     matrix);
    247 
    248 
    249 CvStatus  icvLMedS(   int*    points1,
    250                         int*    points2,
    251                         int     numPoints,
    252                         CvMatrix3* fundamentalMatrix );
    253 
    254 
    255 /*
    256 CvStatus  icvFindFundamentalMatrix(
    257                                     int*            points1,
    258                                     int*            points2,
    259                                     int             numpoints,
    260                                     int             method,
    261                                     CvMatrix3*      matrix);
    262 */
    263 void   icvChoose7(	int*    ml,     int* mr,
    264 					    int     num,	int* ml7,
    265 					    int*   mr7 );
    266 
    267 double icvMedian(	int* ml, int* mr,
    268 				    int num, double* F );
    269 
    270 int icvBoltingPoints( int* ml,	    int* mr,
    271 					    int num,        double* F,
    272 					    double Mj,      int* *new_ml,
    273 					    int* *new_mr,   int* new_num);
    274 
    275 CvStatus  icvPoints8( int* ml, int* mr,
    276                         int num, double* F );
    277 
    278 CvStatus  icvRank2Constraint( double* F );
    279 
    280 CvStatus  icvSort( double* array, int length );
    281 
    282 double icvAnalyticPoints8(	double* A,
    283 											int num, double* F );
    284 
    285 int icvSingularValueDecomposition(	int		M,
    286 										int		N,
    287 										double*	A,
    288 										double*	W,
    289 										int		get_U,
    290 										double*	U,
    291 										int		get_V,
    292 										double*	V
    293 												 );
    294 
    295 
    296 /*======================================================================================*/
    297 #endif/*_CV_VM_H_*/
    298 
    299