Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
7d904146
O
Opencv
项目概览
Greenplum
/
Opencv
10 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7d904146
编写于
5月 15, 2013
作者:
V
Vadim Pisarevsky
提交者:
OpenCV Buildbot
5月 15, 2013
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #885 from pengx17:2.4_bfmatcher_ocl
上级
4d866ea3
d053f216
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
372 deletion
+5
-372
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/include/opencv2/ocl/ocl.hpp
+5
-372
未找到文件。
modules/ocl/include/opencv2/ocl/ocl.hpp
浏览文件 @
7d904146
...
...
@@ -866,7 +866,6 @@ namespace cv
std
::
vector
<
oclMat
>
image_sqsums
;
};
//! computes the proximity map for the raster template and the image where the template is searched for
// Supports TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED for type 8UC1 and 8UC4
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
...
...
@@ -877,71 +876,36 @@ namespace cv
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
CV_EXPORTS
void
matchTemplate
(
const
oclMat
&
image
,
const
oclMat
&
templ
,
oclMat
&
result
,
int
method
,
MatchTemplateBuf
&
buf
);
///////////////////////////////////////////// Canny /////////////////////////////////////////////
struct
CV_EXPORTS
CannyBuf
;
//! compute edges of the input image using Canny operator
// Support CV_8UC1 only
CV_EXPORTS
void
Canny
(
const
oclMat
&
image
,
oclMat
&
edges
,
double
low_thresh
,
double
high_thresh
,
int
apperture_size
=
3
,
bool
L2gradient
=
false
);
CV_EXPORTS
void
Canny
(
const
oclMat
&
image
,
CannyBuf
&
buf
,
oclMat
&
edges
,
double
low_thresh
,
double
high_thresh
,
int
apperture_size
=
3
,
bool
L2gradient
=
false
);
CV_EXPORTS
void
Canny
(
const
oclMat
&
dx
,
const
oclMat
&
dy
,
oclMat
&
edges
,
double
low_thresh
,
double
high_thresh
,
bool
L2gradient
=
false
);
CV_EXPORTS
void
Canny
(
const
oclMat
&
dx
,
const
oclMat
&
dy
,
CannyBuf
&
buf
,
oclMat
&
edges
,
double
low_thresh
,
double
high_thresh
,
bool
L2gradient
=
false
);
struct
CV_EXPORTS
CannyBuf
{
CannyBuf
()
:
counter
(
NULL
)
{}
~
CannyBuf
()
{
release
();
}
explicit
CannyBuf
(
const
Size
&
image_size
,
int
apperture_size
=
3
)
:
counter
(
NULL
)
{
create
(
image_size
,
apperture_size
);
}
CannyBuf
(
const
oclMat
&
dx_
,
const
oclMat
&
dy_
);
void
create
(
const
Size
&
image_size
,
int
apperture_size
=
3
);
void
release
();
oclMat
dx
,
dy
;
oclMat
dx_buf
,
dy_buf
;
oclMat
edgeBuf
;
oclMat
trackBuf1
,
trackBuf2
;
void
*
counter
;
Ptr
<
FilterEngine_GPU
>
filterDX
,
filterDY
;
};
///////////////////////////////////////// clAmdFft related /////////////////////////////////////////
...
...
@@ -966,159 +930,69 @@ namespace cv
const
oclMat
&
src3
,
double
beta
,
oclMat
&
dst
,
int
flags
=
0
);
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
struct
CV_EXPORTS
HOGDescriptor
{
enum
{
DEFAULT_WIN_SIGMA
=
-
1
};
enum
{
DEFAULT_NLEVELS
=
64
};
enum
{
DESCR_FORMAT_ROW_BY_ROW
,
DESCR_FORMAT_COL_BY_COL
};
HOGDescriptor
(
Size
win_size
=
Size
(
64
,
128
),
Size
block_size
=
Size
(
16
,
16
),
Size
block_stride
=
Size
(
8
,
8
),
Size
cell_size
=
Size
(
8
,
8
),
int
nbins
=
9
,
double
win_sigma
=
DEFAULT_WIN_SIGMA
,
double
threshold_L2hys
=
0.2
,
bool
gamma_correction
=
true
,
int
nlevels
=
DEFAULT_NLEVELS
);
size_t
getDescriptorSize
()
const
;
size_t
getBlockHistogramSize
()
const
;
void
setSVMDetector
(
const
vector
<
float
>
&
detector
);
static
vector
<
float
>
getDefaultPeopleDetector
();
static
vector
<
float
>
getPeopleDetector48x96
();
static
vector
<
float
>
getPeopleDetector64x128
();
void
detect
(
const
oclMat
&
img
,
vector
<
Point
>
&
found_locations
,
double
hit_threshold
=
0
,
Size
win_stride
=
Size
(),
Size
padding
=
Size
());
void
detectMultiScale
(
const
oclMat
&
img
,
vector
<
Rect
>
&
found_locations
,
double
hit_threshold
=
0
,
Size
win_stride
=
Size
(),
Size
padding
=
Size
(),
double
scale0
=
1.05
,
int
group_threshold
=
2
);
void
getDescriptors
(
const
oclMat
&
img
,
Size
win_stride
,
oclMat
&
descriptors
,
int
descr_format
=
DESCR_FORMAT_COL_BY_COL
);
Size
win_size
;
Size
block_size
;
Size
block_stride
;
Size
cell_size
;
int
nbins
;
double
win_sigma
;
double
threshold_L2hys
;
bool
gamma_correction
;
int
nlevels
;
protected:
// initialize buffers; only need to do once in case of multiscale detection
void
init_buffer
(
const
oclMat
&
img
,
Size
win_stride
);
void
computeBlockHistograms
(
const
oclMat
&
img
);
void
computeGradient
(
const
oclMat
&
img
,
oclMat
&
grad
,
oclMat
&
qangle
);
double
getWinSigma
()
const
;
bool
checkDetectorSize
()
const
;
static
int
numPartsWithin
(
int
size
,
int
part_size
,
int
stride
);
static
Size
numPartsWithin
(
Size
size
,
Size
part_size
,
Size
stride
);
// Coefficients of the separating plane
float
free_coef
;
oclMat
detector
;
// Results of the last classification step
oclMat
labels
;
Mat
labels_host
;
// Results of the last histogram evaluation step
oclMat
block_hists
;
// Gradients conputation results
oclMat
grad
,
qangle
;
// scaled image
oclMat
image_scale
;
// effect size of input image (might be different from original size after scaling)
Size
effect_size
;
};
...
...
@@ -1126,13 +1000,11 @@ namespace cv
/****************************************************************************************\
* Distance *
\****************************************************************************************/
template
<
typename
T
>
struct
CV_EXPORTS
Accumulator
{
typedef
T
Type
;
};
template
<
>
struct
Accumulator
<
unsigned
char
>
{
typedef
float
Type
;
...
...
@@ -1206,469 +1078,230 @@ namespace cv
{
public:
enum
DistType
{
L1Dist
=
0
,
L2Dist
,
HammingDist
};
explicit
BruteForceMatcher_OCL_base
(
DistType
distType
=
L2Dist
);
// Add descriptors to train descriptor collection
void
add
(
const
std
::
vector
<
oclMat
>
&
descCollection
);
// Get train descriptors collection
const
std
::
vector
<
oclMat
>
&
getTrainDescriptors
()
const
;
// Clear train descriptors collection
void
clear
();
// Return true if there are not train descriptors in collection
bool
empty
()
const
;
// Return true if the matcher supports mask in match methods
bool
isMaskSupported
()
const
;
// Find one best match for each query descriptor
void
matchSingle
(
const
oclMat
&
query
,
const
oclMat
&
train
,
oclMat
&
trainIdx
,
oclMat
&
distance
,
const
oclMat
&
mask
=
oclMat
());
// Download trainIdx and distance and convert it to CPU vector with DMatch
static
void
matchDownload
(
const
oclMat
&
trainIdx
,
const
oclMat
&
distance
,
std
::
vector
<
DMatch
>
&
matches
);
// Convert trainIdx and distance to vector with DMatch
static
void
matchConvert
(
const
Mat
&
trainIdx
,
const
Mat
&
distance
,
std
::
vector
<
DMatch
>
&
matches
);
// Find one best match for each query descriptor
void
match
(
const
oclMat
&
query
,
const
oclMat
&
train
,
std
::
vector
<
DMatch
>
&
matches
,
const
oclMat
&
mask
=
oclMat
());
// Make gpu collection of trains and masks in suitable format for matchCollection function
void
makeGpuCollection
(
oclMat
&
trainCollection
,
oclMat
&
maskCollection
,
const
std
::
vector
<
oclMat
>
&
masks
=
std
::
vector
<
oclMat
>
());
// Find one best match from train collection for each query descriptor
void
matchCollection
(
const
oclMat
&
query
,
const
oclMat
&
trainCollection
,
oclMat
&
trainIdx
,
oclMat
&
imgIdx
,
oclMat
&
distance
,
const
oclMat
&
masks
=
oclMat
());
// Download trainIdx, imgIdx and distance and convert it to vector with DMatch
static
void
matchDownload
(
const
oclMat
&
trainIdx
,
const
oclMat
&
imgIdx
,
const
oclMat
&
distance
,
std
::
vector
<
DMatch
>
&
matches
);
// Convert trainIdx, imgIdx and distance to vector with DMatch
static
void
matchConvert
(
const
Mat
&
trainIdx
,
const
Mat
&
imgIdx
,
const
Mat
&
distance
,
std
::
vector
<
DMatch
>
&
matches
);
// Find one best match from train collection for each query descriptor.
void
match
(
const
oclMat
&
query
,
std
::
vector
<
DMatch
>
&
matches
,
const
std
::
vector
<
oclMat
>
&
masks
=
std
::
vector
<
oclMat
>
());
// Find k best matches for each query descriptor (in increasing order of distances)
void
knnMatchSingle
(
const
oclMat
&
query
,
const
oclMat
&
train
,
oclMat
&
trainIdx
,
oclMat
&
distance
,
oclMat
&
allDist
,
int
k
,
const
oclMat
&
mask
=
oclMat
());
// Download trainIdx and distance and convert it to vector with DMatch
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
static
void
knnMatchDownload
(
const
oclMat
&
trainIdx
,
const
oclMat
&
distance
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Convert trainIdx and distance to vector with DMatch
static
void
knnMatchConvert
(
const
Mat
&
trainIdx
,
const
Mat
&
distance
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Find k best matches for each query descriptor (in increasing order of distances).
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
void
knnMatch
(
const
oclMat
&
query
,
const
oclMat
&
train
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
int
k
,
const
oclMat
&
mask
=
oclMat
(),
bool
compactResult
=
false
);
// Find k best matches from train collection for each query descriptor (in increasing order of distances)
void
knnMatch2Collection
(
const
oclMat
&
query
,
const
oclMat
&
trainCollection
,
oclMat
&
trainIdx
,
oclMat
&
imgIdx
,
oclMat
&
distance
,
const
oclMat
&
maskCollection
=
oclMat
());
// Download trainIdx and distance and convert it to vector with DMatch
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
static
void
knnMatch2Download
(
const
oclMat
&
trainIdx
,
const
oclMat
&
imgIdx
,
const
oclMat
&
distance
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Convert trainIdx and distance to vector with DMatch
static
void
knnMatch2Convert
(
const
Mat
&
trainIdx
,
const
Mat
&
imgIdx
,
const
Mat
&
distance
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Find k best matches for each query descriptor (in increasing order of distances).
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
void
knnMatch
(
const
oclMat
&
query
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
int
k
,
const
std
::
vector
<
oclMat
>
&
masks
=
std
::
vector
<
oclMat
>
(),
bool
compactResult
=
false
);
// Find best matches for each query descriptor which have distance less than maxDistance.
// nMatches.at<int>(0, queryIdx) will contain matches count for queryIdx.
// carefully nMatches can be greater than trainIdx.cols - it means that matcher didn't find all matches,
// because it didn't have enough memory.
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nTrain / 100), 10),
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
// Matches doesn't sorted.
void
radiusMatchSingle
(
const
oclMat
&
query
,
const
oclMat
&
train
,
oclMat
&
trainIdx
,
oclMat
&
distance
,
oclMat
&
nMatches
,
float
maxDistance
,
const
oclMat
&
mask
=
oclMat
());
// Download trainIdx, nMatches and distance and convert it to vector with DMatch.
// matches will be sorted in increasing order of distances.
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
static
void
radiusMatchDownload
(
const
oclMat
&
trainIdx
,
const
oclMat
&
distance
,
const
oclMat
&
nMatches
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Convert trainIdx, nMatches and distance to vector with DMatch.
static
void
radiusMatchConvert
(
const
Mat
&
trainIdx
,
const
Mat
&
distance
,
const
Mat
&
nMatches
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Find best matches for each query descriptor which have distance less than maxDistance
// in increasing order of distances).
void
radiusMatch
(
const
oclMat
&
query
,
const
oclMat
&
train
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
float
maxDistance
,
const
oclMat
&
mask
=
oclMat
(),
bool
compactResult
=
false
);
// Find best matches for each query descriptor which have distance less than maxDistance.
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nQuery / 100), 10),
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
// Matches doesn't sorted.
void
radiusMatchCollection
(
const
oclMat
&
query
,
oclMat
&
trainIdx
,
oclMat
&
imgIdx
,
oclMat
&
distance
,
oclMat
&
nMatches
,
float
maxDistance
,
const
std
::
vector
<
oclMat
>
&
masks
=
std
::
vector
<
oclMat
>
());
// Download trainIdx, imgIdx, nMatches and distance and convert it to vector with DMatch.
// matches will be sorted in increasing order of distances.
// compactResult is used when mask is not empty. If compactResult is false matches
// vector will have the same size as queryDescriptors rows. If compactResult is true
// matches vector will not contain matches for fully masked out query descriptors.
static
void
radiusMatchDownload
(
const
oclMat
&
trainIdx
,
const
oclMat
&
imgIdx
,
const
oclMat
&
distance
,
const
oclMat
&
nMatches
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Convert trainIdx, nMatches and distance to vector with DMatch.
static
void
radiusMatchConvert
(
const
Mat
&
trainIdx
,
const
Mat
&
imgIdx
,
const
Mat
&
distance
,
const
Mat
&
nMatches
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
bool
compactResult
=
false
);
// Find best matches from train collection for each query descriptor which have distance less than
// maxDistance (in increasing order of distances).
void
radiusMatch
(
const
oclMat
&
query
,
std
::
vector
<
std
::
vector
<
DMatch
>
>
&
matches
,
float
maxDistance
,
const
std
::
vector
<
oclMat
>
&
masks
=
std
::
vector
<
oclMat
>
(),
bool
compactResult
=
false
);
DistType
distType
;
private:
std
::
vector
<
oclMat
>
trainDescCollection
;
};
template
<
class
Distance
>
class
CV_EXPORTS
BruteForceMatcher_OCL
;
template
<
typename
T
>
class
CV_EXPORTS
BruteForceMatcher_OCL
<
L1
<
T
>
>
:
public
BruteForceMatcher_OCL_base
{
public:
explicit
BruteForceMatcher_OCL
()
:
BruteForceMatcher_OCL_base
(
L1Dist
)
{}
explicit
BruteForceMatcher_OCL
(
L1
<
T
>
/*d*/
)
:
BruteForceMatcher_OCL_base
(
L1Dist
)
{}
};
template
<
typename
T
>
class
CV_EXPORTS
BruteForceMatcher_OCL
<
L2
<
T
>
>
:
public
BruteForceMatcher_OCL_base
{
public:
explicit
BruteForceMatcher_OCL
()
:
BruteForceMatcher_OCL_base
(
L2Dist
)
{}
explicit
BruteForceMatcher_OCL
(
L2
<
T
>
/*d*/
)
:
BruteForceMatcher_OCL_base
(
L2Dist
)
{}
};
template
<
>
class
CV_EXPORTS
BruteForceMatcher_OCL
<
Hamming
>
:
public
BruteForceMatcher_OCL_base
{
public:
explicit
BruteForceMatcher_OCL
()
:
BruteForceMatcher_OCL_base
(
HammingDist
)
{}
explicit
BruteForceMatcher_OCL
(
Hamming
/*d*/
)
:
BruteForceMatcher_OCL_base
(
HammingDist
)
{}
};
class
CV_EXPORTS
BFMatcher_OCL
:
public
BruteForceMatcher_OCL_base
{
public:
explicit
BFMatcher_OCL
(
int
norm
=
NORM_L2
)
:
BruteForceMatcher_OCL_base
(
norm
==
NORM_L1
?
L1Dist
:
norm
==
NORM_L2
?
L2Dist
:
HammingDist
)
{}
};
/////////////////////////////// PyrLKOpticalFlow /////////////////////////////////////
class
CV_EXPORTS
PyrLKOpticalFlow
{
public:
PyrLKOpticalFlow
()
{
winSize
=
Size
(
21
,
21
);
maxLevel
=
3
;
iters
=
30
;
derivLambda
=
0.5
;
useInitialFlow
=
false
;
minEigThreshold
=
1e-4
f
;
getMinEigenVals
=
false
;
isDeviceArch11_
=
false
;
}
void
sparse
(
const
oclMat
&
prevImg
,
const
oclMat
&
nextImg
,
const
oclMat
&
prevPts
,
oclMat
&
nextPts
,
oclMat
&
status
,
oclMat
*
err
=
0
);
void
dense
(
const
oclMat
&
prevImg
,
const
oclMat
&
nextImg
,
oclMat
&
u
,
oclMat
&
v
,
oclMat
*
err
=
0
);
Size
winSize
;
int
maxLevel
;
int
iters
;
double
derivLambda
;
bool
useInitialFlow
;
float
minEigThreshold
;
bool
getMinEigenVals
;
void
releaseMemory
()
{
dx_calcBuf_
.
release
();
dy_calcBuf_
.
release
();
prevPyr_
.
clear
();
nextPyr_
.
clear
();
dx_buf_
.
release
();
dy_buf_
.
release
();
}
private:
void
calcSharrDeriv
(
const
oclMat
&
src
,
oclMat
&
dx
,
oclMat
&
dy
);
void
buildImagePyramid
(
const
oclMat
&
img0
,
vector
<
oclMat
>
&
pyr
,
bool
withBorder
);
oclMat
dx_calcBuf_
;
oclMat
dy_calcBuf_
;
vector
<
oclMat
>
prevPyr_
;
vector
<
oclMat
>
nextPyr_
;
oclMat
dx_buf_
;
oclMat
dy_buf_
;
oclMat
uPyr_
[
2
];
oclMat
vPyr_
[
2
];
bool
isDeviceArch11_
;
};
//////////////// build warping maps ////////////////////
//! builds plane warping maps
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录