put template Distance classes back to features2d, since they are used in GPU; fixed OpenCV build with Xcode 2.3 (which includes new libpng)
This commit is contained in:
@@ -738,6 +738,101 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************\
|
||||||
|
* Distance *
|
||||||
|
\****************************************************************************************/
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct CV_EXPORTS Accumulator
|
||||||
|
{
|
||||||
|
typedef T Type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<> struct Accumulator<unsigned char> { typedef float Type; };
|
||||||
|
template<> struct Accumulator<unsigned short> { typedef float Type; };
|
||||||
|
template<> struct Accumulator<char> { typedef float Type; };
|
||||||
|
template<> struct Accumulator<short> { typedef float Type; };
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Squared Euclidean distance functor
|
||||||
|
*/
|
||||||
|
template<class T>
|
||||||
|
struct CV_EXPORTS SL2
|
||||||
|
{
|
||||||
|
enum { normType = NORM_L2SQR };
|
||||||
|
typedef T ValueType;
|
||||||
|
typedef typename Accumulator<T>::Type ResultType;
|
||||||
|
|
||||||
|
ResultType operator()( const T* a, const T* b, int size ) const
|
||||||
|
{
|
||||||
|
return normL2Sqr<ValueType, ResultType>(a, b, size);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Euclidean distance functor
|
||||||
|
*/
|
||||||
|
template<class T>
|
||||||
|
struct CV_EXPORTS L2
|
||||||
|
{
|
||||||
|
enum { normType = NORM_L2 };
|
||||||
|
typedef T ValueType;
|
||||||
|
typedef typename Accumulator<T>::Type ResultType;
|
||||||
|
|
||||||
|
ResultType operator()( const T* a, const T* b, int size ) const
|
||||||
|
{
|
||||||
|
return (ResultType)sqrt((double)normL2Sqr<ValueType, ResultType>(a, b, size));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Manhattan distance (city block distance) functor
|
||||||
|
*/
|
||||||
|
template<class T>
|
||||||
|
struct CV_EXPORTS L1
|
||||||
|
{
|
||||||
|
enum { normType = NORM_L1 };
|
||||||
|
typedef T ValueType;
|
||||||
|
typedef typename Accumulator<T>::Type ResultType;
|
||||||
|
|
||||||
|
ResultType operator()( const T* a, const T* b, int size ) const
|
||||||
|
{
|
||||||
|
return normL1<ValueType, ResultType>(a, b, size);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor
|
||||||
|
* bit count of A exclusive XOR'ed with B
|
||||||
|
*/
|
||||||
|
struct CV_EXPORTS Hamming
|
||||||
|
{
|
||||||
|
enum { normType = NORM_HAMMING };
|
||||||
|
typedef unsigned char ValueType;
|
||||||
|
typedef int ResultType;
|
||||||
|
|
||||||
|
/** this will count the bits in a ^ b
|
||||||
|
*/
|
||||||
|
ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const
|
||||||
|
{
|
||||||
|
return normHamming(a, b, size);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef Hamming HammingLUT;
|
||||||
|
|
||||||
|
template<int cellsize> struct CV_EXPORTS HammingMultilevel
|
||||||
|
{
|
||||||
|
enum { normType = NORM_HAMMING + (cellsize>1) };
|
||||||
|
typedef unsigned char ValueType;
|
||||||
|
typedef int ResultType;
|
||||||
|
|
||||||
|
ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const
|
||||||
|
{
|
||||||
|
return normHamming(a, b, size, cellsize);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* DMatch *
|
* DMatch *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
|
@@ -241,7 +241,8 @@ bool PngDecoder::readData( Mat& img )
|
|||||||
png_set_palette_to_rgb( png_ptr );
|
png_set_palette_to_rgb( png_ptr );
|
||||||
|
|
||||||
if( m_color_type == PNG_COLOR_TYPE_GRAY && m_bit_depth < 8 )
|
if( m_color_type == PNG_COLOR_TYPE_GRAY && m_bit_depth < 8 )
|
||||||
#if PNG_LIBPNG_VER_MAJOR*100 + PNG_LIBPNG_VER_MINOR >= 104
|
#if (PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE >= 10209) || \
|
||||||
|
(PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR == 0 && PNG_LIBPNG_VER_RELEASE >= 18)
|
||||||
png_set_expand_gray_1_2_4_to_8( png_ptr );
|
png_set_expand_gray_1_2_4_to_8( png_ptr );
|
||||||
#else
|
#else
|
||||||
png_set_gray_1_2_4_to_8( png_ptr );
|
png_set_gray_1_2_4_to_8( png_ptr );
|
||||||
|
@@ -2841,99 +2841,7 @@ bool CalonderDescriptorExtractor<T>::empty() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////// Distance & Brute Force Matcher //////////////////////////
|
////////////////////// Brute Force Matcher //////////////////////////
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
struct CV_EXPORTS Accumulator
|
|
||||||
{
|
|
||||||
typedef T Type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<> struct Accumulator<unsigned char> { typedef float Type; };
|
|
||||||
template<> struct Accumulator<unsigned short> { typedef float Type; };
|
|
||||||
template<> struct Accumulator<char> { typedef float Type; };
|
|
||||||
template<> struct Accumulator<short> { typedef float Type; };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Squared Euclidean distance functor
|
|
||||||
*/
|
|
||||||
template<class T>
|
|
||||||
struct CV_EXPORTS SL2
|
|
||||||
{
|
|
||||||
enum { normType = NORM_L2SQR };
|
|
||||||
typedef T ValueType;
|
|
||||||
typedef typename Accumulator<T>::Type ResultType;
|
|
||||||
|
|
||||||
ResultType operator()( const T* a, const T* b, int size ) const
|
|
||||||
{
|
|
||||||
return normL2Sqr<ValueType, ResultType>(a, b, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Euclidean distance functor
|
|
||||||
*/
|
|
||||||
template<class T>
|
|
||||||
struct CV_EXPORTS L2
|
|
||||||
{
|
|
||||||
enum { normType = NORM_L2 };
|
|
||||||
typedef T ValueType;
|
|
||||||
typedef typename Accumulator<T>::Type ResultType;
|
|
||||||
|
|
||||||
ResultType operator()( const T* a, const T* b, int size ) const
|
|
||||||
{
|
|
||||||
return (ResultType)sqrt((double)normL2Sqr<ValueType, ResultType>(a, b, size));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Manhattan distance (city block distance) functor
|
|
||||||
*/
|
|
||||||
template<class T>
|
|
||||||
struct CV_EXPORTS L1
|
|
||||||
{
|
|
||||||
enum { normType = NORM_L1 };
|
|
||||||
typedef T ValueType;
|
|
||||||
typedef typename Accumulator<T>::Type ResultType;
|
|
||||||
|
|
||||||
ResultType operator()( const T* a, const T* b, int size ) const
|
|
||||||
{
|
|
||||||
return normL1<ValueType, ResultType>(a, b, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor
|
|
||||||
* bit count of A exclusive XOR'ed with B
|
|
||||||
*/
|
|
||||||
struct CV_EXPORTS Hamming
|
|
||||||
{
|
|
||||||
enum { normType = NORM_HAMMING };
|
|
||||||
typedef unsigned char ValueType;
|
|
||||||
typedef int ResultType;
|
|
||||||
|
|
||||||
/** this will count the bits in a ^ b
|
|
||||||
*/
|
|
||||||
ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const
|
|
||||||
{
|
|
||||||
return normHamming(a, b, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef Hamming HammingLUT;
|
|
||||||
|
|
||||||
template<int cellsize> struct CV_EXPORTS HammingMultilevel
|
|
||||||
{
|
|
||||||
enum { normType = NORM_HAMMING + (cellsize>1) };
|
|
||||||
typedef unsigned char ValueType;
|
|
||||||
typedef int ResultType;
|
|
||||||
|
|
||||||
ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const
|
|
||||||
{
|
|
||||||
return normHamming(a, b, size, cellsize);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template<class Distance>
|
template<class Distance>
|
||||||
class CV_EXPORTS BruteForceMatcher : public BFMatcher
|
class CV_EXPORTS BruteForceMatcher : public BFMatcher
|
||||||
|
Reference in New Issue
Block a user