diff options
author | Wei-Ta Chen <weita@google.com> | 2011-06-14 16:53:04 -0700 |
---|---|---|
committer | Wei-Ta Chen <weita@google.com> | 2011-07-04 17:39:34 +0800 |
commit | e295e32b68cf04f0d99138bf4a6d25555f3aef99 (patch) | |
tree | 5bf19e321f357789344c0890f67f7dfa68aa8682 /jni/feature_stab/db_vlvm/db_feature_detection.h | |
parent | 95fd7f77171155a087b685ca405ac3891332f638 (diff) | |
download | LegacyCamera-e295e32b68cf04f0d99138bf4a6d25555f3aef99.zip LegacyCamera-e295e32b68cf04f0d99138bf4a6d25555f3aef99.tar.gz LegacyCamera-e295e32b68cf04f0d99138bf4a6d25555f3aef99.tar.bz2 |
Check in mosaic stitching codes - the native part
Updated to v4-3-2.
Bug: 4990566
Change-Id: I779dcc930323353964572918510f1492828c4db4
Diffstat (limited to 'jni/feature_stab/db_vlvm/db_feature_detection.h')
-rw-r--r-- | jni/feature_stab/db_vlvm/db_feature_detection.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/jni/feature_stab/db_vlvm/db_feature_detection.h b/jni/feature_stab/db_vlvm/db_feature_detection.h new file mode 100644 index 0000000..68ffcc9 --- /dev/null +++ b/jni/feature_stab/db_vlvm/db_feature_detection.h @@ -0,0 +1,179 @@ +/* + * 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_feature_detection.h,v 1.3 2011/06/17 14:03:30 mbansal Exp $*/ + +#ifndef DB_FEATURE_DETECTION_H +#define DB_FEATURE_DETECTION_H + +/***************************************************************** +* Lean and mean begins here * +*****************************************************************/ +/*! + * \defgroup FeatureDetection Feature Detection + */ +#include "db_utilities.h" +#include "db_utilities_constants.h" +#include <stdlib.h> //for NULL + +/*! + * \class db_CornerDetector_f + * \ingroup FeatureDetection + * \brief Harris corner detector for float images. + * + * This class performs Harris corner extraction on *float* images managed + * with functions in \ref LMImageBasicUtilities. + */ +class DB_API db_CornerDetector_f +{ +public: + db_CornerDetector_f(); + ~db_CornerDetector_f(); + + /*! + * Set parameters and pre-allocate memory. Return an upper bound + * on the number of corners detected in one frame. + * \param im_width width + * \param im_height height + * \param target_nr_corners + * \param nr_horizontal_blocks + * \param nr_vertical_blocks + * \param absolute_threshold + * \param relative_threshold + */ + unsigned long Init(int im_width,int im_height, + int target_nr_corners=DB_DEFAULT_TARGET_NR_CORNERS, + int nr_horizontal_blocks=DB_DEFAULT_NR_FEATURE_BLOCKS, + int nr_vertical_blocks=DB_DEFAULT_NR_FEATURE_BLOCKS, + double absolute_threshold=DB_DEFAULT_ABS_CORNER_THRESHOLD, + double relative_threshold=DB_DEFAULT_REL_CORNER_THRESHOLD); + + /*! + * Detect the corners. + * x_coord and y_coord should be pre-allocated arrays of length returned by Init(). + * \param img row array pointer + * \param x_coord corner locations + * \param y_coord corner locations + * \param nr_corners actual number of corners computed + */ + void DetectCorners(const float * const *img,double *x_coord,double *y_coord,int *nr_corners) const; + void SetAbsoluteThreshold(double a_thresh) { m_a_thresh = a_thresh; }; + void SetRelativeThreshold(double r_thresh) { m_r_thresh = r_thresh; }; +protected: + void Clean(); + unsigned long Start(int im_width,int im_height, + int block_width,int block_height,unsigned long area_factor, + double absolute_threshold,double relative_threshold,int chunkwidth); + + int m_w,m_h,m_cw,m_bw,m_bh; + /*Area factor holds the maximum number of corners to detect + per 10000 pixels*/ + unsigned long m_area_factor,m_max_nr; + double m_a_thresh,m_r_thresh; + float *m_temp_f; + double *m_temp_d; + float **m_strength,*m_strength_mem; +}; +/*! + * \class db_CornerDetector_u + * \ingroup FeatureDetection + * \brief Harris corner detector for byte images. + * + * This class performs Harris corner extraction on *byte* images managed + * with functions in \ref LMImageBasicUtilities. + */ +class DB_API db_CornerDetector_u +{ +public: + db_CornerDetector_u(); + virtual ~db_CornerDetector_u(); + + /*! + Copy ctor duplicates settings. + Memory is not copied. + */ + db_CornerDetector_u(const db_CornerDetector_u& cd); + /*! + Assignment optor duplicates settings. + Memory not copied. + */ + db_CornerDetector_u& operator=(const db_CornerDetector_u& cd); + + /*! + * Set parameters and pre-allocate memory. Return an upper bound + * on the number of corners detected in one frame + */ + virtual unsigned long Init(int im_width,int im_height, + int target_nr_corners=DB_DEFAULT_TARGET_NR_CORNERS, + int nr_horizontal_blocks=DB_DEFAULT_NR_FEATURE_BLOCKS, + int nr_vertical_blocks=DB_DEFAULT_NR_FEATURE_BLOCKS, + double absolute_threshold=DB_DEFAULT_ABS_CORNER_THRESHOLD, + double relative_threshold=DB_DEFAULT_REL_CORNER_THRESHOLD); + + /*! + * Detect the corners. + * Observe that the image should be overallocated by at least 256 bytes + * at the end. + * x_coord and y_coord should be pre-allocated arrays of length returned by Init(). + * Specifying image mask will restrict corner output to foreground regions. + * Foreground value can be specified using fgnd. By default any >0 mask value + * is considered to be foreground + * \param img row array pointer + * \param x_coord corner locations + * \param y_coord corner locations + * \param nr_corners actual number of corners computed + * \param msk row array pointer to mask image + * \param fgnd foreground value in the mask + */ + virtual void DetectCorners(const unsigned char * const *img,double *x_coord,double *y_coord,int *nr_corners, + const unsigned char * const * msk=NULL, unsigned char fgnd=255) const; + + /*! + Set absolute feature threshold + */ + virtual void SetAbsoluteThreshold(double a_thresh) { m_a_thresh = a_thresh; }; + /*! + Set relative feature threshold + */ + virtual void SetRelativeThreshold(double r_thresh) { m_r_thresh = r_thresh; }; + + /*! + Extract corners from a pre-computed strength image. + \param strength Harris strength image + \param x_coord corner locations + \param y_coord corner locations + \param nr_corners actual number of corners computed + */ + virtual void ExtractCorners(float ** strength, double *x_coord, double *y_coord, int *nr_corners); +protected: + virtual void Clean(); + /*The absolute threshold to this function should be 16.0 times + normal*/ + unsigned long Start(int im_width,int im_height, + int block_width,int block_height,unsigned long area_factor, + double absolute_threshold,double relative_threshold); + + int m_w,m_h,m_bw,m_bh; + /*Area factor holds the maximum number of corners to detect + per 10000 pixels*/ + unsigned long m_area_factor,m_max_nr; + double m_a_thresh,m_r_thresh; + int *m_temp_i; + double *m_temp_d; + float **m_strength,*m_strength_mem; +}; + +#endif /*DB_FEATURE_DETECTION_H*/ |