43 #ifndef __OPENCV_GPU_FILTERS_HPP__
44 #define __OPENCV_GPU_FILTERS_HPP__
51 namespace cv {
namespace gpu {
namespace device
58 explicit __host__ __device__ __forceinline__
PointFilter(
const Ptr2D& src_,
float fx = 0.
f,
float fy = 0.
f)
67 return src(__float2int_rz(y), __float2int_rz(x));
78 explicit __host__ __device__ __forceinline__
LinearFilter(
const Ptr2D& src_,
float fx = 0.
f,
float fy = 0.
f)
90 const int x1 = __float2int_rd(x);
91 const int y1 = __float2int_rd(y);
92 const int x2 = x1 + 1;
93 const int y2 = y1 + 1;
96 out = out + src_reg * ((x2 -
x) * (y2 - y));
98 src_reg =
src(y1, x2);
99 out = out + src_reg * ((x - x1) * (y2 - y));
101 src_reg =
src(y2, x1);
102 out = out + src_reg * ((x2 -
x) * (y - y1));
104 src_reg =
src(y2, x2);
105 out = out + src_reg * ((x - x1) * (y - y1));
119 explicit __host__ __device__ __forceinline__
CubicFilter(
const Ptr2D& src_,
float fx = 0.
f,
float fy = 0.
f)
131 return x * x * (1.5f * x - 2.5f) + 1.0
f;
135 return x * (x * (-0.5f * x + 2.5f) - 4.0
f) + 2.0f;
145 const float xmin = ::ceilf(x - 2.0
f);
146 const float xmax = ::floorf(x + 2.0
f);
148 const float ymin = ::ceilf(y - 2.0
f);
149 const float ymax = ::floorf(y + 2.0
f);
154 for (
float cy = ymin; cy <= ymax; cy += 1.0f)
156 for (
float cx = xmin; cx <= xmax; cx += 1.0f)
159 sum = sum + w *
src(__float2int_rd(cy), __float2int_rd(cx));
177 explicit __host__ __device__ __forceinline__
IntegerAreaFilter(
const Ptr2D& src_,
float scale_x_,
float scale_y_)
185 int sx1 = __float2int_ru(fsx1);
186 int sx2 = __float2int_rd(fsx2);
191 int sy1 = __float2int_ru(fsy1);
192 int sy2 = __float2int_rd(fsy2);
197 for(
int dy = sy1;
dy < sy2; ++
dy)
198 for(
int dx = sx1;
dx < sx2; ++
dx)
215 explicit __host__ __device__ __forceinline__
AreaFilter(
const Ptr2D& src_,
float scale_x_,
float scale_y_)
223 int sx1 = __float2int_ru(fsx1);
224 int sx2 = __float2int_rd(fsx2);
229 int sy1 = __float2int_ru(fsy1);
230 int sy2 = __float2int_rd(fsy2);
232 float scale = 1.f / (fminf(scale_x,
src.width - fsx1) * fminf(scale_y,
src.height - fsy1));
237 for (
int dy = sy1;
dy < sy2; ++
dy)
239 for (
int dx = sx1;
dx < sx2; ++
dx)
243 out = out +
src(
dy, (sx1 -1) ) * ((sx1 - fsx1) * scale);
246 out = out +
src(
dy, sx2) * ((fsx2 -sx2) * scale);
250 for (
int dx = sx1;
dx < sx2; ++
dx)
251 out = out +
src( (sy1 - 1) ,
dx) * ((sy1 -fsy1) *
scale);
254 for (
int dx = sx1;
dx < sx2; ++
dx)
255 out = out +
src(sy2,
dx) * ((fsy2 -sy2) * scale);
257 if ((sy1 > fsy1) && (sx1 > fsx1))
258 out = out +
src( (sy1 - 1) , (sx1 - 1)) * ((sy1 -fsy1) * (sx1 -fsx1) *
scale);
260 if ((sy1 > fsy1) && (sx2 < fsx2))
261 out = out +
src( (sy1 - 1) , sx2) * ((sy1 -fsy1) * (fsx2 -sx2) *
scale);
263 if ((sy2 < fsy2) && (sx2 < fsx2))
264 out = out +
src(sy2, sx2) * ((fsy2 -sy2) * (fsx2 -sx2) *
scale);
266 if ((sy2 < fsy2) && (sx1 > fsx1))
267 out = out +
src(sy2, (sx1 - 1)) * ((fsy2 -sy2) * (sx1 -fsx1) *
scale);
278 #endif // __OPENCV_GPU_FILTERS_HPP__
const Ptr2D src
Definition: filters.hpp:70
GLenum GLint GLint y
Definition: core_c.h:613
schar vec_type
Definition: vec_traits.hpp:148
__host__ __device__ __forceinline__ PointFilter(const Ptr2D &src_, float fx=0.f, float fy=0.f)
Definition: filters.hpp:58
int width
Definition: filters.hpp:274
const Ptr2D src
Definition: filters.hpp:206
Definition: filters.hpp:73
Ptr2D::elem_type elem_type
Definition: filters.hpp:174
static __device__ __forceinline__ float bicubicCoeff(float x_)
Definition: filters.hpp:126
__device__ __forceinline__ elem_type operator()(float y, float x) const
Definition: filters.hpp:65
GLuint src
Definition: core_c.h:1650
__host__ __device__ __forceinline__ CubicFilter(const Ptr2D &src_, float fx=0.f, float fy=0.f)
Definition: filters.hpp:119
__device__ elem_type operator()(float y, float x) const
Definition: filters.hpp:143
float scale_y
Definition: filters.hpp:207
__host__ __device__ __forceinline__ AreaFilter(const Ptr2D &src_, float scale_x_, float scale_y_)
Definition: filters.hpp:215
Definition: filters.hpp:53
typedef void(CV_CDECL *CvMouseCallback)(int event
const Ptr2D src
Definition: filters.hpp:169
float index_type
Definition: filters.hpp:175
float scale_x
Definition: filters.hpp:273
Ptr2D::elem_type elem_type
Definition: filters.hpp:55
int haight
Definition: filters.hpp:274
float index_type
Definition: filters.hpp:116
Ptr2D::elem_type elem_type
Definition: filters.hpp:115
__device__ __forceinline__ elem_type operator()(float y, float x) const
Definition: filters.hpp:218
Ptr2D::elem_type elem_type
Definition: filters.hpp:212
__host__ __device__ __forceinline__ LinearFilter(const Ptr2D &src_, float fx=0.f, float fy=0.f)
Definition: filters.hpp:78
GLenum GLint x
Definition: core_c.h:632
Definition: filters.hpp:172
__host__ __device__ __forceinline__ IntegerAreaFilter(const Ptr2D &src_, float scale_x_, float scale_y_)
Definition: filters.hpp:177
float index_type
Definition: filters.hpp:56
const Ptr2D src
Definition: filters.hpp:272
__device__ __forceinline__ _Tp saturate_cast(uchar v)
Definition: saturate_cast.hpp:50
float scale
Definition: filters.hpp:207
CvScalar scale
Definition: core_c.h:518
Definition: filters.hpp:210
__device__ __forceinline__ elem_type operator()(float y, float x) const
Definition: filters.hpp:180
float scale_x
Definition: filters.hpp:207
Definition: vec_traits.hpp:50
Definition: filters.hpp:113
TypeVec< float, VecTraits< elem_type >::cn >::vec_type work_type
Definition: filters.hpp:117
float index_type
Definition: filters.hpp:213
__device__ __forceinline__ elem_type operator()(float y, float x) const
Definition: filters.hpp:84
CV_EXPORTS Scalar sum(const GpuMat &src)
GLubyte GLubyte GLubyte GLubyte w
int x
Definition: highgui_c.h:186
GLenum GLenum GLenum GLenum GLenum scale
float index_type
Definition: filters.hpp:76
const Ptr2D src
Definition: filters.hpp:110
Definition: vec_traits.hpp:160
Ptr2D::elem_type elem_type
Definition: filters.hpp:75
float scale_y
Definition: filters.hpp:273