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 49typedef struct CvMatrix4 50{ 51 float m[4][4]; 52} 53CvMatrix4; 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 65CvStatus icvMakeScanlinesLengths( int* scanlines, 66 int numlines, 67 int* lens); 68 69/*=============================== PreWarp section ======================================*/ 70 71CV_INLINE int icvGetColor(uchar* valueRGB); 72 73CvStatus 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 82CvStatus 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 97CvStatus 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 107CvStatus icvFetchLine8uC3R( 108 uchar* src, int src_step, 109 uchar* dst, int* dst_num, 110 CvSize src_size, 111 CvPoint start, 112 CvPoint end ); 113 114CvStatus 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 ==========================*/ 123CvStatus icvPoint7( int* points1, 124 int* points2, 125 double* F, 126 int* amount 127 ); 128 129CvStatus icvCubic( double a2, double a1, 130 double a0, double* squares ); 131 132double icvDet( double* M ); 133double icvMinor( double* M, int x, int y ); 134 135int 136icvGaussMxN( double *A, double *B, int M, int N, double **solutions ); 137 138CvStatus 139icvGetCoef( double *f1, double *f2, double *a2, double *a1, double *a0 ); 140 141/*================================= Scanlines Functions ================================*/ 142 143CvStatus icvGetCoefficient( CvMatrix3* matrix, 144 CvSize imgSize, 145 int* scanlines_1, 146 int* scanlines_2, 147 int* numlines); 148 149CvStatus icvGetCoefficientDefault( CvMatrix3* matrix, 150 CvSize imgSize, 151 int* scanlines_1, 152 int* scanlines_2, 153 int* numlines); 154 155CvStatus 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 164CvStatus icvGetCoefficientOrto( CvMatrix3* matrix, 165 CvSize imgSize, 166 int* scanlines_1, 167 int* scanlines_2, 168 int* numlines); 169 170 171CvStatus icvGetCrossEpilineFrame( CvSize imgSize, 172 float* epiline, 173 int* x1, 174 int* y1, 175 int* x2, 176 int* y2 177 ); 178 179CvStatus 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 189CvStatus 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 199CvStatus icvGetStartEnd1( 200 CvMatrix3* matrix, 201 CvSize imgSize, 202 float* l_start_end, 203 float* r_start_end ); 204 205CvStatus icvGetStartEnd2( 206 CvMatrix3* matrix, 207 CvSize imgSize, 208 float* l_start_end, 209 float* r_start_end ); 210 211CvStatus icvGetStartEnd3( 212 CvMatrix3* matrix, 213 CvSize imgSize, 214 float* l_start_end, 215 float* r_start_end ); 216 217CvStatus icvGetStartEnd4( 218 CvMatrix3* matrix, 219 CvSize imgSize, 220 float* l_start_end, 221 float* r_start_end ); 222 223CvStatus 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 232CvStatus 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 ==================================*/ 243CvStatus icvLMedS7( 244 int* points1, 245 int* points2, 246 CvMatrix3* matrix); 247 248 249CvStatus icvLMedS( int* points1, 250 int* points2, 251 int numPoints, 252 CvMatrix3* fundamentalMatrix ); 253 254 255/* 256CvStatus icvFindFundamentalMatrix( 257 int* points1, 258 int* points2, 259 int numpoints, 260 int method, 261 CvMatrix3* matrix); 262*/ 263void icvChoose7( int* ml, int* mr, 264 int num, int* ml7, 265 int* mr7 ); 266 267double icvMedian( int* ml, int* mr, 268 int num, double* F ); 269 270int icvBoltingPoints( int* ml, int* mr, 271 int num, double* F, 272 double Mj, int* *new_ml, 273 int* *new_mr, int* new_num); 274 275CvStatus icvPoints8( int* ml, int* mr, 276 int num, double* F ); 277 278CvStatus icvRank2Constraint( double* F ); 279 280CvStatus icvSort( double* array, int length ); 281 282double icvAnalyticPoints8( double* A, 283 int num, double* F ); 284 285int 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