00001 // **************************************************************************** 00002 // This file is part of the Integrating Vision Toolkit (IVT). 00003 // 00004 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT) 00005 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de). 00006 // 00007 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT). 00008 // All rights reserved. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are met: 00012 // 00013 // 1. Redistributions of source code must retain the above copyright 00014 // notice, this list of conditions and the following disclaimer. 00015 // 00016 // 2. Redistributions in binary form must reproduce the above copyright 00017 // notice, this list of conditions and the following disclaimer in the 00018 // documentation and/or other materials provided with the distribution. 00019 // 00020 // 3. Neither the name of the KIT nor the names of its contributors may be 00021 // used to endorse or promote products derived from this software 00022 // without specific prior written permission. 00023 // 00024 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY 00025 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY 00028 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00030 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00031 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00033 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 // **************************************************************************** 00035 // **************************************************************************** 00036 // Filename: HarrisSIFTFeatureCalculator.h 00037 // Author: Pedram Azad 00038 // Date: 20.11.2007 00039 // **************************************************************************** 00040 00044 #ifndef _HARRIS_SIFT_FEATURE_CALCULATOR__H_ 00045 #define _HARRIS_SIFT_FEATURE_CALCULATOR__H_ 00046 00047 00048 // **************************************************************************** 00049 // Necessary includes 00050 // **************************************************************************** 00051 00052 #include "Interfaces/FeatureCalculatorInterface.h" 00053 #include "DataStructures/DynamicArrayTemplatePointer.h" 00054 00055 00056 // **************************************************************************** 00057 // Forward declarations 00058 // **************************************************************************** 00059 00060 class CFeatureEntry; 00061 class CByteImage; 00062 struct Vec2d; 00063 00064 00065 00066 // **************************************************************************** 00067 // CHarrisSIFTFeatureCalculator 00068 // **************************************************************************** 00069 00074 class CHarrisSIFTFeatureCalculator : public CFeatureCalculatorInterface 00075 { 00076 public: 00077 // constructor 00078 CHarrisSIFTFeatureCalculator(float fThreshold = 0.01f, int nLayers = 3, int nMaxInterestPoints = 500); 00079 00080 // destructor 00081 ~CHarrisSIFTFeatureCalculator(); 00082 00083 00084 // public methods 00085 int CalculateFeatures(const CByteImage *pImage, CDynamicArray *pResultList, bool bManageMemory = true); 00086 int CalculateFeatures(const CByteImage *pImage, CDynamicArrayTemplatePointer<CFeatureEntry> &resultList); 00087 CFeatureEntry* CreateCopy(const CFeatureEntry *pFeatureEntry); 00088 00089 // member access 00090 void SetMaxInterestPoints(int nMaxInterestPoints) { m_nMaxInterestPoints = nMaxInterestPoints; } 00091 void SetThreshold(float fThreshold) { m_fThreshold = fThreshold;} 00092 void SetMinDistance(float fMinDistance) { m_fMinDistance = fMinDistance; } 00093 void SetNumberOfLevels(int nLevels) { m_nLevels = nLevels; } 00094 void SetPerform80PercentCheck(bool bPerform80PercentCheck) { m_bPerform80PercentCheck = bPerform80PercentCheck; } 00095 00096 int GetMaxInterestPoints() { return m_nMaxInterestPoints; } 00097 float GetThreshold() { return m_fThreshold; } 00098 float GetMinDistance() { return m_fMinDistance; } 00099 int GetNumberOfLevels() { return m_nLevels; } 00100 00101 const Vec2d* GetInterestPoints() const { return m_pInterestPoints; } 00102 int GetNumberOfInterestPoints() { return m_nInterestPoints; } 00103 00104 00105 private: 00106 // private methods 00107 void FindInterestPoints(const CByteImage *pImage, float scale, int nLevel); 00108 00109 // private attributes 00110 int m_nMaxInterestPoints; 00111 float m_fThreshold; 00112 float m_fMinDistance; 00113 int m_nLevels; 00114 bool m_bPerform80PercentCheck; 00115 00116 CDynamicArray *m_pResultList; 00117 CDynamicArrayTemplatePointer<CFeatureEntry> *m_pResultListTemplate; 00118 bool m_bTemplateList; 00119 bool m_bManageMemory; // only needed if CDynamicArray is used 00120 00121 const CByteImage *m_pImage; 00122 int m_nInterestPoints; 00123 Vec2d *m_pInterestPoints; 00124 }; 00125 00126 00127 00128 #endif /* _HARRIS_SIFT_FEATURE_CALCULATOR__H_ */