Commit 69d034ec authored by Matthias Bady's avatar Matthias Bady

Naive impl. Slower than CPU

parent 388d0ef1
......@@ -1546,6 +1546,26 @@ namespace cv
int calcKeypointsOCL(const oclMat& img, const oclMat& mask, int maxKeypoints);
int nonmaxSupressionOCL(oclMat& keypoints);
};
////////////////////////////////// BRIEF Feature Descriptor //////////////////////////////////
class CV_EXPORTS BRIEF_OCL
{
public:
static const int PATCH_SIZE = 48;
static const int KERNEL_SIZE = 9;
explicit BRIEF_OCL( int _bytes = 32 );
/*
* Compute the descriptors for a set of keypoints in an image.
* image The image.
* keypoints The input keypoints. Keypoints for which a descriptor cannot be computed are removed.
* descriptors Copmputed descriptors. Row i is the descriptor for keypoint i.
*/
void compute( const oclMat& image, oclMat& keypoints, oclMat& descriptors ) const;
protected:
int bytes;
};
/////////////////////////////// PyrLKOpticalFlow /////////////////////////////////////
......
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
// Authors:
// * Matthias Bady, aegirxx ==> gmail.com
//
//M*/
#include "perf_precomp.hpp"
using namespace std;
using namespace cv;
using namespace ocl;
using namespace perf;
///////////// BRIEF ////////////////////////
typedef TestBaseWithParam<std::tr1::tuple<std::string, int> > OCL_BRIEF;
#define BRIEF_IMAGES \
"cv/detectors_descriptors_evaluation/images_datasets/leuven/img1.png",\
"stitching/a3.png"
PERF_TEST_P( OCL_BRIEF, extract, testing::Combine( testing::Values( BRIEF_IMAGES ), testing::Values( 16, 32, 64 ) ) )
{
const int threshold = 20;
const std::string filename = std::tr1::get<0>(GetParam( ));
const int bytes = std::tr1::get<1>(GetParam( ));
const Mat img = imread( getDataPath( filename ), IMREAD_GRAYSCALE );
ASSERT_FALSE( img.empty( ) );
if ( RUN_OCL_IMPL )
{
oclMat d_img( img );
oclMat d_keypoints;
FAST_OCL fast( threshold );
fast( d_img, oclMat( ), d_keypoints );
BRIEF_OCL brief( bytes );
OCL_TEST_CYCLE( )
{
oclMat d_descriptors;
brief.compute( d_img, d_keypoints, d_descriptors );
}
std::vector<KeyPoint> ocl_keypoints;
fast.downloadKeypoints( d_keypoints, ocl_keypoints );
SANITY_CHECK_KEYPOINTS( ocl_keypoints );
}
else if ( RUN_PLAIN_IMPL )
{
std::vector<KeyPoint> keypoints;
FAST( img, keypoints, threshold );
BriefDescriptorExtractor brief( bytes );
TEST_CYCLE( )
{
Mat descriptors;
brief.compute( img, keypoints, descriptors );
}
SANITY_CHECK_KEYPOINTS( keypoints );
}
else
OCL_PERF_ELSE;
}
\ No newline at end of file
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// @Authors
// Matthias Bady aegirxx ==> gmail.com
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
#include "opencl_kernels.hpp"
using namespace cv;
using namespace cv::ocl;
BRIEF_OCL::BRIEF_OCL( int _bytes ) : bytes( _bytes )
{
}
void
BRIEF_OCL::compute( const oclMat& image, oclMat& keypoints, oclMat& descriptors ) const
{
oclMat grayImage = image;
if ( image.type( ) != CV_8U ) cvtColor( image, grayImage, COLOR_BGR2GRAY );
oclMat sum;
integral( grayImage, sum, CV_32S );
cl_mem sumTexture = bindTexture(sum);
//TODO filter keypoints by border
oclMat xRow = keypoints.row( 0 );
oclMat yRow = keypoints.row( 1 );
descriptors = oclMat( keypoints.cols, bytes, CV_8U );
std::stringstream build_opt;
build_opt << " -D BYTES=" << bytes << " -D KERNEL_SIZE=" << KERNEL_SIZE;
const String kernelname = "extractBriefDescriptors";
size_t globalThreads[3] = {keypoints.cols, 1, 1};
size_t localThreads[3] = {1, 1, 1};
std::vector< std::pair<size_t, const void *> > args;
args.push_back(std::make_pair(sizeof(cl_mem), (void *)&sumTexture));
args.push_back(std::make_pair(sizeof(cl_mem), (void *)&xRow.data));
args.push_back(std::make_pair(sizeof(cl_mem), (void *)&yRow.data));
args.push_back(std::make_pair(sizeof(cl_mem), (void *)&descriptors.data));
Context* ctx = Context::getContext( );
openCLExecuteKernel( ctx, &brief, kernelname, globalThreads, localThreads, args, -1, -1, build_opt.str().c_str() );
openCLFree(sumTexture);
}
//optimiuerungsstrategieen:
// - vorher ganzes bild blurren (vgl. orb)
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment