/*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 ======================================*/
CV_INLINE int icvGetColor(uchar* valueRGB);
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_*/