Download include/colmap/lib/SiftGPU/SiftPyramid.h from camenduru/ceres-solver: direct link, hf CLI and curl.
- Browser
- Download file 6.33 kB
-
https://huggingface.co/camenduru/ceres-solver/resolve/main/include/colmap/lib/SiftGPU/SiftPyramid.h
- Command line
-
hf download hf://camenduru/ceres-solver/include/colmap/lib/SiftGPU/SiftPyramid.h
-
curl -L -o SiftPyramid.h https://huggingface.co/camenduru/ceres-solver/resolve/main/include/colmap/lib/SiftGPU/SiftPyramid.h
6.33 kB
| //////////////////////////////////////////////////////////////////////////// | |
| // File: SiftPyramid.h | |
| // Author: Changchang Wu | |
| // Description : interface for the SiftPyramid class. | |
| // SiftPyramid: data storage for SIFT | |
| // |---PyramidGL: OpenGL based implementation | |
| // | |--PyramidNaive: Unpacked version | |
| // | |--PyramidPacked: packed version | |
| // |--PyramidCU: CUDA-based implementation | |
| // | |
| // Copyright (c) 2007 University of North Carolina at Chapel Hill | |
| // All Rights Reserved | |
| // | |
| // Permission to use, copy, modify and distribute this software and its | |
| // documentation for educational, research and non-profit purposes, without | |
| // fee, and without a written agreement is hereby granted, provided that the | |
| // above copyright notice and the following paragraph appear in all copies. | |
| // | |
| // The University of North Carolina at Chapel Hill make no representations | |
| // about the suitability of this software for any purpose. It is provided | |
| // 'as is' without express or implied warranty. | |
| // | |
| // Please send BUG REPORTS to ccwu@cs.unc.edu | |
| // | |
| //////////////////////////////////////////////////////////////////////////// | |
| class GLTexImage; | |
| class GLTexInput; | |
| class SiftParam; | |
| class GlobalUtil; | |
| ///////////////////////////////////////////////////////////////////////////// | |
| //class SiftPyramid | |
| //description: virutal class of SIFT data pyramid | |
| // provides functions for SiftPU to run steps of GPU SIFT | |
| // class PyramidNaive is the first implementation | |
| // class PyramidPacked is a better OpenGL implementation | |
| // class PyramidCU is a CUDA based implementation | |
| ///////////////////////////////////////////////////////////////////////////// | |
| class SiftPyramid : public GlobalUtil | |
| { | |
| public: | |
| enum{ | |
| DATA_GAUSSIAN = 0, | |
| DATA_DOG = 1, | |
| DATA_KEYPOINT = 2, | |
| DATA_GRAD = 3, | |
| DATA_ROT = 4, | |
| DATA_NUM = 5 | |
| }; | |
| enum{ | |
| SIFT_SKIP_FILTERING = 0x01, | |
| SIFT_SKIP_DETECTION = 0x02, | |
| SIFT_SKIP_ORIENTATION = 0x04, | |
| SIFT_RECT_DESCRIPTION = 0x08 | |
| }; | |
| protected: | |
| SiftParam& param; | |
| int _hpLevelNum; | |
| int* _levelFeatureNum; | |
| int _featureNum; | |
| float* _histo_buffer; | |
| //keypoint list | |
| int _existing_keypoints; | |
| vector<int> _keypoint_index; | |
| //display vbo | |
| GLuint* _featureDisplayVBO; | |
| GLuint* _featurePointVBO; | |
| public: | |
| // | |
| float _timing[8]; | |
| //image size related | |
| //first octave | |
| int _octave_min; | |
| //how many octaves | |
| int _octave_num; | |
| //pyramid storage | |
| int _pyramid_octave_num; | |
| int _pyramid_octave_first; | |
| int _pyramid_width; | |
| int _pyramid_height; | |
| int _down_sample_factor; | |
| int _allocated; | |
| int _alignment; | |
| int _siftgpu_failed; | |
| public: | |
| vector<float> _keypoint_buffer; | |
| vector<float> _descriptor_buffer; | |
| private: | |
| inline void PrepareBuffer(); | |
| inline void LimitFeatureCount(int have_keylist = 0); | |
| public: | |
| //shared by all implementations | |
| virtual void RunSIFT(GLTexInput*input); | |
| virtual void SaveSIFT(const char * szFileName); | |
| virtual void CopyFeatureVector(float*keys, float *descriptors); | |
| virtual void SetKeypointList(int num, const float * keys, int run_on_current, int skip_orientation); | |
| //implementation-dependent functions | |
| virtual void GetFeatureDescriptors() = 0; | |
| virtual void GenerateFeatureListTex() =0; | |
| virtual void ReshapeFeatureListCPU() =0; | |
| virtual void GenerateFeatureDisplayVBO() =0; | |
| virtual void DownloadKeypoints() = 0; | |
| virtual void GenerateFeatureListCPU()=0; | |
| virtual void GenerateFeatureList()=0; | |
| virtual GLTexImage* GetLevelTexture(int octave, int level)=0; | |
| virtual GLTexImage* GetLevelTexture(int octave, int level, int dataName) = 0; | |
| virtual void BuildPyramid(GLTexInput * input)=0; | |
| virtual void ResizePyramid(int w, int h) = 0; | |
| virtual void InitPyramid(int w, int h, int ds = 0)=0; | |
| virtual void DetectKeypointsEX() = 0; | |
| virtual void ComputeGradient() = 0; | |
| virtual void GetFeatureOrientations() = 0; | |
| virtual void GetSimplifiedOrientation() = 0; | |
| //////////////////////////////// | |
| virtual void CleanUpAfterSIFT() {} | |
| virtual int IsUsingRectDescription() {return 0; } | |
| static int GetRequiredOctaveNum(int inputsz); | |
| ///inline functions, shared by all implementations | |
| inline void SetFailStatus() {_siftgpu_failed = 1; } | |
| inline int GetSucessStatus() {return _siftgpu_failed == 0; } | |
| inline int GetFeatureNum(){return _featureNum;} | |
| inline int GetHistLevelNum(){return _hpLevelNum;} | |
| inline const GLuint * GetFeatureDipslayVBO(){return _featureDisplayVBO;} | |
| inline const GLuint * GetPointDisplayVBO(){return _featurePointVBO;} | |
| inline const int * GetLevelFeatureNum(){return _levelFeatureNum;} | |
| inline void GetPyramidTiming(float * timing){ for(int i = 0; i < 8; i++) timing[i] = _timing[i]; } | |
| inline void CleanupBeforeSIFT() | |
| { | |
| _siftgpu_failed = 0; | |
| for(int i = 0; i < 8; ++i) _timing[i] = 0; | |
| } | |
| SiftPyramid(SiftParam&sp):param(sp) | |
| { | |
| _featureNum = 0; | |
| _featureDisplayVBO = 0; | |
| _featurePointVBO = 0; | |
| _levelFeatureNum = NULL; | |
| _histo_buffer = NULL; | |
| _hpLevelNum = 0; | |
| //image size | |
| _octave_num = 0; | |
| _octave_min = 0; | |
| _alignment = 1; | |
| _pyramid_octave_num = _pyramid_octave_first = 0; | |
| _pyramid_width = _pyramid_height = 0; | |
| _allocated = 0; | |
| _down_sample_factor = 0; | |
| ///// | |
| _existing_keypoints = 0; | |
| } | |
| virtual ~SiftPyramid() {}; | |
| private: | |
| void StopDEBUG(); | |
| void BeginDEBUG(const char* imagepath); | |
| void WriteTextureForDEBUG(GLTexImage * tex, const char * namet, ...); | |
| }; | |