You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exercise_2/3rdparty/colmap-dev/lib/SiftGPU/PyramidCU.h

87 lines
2.8 KiB

////////////////////////////////////////////////////////////////////////////
// File: PyramidCU.h
// Author: Changchang Wu
// Description : interface for the PyramdCU
//
// 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
//
////////////////////////////////////////////////////////////////////////////
#ifndef _PYRAMID_CU_H
#define _PYRAMID_CU_H
#if defined(CUDA_SIFTGPU_ENABLED)
class GLTexImage;
class CuTexImage;
class SiftPyramid;
class PyramidCU:public SiftPyramid
{
CuTexImage* _inputTex;
CuTexImage* _allPyramid;
CuTexImage* _histoPyramidTex;
CuTexImage* _featureTex;
CuTexImage* _descriptorTex;
CuTexImage* _orientationTex;
GLuint _bufferPBO;
GLTexImage* _bufferTEX;
public:
virtual void GetFeatureDescriptors();
virtual void GenerateFeatureListTex();
virtual void ReshapeFeatureListCPU();
virtual void GenerateFeatureDisplayVBO();
virtual void DestroySharedData();
virtual void DestroyPerLevelData();
virtual void DestroyPyramidData();
virtual void DownloadKeypoints();
virtual void GenerateFeatureListCPU();
virtual void GenerateFeatureList();
virtual GLTexImage* GetLevelTexture(int octave, int level);
virtual GLTexImage* GetLevelTexture(int octave, int level, int dataName);
virtual void BuildPyramid(GLTexInput * input);
virtual void DetectKeypointsEX();
virtual void ComputeGradient();
virtual void GetFeatureOrientations();
virtual void GetSimplifiedOrientation();
virtual void InitPyramid(int w, int h, int ds = 0);
virtual void ResizePyramid(int w, int h);
virtual int IsUsingRectDescription(){return _existing_keypoints & SIFT_RECT_DESCRIPTION; }
//////////
void CopyGradientTex();
void FitPyramid(int w, int h);
void InitializeContext();
int ResizeFeatureStorage();
int FitHistogramPyramid(CuTexImage* tex);
void SetLevelFeatureNum(int idx, int fcount);
void ConvertInputToCU(GLTexInput* input);
GLTexImage* ConvertTexCU2GL(CuTexImage* tex, int dataName);
CuTexImage* GetBaseLevel(int octave, int dataName = DATA_GAUSSIAN);
void TruncateWidth(int& w) { w = GLTexInput::TruncateWidthCU(w); }
//////////////////////////
static int CheckCudaDevice(int device);
private:
void GenerateFeatureList(int i, int j, int reduction_count, vector<int>& hbuffer);
public:
PyramidCU(SiftParam& sp);
virtual ~PyramidCU();
};
#endif
#endif