From 084385cf38f84e2014ca7daa907274f365cd2925 Mon Sep 17 00:00:00 2001 From: yao Date: Tue, 12 Mar 2013 16:45:43 +0800 Subject: [PATCH] Fix a bug in ocl::Erode/Dilate, simplify the host logic --- modules/ocl/src/filtering.cpp | 18 ++++++++---------- modules/ocl/src/kernels/filtering_morph.cl | 6 +----- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/modules/ocl/src/filtering.cpp b/modules/ocl/src/filtering.cpp index 6697c95..e229fab 100644 --- a/modules/ocl/src/filtering.cpp +++ b/modules/ocl/src/filtering.cpp @@ -195,7 +195,7 @@ public: namespace { -typedef void (*GPUMorfFilter_t)(const oclMat & , oclMat & , oclMat & , Size &, const Point, bool rectKernel, bool usrROI); +typedef void (*GPUMorfFilter_t)(const oclMat & , oclMat & , oclMat & , Size &, const Point, bool rectKernel); class MorphFilter_GPU : public BaseFilter_GPU { @@ -205,7 +205,7 @@ public: virtual void operator()(const oclMat &src, oclMat &dst) { - func(src, dst, kernel, ksize, anchor, rectKernel, false) ; + func(src, dst, kernel, ksize, anchor, rectKernel) ; } oclMat kernel; @@ -220,7 +220,7 @@ public: **Note that the kernel need to be further refined. */ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, - Size &ksize, const Point anchor, bool rectKernel, bool useROI) + Size &ksize, const Point anchor, bool rectKernel) { //Normalize the result by default //float alpha = ksize.height * ksize.width; @@ -276,11 +276,10 @@ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, } char compile_option[128]; - sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D ERODE %s %s %s", + sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D ERODE %s %s", anchor.x, anchor.y, (int)localThreads[0], (int)localThreads[1], - rectKernel?"-D RECTKERNEL":"", - useROI?"-D USEROI":"", - s); + rectKernel?"-D RECTKERNEL":"", + s); vector< pair > args; args.push_back(make_pair(sizeof(cl_mem), (void *)&src.data)); args.push_back(make_pair(sizeof(cl_mem), (void *)&dst.data)); @@ -300,7 +299,7 @@ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, //! data type supported: CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4 static void GPUDilate(const oclMat &src, oclMat &dst, oclMat &mat_kernel, - Size &ksize, const Point anchor, bool rectKernel, bool useROI) + Size &ksize, const Point anchor, bool rectKernel) { //Normalize the result by default //float alpha = ksize.height * ksize.width; @@ -357,10 +356,9 @@ static void GPUDilate(const oclMat &src, oclMat &dst, oclMat &mat_kernel, } char compile_option[128]; - sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D DILATE %s %s %s", + sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D DILATE %s %s", anchor.x, anchor.y, (int)localThreads[0], (int)localThreads[1], rectKernel?"-D RECTKERNEL":"", - useROI?"-D USEROI":"", s); vector< pair > args; args.push_back(make_pair(sizeof(cl_mem), (void *)&src.data)); diff --git a/modules/ocl/src/kernels/filtering_morph.cl b/modules/ocl/src/kernels/filtering_morph.cl index f60d76a..4964000 100644 --- a/modules/ocl/src/kernels/filtering_morph.cl +++ b/modules/ocl/src/kernels/filtering_morph.cl @@ -120,8 +120,7 @@ __kernel void morph_C1_D0(__global const uchar * restrict src, int gidy = get_global_id(1); int out_addr = mad24(gidy,dst_step_in_pixel,gidx+dst_offset_in_pixel); -#ifdef USEROI - if(gidx+3