Merge remote-tracking branch 'origin/2.4'
Pull requests: #943 from jet47:cuda-5.5-support #944 from jet47:cmake-2.8.11-cuda-fix #912 from SpecLad:contributing #934 from SpecLad:parallel-for #931 from jet47:gpu-test-fixes #932 from bitwangyaoyao:2.4_fixBFM #918 from bitwangyaoyao:2.4_samples #924 from pengx17:2.4_arithm_fix #925 from pengx17:2.4_canny_tmp_fix #927 from bitwangyaoyao:2.4_perf #930 from pengx17:2.4_haar_ext #928 from apavlenko:bugfix_3027 #920 from asmorkalov:android_move #910 from pengx17:2.4_oclgfft #913 from janm399:2.4 #916 from bitwangyaoyao:2.4_fixPyrLK #919 from abidrahmank:2.4 #923 from pengx17:2.4_macfix Conflicts: modules/calib3d/src/stereobm.cpp modules/features2d/src/detectors.cpp modules/gpu/src/error.cpp modules/gpu/src/precomp.hpp modules/imgproc/src/distransform.cpp modules/imgproc/src/morph.cpp modules/ocl/include/opencv2/ocl/ocl.hpp modules/ocl/perf/perf_color.cpp modules/ocl/perf/perf_imgproc.cpp modules/ocl/perf/perf_match_template.cpp modules/ocl/perf/precomp.cpp modules/ocl/perf/precomp.hpp modules/ocl/src/arithm.cpp modules/ocl/src/canny.cpp modules/ocl/src/filtering.cpp modules/ocl/src/haar.cpp modules/ocl/src/hog.cpp modules/ocl/src/imgproc.cpp modules/ocl/src/opencl/haarobjectdetect.cl modules/ocl/src/pyrlk.cpp modules/video/src/bgfg_gaussmix2.cpp modules/video/src/lkpyramid.cpp platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh platforms/scripts/ABI_compat_generator.py samples/ocl/facedetect.cpp
This commit is contained in:
@@ -258,7 +258,7 @@ interpolateKeypoint( float N9[3][9], int dx, int dy, int ds, KeyPoint& kpt )
|
||||
}
|
||||
|
||||
// Multi-threaded construction of the scale-space pyramid
|
||||
struct SURFBuildInvoker
|
||||
struct SURFBuildInvoker : ParallelLoopBody
|
||||
{
|
||||
SURFBuildInvoker( const Mat& _sum, const std::vector<int>& _sizes,
|
||||
const std::vector<int>& _sampleSteps,
|
||||
@@ -271,9 +271,9 @@ struct SURFBuildInvoker
|
||||
traces = &_traces;
|
||||
}
|
||||
|
||||
void operator()(const BlockedRange& range) const
|
||||
void operator()(const Range& range) const
|
||||
{
|
||||
for( int i=range.begin(); i<range.end(); i++ )
|
||||
for( int i=range.start; i<range.end; i++ )
|
||||
calcLayerDetAndTrace( *sum, (*sizes)[i], (*sampleSteps)[i], (*dets)[i], (*traces)[i] );
|
||||
}
|
||||
|
||||
@@ -285,7 +285,7 @@ struct SURFBuildInvoker
|
||||
};
|
||||
|
||||
// Multi-threaded search of the scale-space pyramid for keypoints
|
||||
struct SURFFindInvoker
|
||||
struct SURFFindInvoker : ParallelLoopBody
|
||||
{
|
||||
SURFFindInvoker( const Mat& _sum, const Mat& _mask_sum,
|
||||
const std::vector<Mat>& _dets, const std::vector<Mat>& _traces,
|
||||
@@ -310,9 +310,9 @@ struct SURFFindInvoker
|
||||
const std::vector<int>& sizes, std::vector<KeyPoint>& keypoints,
|
||||
int octave, int layer, float hessianThreshold, int sampleStep );
|
||||
|
||||
void operator()(const BlockedRange& range) const
|
||||
void operator()(const Range& range) const
|
||||
{
|
||||
for( int i=range.begin(); i<range.end(); i++ )
|
||||
for( int i=range.start; i<range.end; i++ )
|
||||
{
|
||||
int layer = (*middleIndices)[i];
|
||||
int octave = i / nOctaveLayers;
|
||||
@@ -333,14 +333,10 @@ struct SURFFindInvoker
|
||||
int nOctaveLayers;
|
||||
float hessianThreshold;
|
||||
|
||||
#ifdef HAVE_TBB
|
||||
static tbb::mutex findMaximaInLayer_m;
|
||||
#endif
|
||||
static Mutex findMaximaInLayer_m;
|
||||
};
|
||||
|
||||
#ifdef HAVE_TBB
|
||||
tbb::mutex SURFFindInvoker::findMaximaInLayer_m;
|
||||
#endif
|
||||
Mutex SURFFindInvoker::findMaximaInLayer_m;
|
||||
|
||||
|
||||
/*
|
||||
@@ -437,9 +433,7 @@ void SURFFindInvoker::findMaximaInLayer( const Mat& sum, const Mat& mask_sum,
|
||||
if( interp_ok )
|
||||
{
|
||||
/*printf( "KeyPoint %f %f %d\n", point.pt.x, point.pt.y, point.size );*/
|
||||
#ifdef HAVE_TBB
|
||||
tbb::mutex::scoped_lock lock(findMaximaInLayer_m);
|
||||
#endif
|
||||
cv::AutoLock lock(findMaximaInLayer_m);
|
||||
keypoints.push_back(kpt);
|
||||
}
|
||||
}
|
||||
@@ -505,20 +499,20 @@ static void fastHessianDetector( const Mat& sum, const Mat& mask_sum, std::vecto
|
||||
}
|
||||
|
||||
// Calculate hessian determinant and trace samples in each layer
|
||||
parallel_for( BlockedRange(0, nTotalLayers),
|
||||
SURFBuildInvoker(sum, sizes, sampleSteps, dets, traces) );
|
||||
parallel_for_( Range(0, nTotalLayers),
|
||||
SURFBuildInvoker(sum, sizes, sampleSteps, dets, traces) );
|
||||
|
||||
// Find maxima in the determinant of the hessian
|
||||
parallel_for( BlockedRange(0, nMiddleLayers),
|
||||
SURFFindInvoker(sum, mask_sum, dets, traces, sizes,
|
||||
sampleSteps, middleIndices, keypoints,
|
||||
nOctaveLayers, hessianThreshold) );
|
||||
parallel_for_( Range(0, nMiddleLayers),
|
||||
SURFFindInvoker(sum, mask_sum, dets, traces, sizes,
|
||||
sampleSteps, middleIndices, keypoints,
|
||||
nOctaveLayers, hessianThreshold) );
|
||||
|
||||
std::sort(keypoints.begin(), keypoints.end(), KeypointGreater());
|
||||
}
|
||||
|
||||
|
||||
struct SURFInvoker
|
||||
struct SURFInvoker : ParallelLoopBody
|
||||
{
|
||||
enum { ORI_RADIUS = 6, ORI_WIN = 60, PATCH_SZ = 20 };
|
||||
|
||||
@@ -566,7 +560,7 @@ struct SURFInvoker
|
||||
}
|
||||
}
|
||||
|
||||
void operator()(const BlockedRange& range) const
|
||||
void operator()(const Range& range) const
|
||||
{
|
||||
/* X and Y gradient wavelet data */
|
||||
const int NX=2, NY=2;
|
||||
@@ -584,7 +578,7 @@ struct SURFInvoker
|
||||
|
||||
int dsize = extended ? 128 : 64;
|
||||
|
||||
int k, k1 = range.begin(), k2 = range.end();
|
||||
int k, k1 = range.start, k2 = range.end;
|
||||
float maxSize = 0;
|
||||
for( k = k1; k < k2; k++ )
|
||||
{
|
||||
@@ -952,7 +946,7 @@ void SURF::operator()(InputArray _img, InputArray _mask,
|
||||
|
||||
// we call SURFInvoker in any case, even if we do not need descriptors,
|
||||
// since it computes orientation of each feature.
|
||||
parallel_for(BlockedRange(0, N), SURFInvoker(img, sum, keypoints, descriptors, extended, upright) );
|
||||
parallel_for_(Range(0, N), SURFInvoker(img, sum, keypoints, descriptors, extended, upright) );
|
||||
|
||||
// remove keypoints that were marked for deletion
|
||||
for( i = j = 0; i < N; i++ )
|
||||
|
Reference in New Issue
Block a user