AlignFeatures.h revision e295e32b68cf04f0d99138bf4a6d25555f3aef99
1e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/* 2e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Copyright (C) 2011 The Android Open Source Project 3e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 4e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * you may not use this file except in compliance with the License. 6e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * You may obtain a copy of the License at 7e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 8e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * http://www.apache.org/licenses/LICENSE-2.0 9e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 10e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Unless required by applicable law or agreed to in writing, software 11e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * distributed under the License is distributed on an "AS IS" BASIS, 12e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * See the License for the specific language governing permissions and 14e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * limitations under the License. 15e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 16e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 17e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/////////////////////////////////////////////////// 18e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// Align.h 19e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// S.O. # : 20e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// Author(s): zkira 21e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// $Id: AlignFeatures.h,v 1.13 2011/06/17 13:35:47 mbansal Exp $ 22e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 23e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#ifndef ALIGN_H 24e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#define ALIGN_H 25e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 26e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include "dbreg/dbreg.h" 27e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include <db_utilities_camera.h> 28e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 29e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include "ImageUtils.h" 30e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include "MatrixUtils.h" 31e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 32e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenclass Align { 33e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 34e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenpublic: 35e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Types of alignment possible 36e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const int ALIGN_TYPE_PAN = 1; 37e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 38e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Return codes 39e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const int ALIGN_RET_ERROR = -1; 40e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const int ALIGN_RET_OK = 0; 41e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 42e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ///// Settings for feature-based alignment 43e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Number of features to use from corner detection 44e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const int DEFAULT_NR_CORNERS=750; 45e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const double DEFAULT_MAX_DISPARITY=0.1;//0.4; 46e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Type of homography to model 47e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const int DEFAULT_MOTION_MODEL=DB_HOMOGRAPHY_TYPE_R_T; 48e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// static const int DEFAULT_MOTION_MODEL=DB_HOMOGRAPHY_TYPE_PROJECTIVE; 49e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// static const int DEFAULT_MOTION_MODEL=DB_HOMOGRAPHY_TYPE_AFFINE; 50e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen static const unsigned int DEFAULT_REFERENCE_UPDATE_PERIOD=1500; // Manual reference frame update so set this to a large number 51e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 52e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen Align(); 53e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ~Align(); 54e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 55e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Initialization of structures, etc. 56e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int initialize(int width, int height, bool quarter_res, float thresh_still); 57e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 58e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Add a frame. Note: The alignment computation is performed 59e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // in this function 60e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int addFrameRGB(ImageType image); 61e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int addFrame(ImageType image); 62e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 63e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Obtain the TRS matrix from the last two frames 64e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int getLastTRS(double trs[3][3]); 65e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen char* getRegProfileString(); 66e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 67e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenprotected: 68e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 69e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen db_FrameToReferenceRegistration reg; 70e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 71e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int frame_number; 72e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double Happly[9]; // Homography to apply 73e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double Hcurr[9]; // Homography from last frame 74e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // (right now same as above) 75e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double Hprev[9]; // Homography up until the last frame 76e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 77e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int width,height; 78e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 79e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen bool quarter_res; // Whether to process at quarter resolution 80e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen float thresh_still; // Translation threshold in pixels to detect still camera 81e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ImageType imageGray; 82e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen}; 83e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 84e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 85e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#endif 86