Pass warp size into SURF
This commit is contained in:
@@ -57,19 +57,29 @@ namespace cv
|
|||||||
///////////////////////////OpenCL kernel strings///////////////////////////
|
///////////////////////////OpenCL kernel strings///////////////////////////
|
||||||
extern const char *surf;
|
extern const char *surf;
|
||||||
|
|
||||||
const char* noImage2dOption = "-D DISABLE_IMAGE2D";
|
const char noImage2dOption [] = "-D DISABLE_IMAGE2D";
|
||||||
|
|
||||||
|
static char SURF_OPTIONS [1024] = "";
|
||||||
|
static bool USE_IMAGE2d = false;
|
||||||
static void openCLExecuteKernelSURF(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3],
|
static void openCLExecuteKernelSURF(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3],
|
||||||
size_t localThreads[3], vector< pair<size_t, const void *> > &args, int channels, int depth)
|
size_t localThreads[3], vector< pair<size_t, const void *> > &args, int channels, int depth)
|
||||||
{
|
{
|
||||||
if(support_image2d())
|
char * pSURF_OPTIONS = SURF_OPTIONS;
|
||||||
|
static bool OPTION_INIT = false;
|
||||||
|
if(!OPTION_INIT)
|
||||||
{
|
{
|
||||||
openCLExecuteKernel(clCxt, source, kernelName, globalThreads, localThreads, args, channels, depth);
|
if( !USE_IMAGE2d )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
openCLExecuteKernel(clCxt, source, kernelName, globalThreads, localThreads, args, channels, depth, noImage2dOption);
|
strcat(pSURF_OPTIONS, noImage2dOption);
|
||||||
|
pSURF_OPTIONS += strlen(noImage2dOption);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t wave_size = 0;
|
||||||
|
queryDeviceInfo(DEVICE_INFO::WAVEFRONT_SIZE, &wave_size);
|
||||||
|
sprintf(pSURF_OPTIONS, " -D WAVE_SIZE=%d", static_cast<int>(wave_size));
|
||||||
|
OPTION_INIT = true;
|
||||||
|
}
|
||||||
|
openCLExecuteKernel(clCxt, source, kernelName, globalThreads, localThreads, args, channels, depth, SURF_OPTIONS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,9 +161,21 @@ public:
|
|||||||
|
|
||||||
integral(img, surf_.sum);
|
integral(img, surf_.sum);
|
||||||
if(support_image2d())
|
if(support_image2d())
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
bindImgTex(img, imgTex);
|
bindImgTex(img, imgTex);
|
||||||
bindImgTex(surf_.sum, sumTex);
|
bindImgTex(surf_.sum, sumTex);
|
||||||
|
USE_IMAGE2d = true;
|
||||||
|
}
|
||||||
|
catch (const cv::Exception& e)
|
||||||
|
{
|
||||||
|
USE_IMAGE2d = false;
|
||||||
|
if(e.code != CL_IMAGE_FORMAT_NOT_SUPPORTED && e.code != -217)
|
||||||
|
{
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maskSumTex = 0;
|
maskSumTex = 0;
|
||||||
|
@@ -178,7 +178,7 @@ TEST_P(SURF, Detector)
|
|||||||
EXPECT_GT(matchedRatio, 0.99);
|
EXPECT_GT(matchedRatio, 0.99);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(SURF, DISABLED_Descriptor)
|
TEST_P(SURF, Descriptor)
|
||||||
{
|
{
|
||||||
cv::Mat image = cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "c/fruits.jpg", cv::IMREAD_GRAYSCALE);
|
cv::Mat image = cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "c/fruits.jpg", cv::IMREAD_GRAYSCALE);
|
||||||
ASSERT_FALSE(image.empty());
|
ASSERT_FALSE(image.empty());
|
||||||
|
@@ -361,7 +361,7 @@ namespace cv
|
|||||||
{
|
{
|
||||||
case WAVEFRONT_SIZE:
|
case WAVEFRONT_SIZE:
|
||||||
{
|
{
|
||||||
#ifndef CL_DEVICE_WAVEFRONT_WIDTH_AMD
|
#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
|
||||||
openCLSafeCall(clGetDeviceInfo(Context::getContext()->impl->devices[0],
|
openCLSafeCall(clGetDeviceInfo(Context::getContext()->impl->devices[0],
|
||||||
CL_DEVICE_WAVEFRONT_WIDTH_AMD, sizeof(size_t), info, 0));
|
CL_DEVICE_WAVEFRONT_WIDTH_AMD, sizeof(size_t), info, 0));
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user