fixed compile error undo win32 (due to int32_t using)
This commit is contained in:
parent
ac5298815a
commit
7bd4ba990a
@ -1433,6 +1433,7 @@ CV_EXPORTS Mat windowedMatchingMask( const vector<KeyPoint>& keypoints1, const v
|
|||||||
float maxDeltaX, float maxDeltaY );
|
float maxDeltaX, float maxDeltaY );
|
||||||
|
|
||||||
CV_EXPORTS Ptr<FeatureDetector> createFeatureDetector( const string& detectorType );
|
CV_EXPORTS Ptr<FeatureDetector> createFeatureDetector( const string& detectorType );
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* DescriptorExtractor *
|
* DescriptorExtractor *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
@ -1483,6 +1484,9 @@ protected:
|
|||||||
Size imageSize, int borderPixels );
|
Size imageSize, int borderPixels );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SiftDescriptorExtractor
|
||||||
|
*/
|
||||||
class CV_EXPORTS SiftDescriptorExtractor : public DescriptorExtractor
|
class CV_EXPORTS SiftDescriptorExtractor : public DescriptorExtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1504,6 +1508,9 @@ protected:
|
|||||||
SIFT sift;
|
SIFT sift;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SurfDescriptorExtractor
|
||||||
|
*/
|
||||||
class CV_EXPORTS SurfDescriptorExtractor : public DescriptorExtractor
|
class CV_EXPORTS SurfDescriptorExtractor : public DescriptorExtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1521,6 +1528,9 @@ protected:
|
|||||||
SURF surf;
|
SURF surf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CalonderDescriptorExtractor
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class CV_EXPORTS CalonderDescriptorExtractor : public DescriptorExtractor
|
class CV_EXPORTS CalonderDescriptorExtractor : public DescriptorExtractor
|
||||||
{
|
{
|
||||||
@ -1574,6 +1584,8 @@ void CalonderDescriptorExtractor<T>::write( FileStorage& ) const
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* OpponentColorDescriptorExtractor
|
||||||
|
*
|
||||||
* Adapts a descriptor extractor to compute descripors in Opponent Color Space
|
* Adapts a descriptor extractor to compute descripors in Opponent Color Space
|
||||||
* (refer to van de Sande et al., CGIV 2008 "Color Descriptors for Object Category Recognition").
|
* (refer to van de Sande et al., CGIV 2008 "Color Descriptors for Object Category Recognition").
|
||||||
* Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor
|
* Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor
|
||||||
@ -1597,6 +1609,105 @@ protected:
|
|||||||
Ptr<DescriptorExtractor> dextractor;
|
Ptr<DescriptorExtractor> dextractor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BRIEF Descriptor
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BriefDescriptorExtractor(int bytes = 32);
|
||||||
|
|
||||||
|
virtual void compute(const Mat& image, std::vector<KeyPoint>& keypoints, Mat& descriptors) const;
|
||||||
|
|
||||||
|
virtual int descriptorSize() const
|
||||||
|
{
|
||||||
|
return bytes_;
|
||||||
|
}
|
||||||
|
virtual int descriptorType() const
|
||||||
|
{
|
||||||
|
return CV_8UC1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @todo read and write for brief
|
||||||
|
//virtual void read(const FileNode& fn);
|
||||||
|
//virtual void write(FileStorage& fs) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static const int PATCH_SIZE = 48;
|
||||||
|
static const int KERNEL_SIZE = 9;
|
||||||
|
|
||||||
|
int bytes_;
|
||||||
|
typedef void(*PixelTestFn)(const Mat&, const std::vector<KeyPoint>&, Mat&);
|
||||||
|
PixelTestFn test_fn_;
|
||||||
|
|
||||||
|
static int smoothedSum(const Mat& sum, const KeyPoint& pt, int y, int x);
|
||||||
|
static void pixelTests16(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
||||||
|
static void pixelTests32(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
||||||
|
static void pixelTests64(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
inline int BriefDescriptorExtractor::smoothedSum(const Mat& sum, const KeyPoint& pt, int y, int x)
|
||||||
|
{
|
||||||
|
static const int HALF_KERNEL = KERNEL_SIZE / 2;
|
||||||
|
|
||||||
|
int img_y = (int)(pt.pt.y + 0.5) + y;
|
||||||
|
int img_x = (int)(pt.pt.x + 0.5) + x;
|
||||||
|
return sum.at<int> (img_y + HALF_KERNEL + 1, img_x + HALF_KERNEL + 1) - sum.at<int> (img_y + HALF_KERNEL + 1,
|
||||||
|
img_x - HALF_KERNEL)
|
||||||
|
- sum.at<int> (img_y - HALF_KERNEL, img_x + HALF_KERNEL + 1) + sum.at<int> (img_y - HALF_KERNEL, img_x
|
||||||
|
- HALF_KERNEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct CV_EXPORTS HammingLUT
|
||||||
|
{
|
||||||
|
typedef unsigned char ValueType;
|
||||||
|
typedef int ResultType;
|
||||||
|
|
||||||
|
ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const
|
||||||
|
{
|
||||||
|
ResultType result = 0;
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
result += byteBitsLookUp(a[i] ^ b[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/** \brief given a byte, count the bits using a compile time generated look up table
|
||||||
|
* \param b the byte to count bits. The look up table has an entry for all
|
||||||
|
* values of b, where that entry is the number of bits.
|
||||||
|
* \return the number of bits in byte b
|
||||||
|
*/
|
||||||
|
static unsigned char byteBitsLookUp(unsigned char b);
|
||||||
|
};
|
||||||
|
|
||||||
|
#if __GNUC__
|
||||||
|
/// Hamming distance functor
|
||||||
|
/// @todo Variable-length version, maybe default size=0 and specialize
|
||||||
|
/// @todo Need to choose C/SSE4 at runtime, but amortize this at matcher level for efficiency...
|
||||||
|
//template<int size>
|
||||||
|
struct Hamming
|
||||||
|
{
|
||||||
|
typedef unsigned char ValueType;
|
||||||
|
typedef int ResultType;
|
||||||
|
|
||||||
|
ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const
|
||||||
|
{
|
||||||
|
/// @todo Non-GCC-specific version
|
||||||
|
ResultType result = 0;
|
||||||
|
for (int i = 0; i < size; i += sizeof(unsigned long))
|
||||||
|
{
|
||||||
|
unsigned long a2 = *reinterpret_cast<const unsigned long*> (a + i);
|
||||||
|
unsigned long b2 = *reinterpret_cast<const unsigned long*> (b + i);
|
||||||
|
result += __builtin_popcountl(a2 ^ b2);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
typedef HammingLUT Hamming;
|
||||||
|
#endif
|
||||||
|
|
||||||
CV_EXPORTS Ptr<DescriptorExtractor> createDescriptorExtractor( const string& descriptorExtractorType );
|
CV_EXPORTS Ptr<DescriptorExtractor> createDescriptorExtractor( const string& descriptorExtractorType );
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
@ -2478,106 +2589,6 @@ protected:
|
|||||||
Ptr<DescriptorMatcher> dmatcher;
|
Ptr<DescriptorMatcher> dmatcher;
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************************\
|
|
||||||
* BRIEF Descriptor *
|
|
||||||
\****************************************************************************************/
|
|
||||||
|
|
||||||
class CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BriefDescriptorExtractor(int bytes = 32);
|
|
||||||
|
|
||||||
virtual void compute(const Mat& image, std::vector<KeyPoint>& keypoints, Mat& descriptors) const;
|
|
||||||
|
|
||||||
virtual int descriptorSize() const
|
|
||||||
{
|
|
||||||
return bytes_;
|
|
||||||
}
|
|
||||||
virtual int descriptorType() const
|
|
||||||
{
|
|
||||||
return CV_8UC1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @todo read and write for brief
|
|
||||||
//virtual void read(const FileNode& fn);
|
|
||||||
//virtual void write(FileStorage& fs) const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static const int PATCH_SIZE = 48;
|
|
||||||
static const int KERNEL_SIZE = 9;
|
|
||||||
|
|
||||||
int bytes_;
|
|
||||||
typedef void(*PixelTestFn)(const Mat&, const std::vector<KeyPoint>&, Mat&);
|
|
||||||
PixelTestFn test_fn_;
|
|
||||||
|
|
||||||
static int32_t smoothedSum(const Mat& sum, const KeyPoint& pt, int y, int x);
|
|
||||||
static void pixelTests16(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
|
||||||
static void pixelTests32(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
|
||||||
static void pixelTests64(const Mat& sum, const std::vector<KeyPoint>& keypoints, Mat& descriptors);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
inline int32_t BriefDescriptorExtractor::smoothedSum(const Mat& sum, const KeyPoint& pt, int y, int x)
|
|
||||||
{
|
|
||||||
static const int HALF_KERNEL = KERNEL_SIZE / 2;
|
|
||||||
|
|
||||||
int img_y = (int)(pt.pt.y + 0.5) + y;
|
|
||||||
int img_x = (int)(pt.pt.x + 0.5) + x;
|
|
||||||
return sum.at<int32_t> (img_y + HALF_KERNEL + 1, img_x + HALF_KERNEL + 1) - sum.at<int32_t> (img_y + HALF_KERNEL + 1,
|
|
||||||
img_x - HALF_KERNEL)
|
|
||||||
- sum.at<int32_t> (img_y - HALF_KERNEL, img_x + HALF_KERNEL + 1) + sum.at<int32_t> (img_y - HALF_KERNEL, img_x
|
|
||||||
- HALF_KERNEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct CV_EXPORTS HammingLUT
|
|
||||||
{
|
|
||||||
typedef unsigned char ValueType;
|
|
||||||
typedef int ResultType;
|
|
||||||
|
|
||||||
ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const
|
|
||||||
{
|
|
||||||
ResultType result = 0;
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
result += byteBitsLookUp(a[i] ^ b[i]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
/** \brief given a byte, count the bits using a compile time generated look up table
|
|
||||||
* \param b the byte to count bits. The look up table has an entry for all
|
|
||||||
* values of b, where that entry is the number of bits.
|
|
||||||
* \return the number of bits in byte b
|
|
||||||
*/
|
|
||||||
static unsigned char byteBitsLookUp(unsigned char b);
|
|
||||||
};
|
|
||||||
|
|
||||||
#if __GNUC__
|
|
||||||
/// Hamming distance functor
|
|
||||||
/// @todo Variable-length version, maybe default size=0 and specialize
|
|
||||||
/// @todo Need to choose C/SSE4 at runtime, but amortize this at matcher level for efficiency...
|
|
||||||
//template<int size>
|
|
||||||
struct Hamming
|
|
||||||
{
|
|
||||||
typedef unsigned char ValueType;
|
|
||||||
typedef int ResultType;
|
|
||||||
|
|
||||||
ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const
|
|
||||||
{
|
|
||||||
/// @todo Non-GCC-specific version
|
|
||||||
ResultType result = 0;
|
|
||||||
for (int i = 0; i < size; i += sizeof(unsigned long))
|
|
||||||
{
|
|
||||||
unsigned long a2 = *reinterpret_cast<const unsigned long*> (a + i);
|
|
||||||
unsigned long b2 = *reinterpret_cast<const unsigned long*> (b + i);
|
|
||||||
result += __builtin_popcountl(a2 ^ b2);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
typedef HammingLUT Hamming;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* namespace cv */
|
} /* namespace cv */
|
||||||
|
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user