diff options
Diffstat (limited to 'jni/feature_stab/db_vlvm/db_rob_image_homography.h')
-rw-r--r-- | jni/feature_stab/db_vlvm/db_rob_image_homography.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/jni/feature_stab/db_vlvm/db_rob_image_homography.h b/jni/feature_stab/db_vlvm/db_rob_image_homography.h new file mode 100644 index 0000000..59cde7d --- /dev/null +++ b/jni/feature_stab/db_vlvm/db_rob_image_homography.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id: db_rob_image_homography.h,v 1.3 2011/06/17 14:03:31 mbansal Exp $ */ + +#ifndef DB_ROB_IMAGE_HOMOGRAPHY +#define DB_ROB_IMAGE_HOMOGRAPHY + +#include "db_utilities.h" +#include "db_robust.h" +#include "db_metrics.h" + +#include <stdlib.h> // for NULL + + +/***************************************************************** +* Lean and mean begins here * +*****************************************************************/ +/*! + * \defgroup LMRobImageHomography (LM) Robust Image Homography + */ +/*\{*/ + +#define DB_HOMOGRAPHY_TYPE_DEFAULT 0 +#define DB_HOMOGRAPHY_TYPE_PROJECTIVE 0 +#define DB_HOMOGRAPHY_TYPE_AFFINE 1 +#define DB_HOMOGRAPHY_TYPE_SIMILARITY 2 +#define DB_HOMOGRAPHY_TYPE_SIMILARITY_U 3 +#define DB_HOMOGRAPHY_TYPE_TRANSLATION 4 +#define DB_HOMOGRAPHY_TYPE_ROTATION 5 +#define DB_HOMOGRAPHY_TYPE_ROTATION_U 6 +#define DB_HOMOGRAPHY_TYPE_SCALING 7 +#define DB_HOMOGRAPHY_TYPE_S_T 8 +#define DB_HOMOGRAPHY_TYPE_R_T 9 +#define DB_HOMOGRAPHY_TYPE_R_S 10 +#define DB_HOMOGRAPHY_TYPE_CAMROTATION 11 +#define DB_HOMOGRAPHY_TYPE_CAMROTATION_F 12 +#define DB_HOMOGRAPHY_TYPE_CAMROTATION_F_UD 13 + +/*! +Solve for homography H such that xp~Hx +\param H best homography + +2D point to 2D point constraints: + +\param im first image points +\param im_p second image points +\param nr_points number of points + +Calibration matrices: + +\param K first camera +\param Kp second camera + + Temporary space: + + \param temp_d pre-allocated space of size 12*nr_samples+10*nr_points doubles + \param temp_i pre-allocated space of size max(nr_samples,nr_points) ints + + Statistics for this estimation + + \param stat NULL - do not compute + + \param homography_type see DB_HOMOGRAPHY_TYPE_* definitions above + + Estimation parameters: + + \param max_iterations max number of polishing steps + \param max_points only use this many points + \param scale Cauchy scale coefficient (see db_ExpCauchyReprojectionError() ) + \param nr_samples number of times to compute a hypothesis + \param chunk_size size of cost chunks +*/ +DB_API void db_RobImageHomography( + /*Best homography*/ + double H[9], + /*2DPoint to 2DPoint constraints + Points are assumed to be given in + homogenous coordinates*/ + double *im,double *im_p, + /*Nr of points in total*/ + int nr_points, + /*Calibration matrices + used to normalize the points*/ + double K[9], + double Kp[9], + /*Pre-allocated space temp_d + should point to at least + 12*nr_samples+10*nr_points + allocated positions*/ + double *temp_d, + /*Pre-allocated space temp_i + should point to at least + max(nr_samples,nr_points) + allocated positions*/ + int *temp_i, + int homography_type=DB_HOMOGRAPHY_TYPE_DEFAULT, + db_Statistics *stat=NULL, + int max_iterations=DB_DEFAULT_MAX_ITERATIONS, + int max_points=DB_DEFAULT_MAX_POINTS, + double scale=DB_POINT_STANDARDDEV, + int nr_samples=DB_DEFAULT_NR_SAMPLES, + int chunk_size=DB_DEFAULT_CHUNK_SIZE, + /////////////////////////////////////////////////// + // flag for the outlier removal + int outlierremoveflagE = 0, + // if flag is 1, then the following variables + // need to input + /////////////////////////////////////////////////// + // 3D coordinates + double *wp=NULL, + // its corresponding stereo pair's points + double *im_r=NULL, + // raw image coordinates + double *im_raw=NULL, double *im_raw_p=NULL, + // final matches + int *final_NumE=0); + +DB_API double db_RobImageHomography_Cost(double H[9],int point_count,double *x_i, + double *xp_i,double one_over_scale2); + + +DB_API void db_RobCamRotation_Polish(double H[9],int point_count,double *x_i, + double *xp_i, double one_over_scale2, + int max_iterations=DB_DEFAULT_MAX_ITERATIONS, + double improvement_requirement=DB_DEFAULT_IMP_REQ); + + +DB_API void db_RobCamRotation_Polish_Generic(double H[9],int point_count,int homography_type, + double *x_i,double *xp_i,double one_over_scale2, + int max_iterations=DB_DEFAULT_MAX_ITERATIONS, + double improvement_requirement=DB_DEFAULT_IMP_REQ); + + +#endif /* DB_ROB_IMAGE_HOMOGRAPHY */ |