Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
4b1724ae
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 8 个月
通知
982
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4b1724ae
编写于
6月 01, 2012
作者:
M
Marina Kolpakova
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix for ORB tests
上级
a3c4d1b6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
24 deletion
+27
-24
modules/gpu/src/orb.cpp
modules/gpu/src/orb.cpp
+27
-24
未找到文件。
modules/gpu/src/orb.cpp
浏览文件 @
4b1724ae
...
...
@@ -63,7 +63,7 @@ void cv::gpu::ORB_GPU::mergeKeyPoints(GpuMat&) { throw_nogpu(); }
#else
/* !defined (HAVE_CUDA) */
namespace
cv
{
namespace
gpu
{
namespace
device
namespace
cv
{
namespace
gpu
{
namespace
device
{
namespace
orb
{
...
...
@@ -345,8 +345,8 @@ namespace
9
,
-
7
,
10
,
-
2
/*mean (0.124978), correlation (0.549846)*/
,
7
,
0
,
12
,
-
2
/*mean (0.127002), correlation (0.537452)*/
,
-
1
,
-
6
,
0
,
-
11
/*mean (0.127148), correlation (0.547401)*/
};
};
void
initializeOrbPattern
(
const
Point
*
pattern0
,
Mat
&
pattern
,
int
ntuples
,
int
tupleSize
,
int
poolSize
)
{
RNG
rng
(
0x12345678
);
...
...
@@ -356,7 +356,7 @@ namespace
int
*
pattern_x_ptr
=
pattern
.
ptr
<
int
>
(
0
);
int
*
pattern_y_ptr
=
pattern
.
ptr
<
int
>
(
1
);
for
(
int
i
=
0
;
i
<
ntuples
;
i
++
)
{
for
(
int
k
=
0
;
k
<
tupleSize
;
k
++
)
...
...
@@ -386,8 +386,8 @@ namespace
{
// we always start with a fixed seed,
// to make patterns the same on each run
RNG
rng
(
0x34985739
);
RNG
rng
(
0x34985739
);
for
(
int
i
=
0
;
i
<
npoints
;
i
++
)
{
pattern
[
i
].
x
=
rng
.
uniform
(
-
patchSize
/
2
,
patchSize
/
2
+
1
);
...
...
@@ -400,11 +400,11 @@ cv::gpu::ORB_GPU::ORB_GPU(int nFeatures, float scaleFactor, int nLevels, int edg
nFeatures_
(
nFeatures
),
scaleFactor_
(
scaleFactor
),
nLevels_
(
nLevels
),
edgeThreshold_
(
edgeThreshold
),
firstLevel_
(
firstLevel
),
WTA_K_
(
WTA_K
),
scoreType_
(
scoreType
),
patchSize_
(
patchSize
),
fastDetector_
(
DEFAULT_FAST_THRESHOLD
)
{
{
// fill the extractors and descriptors for the corresponding scales
float
factor
=
1.0
f
/
scaleFactor_
;
float
n_desired_features_per_scale
=
nFeatures_
*
(
1.0
f
-
factor
)
/
(
1.0
f
-
std
::
pow
(
factor
,
nLevels_
));
n_features_per_level_
.
resize
(
nLevels_
);
size_t
sum_n_features
=
0
;
for
(
int
level
=
0
;
level
<
nLevels_
-
1
;
++
level
)
...
...
@@ -420,7 +420,7 @@ cv::gpu::ORB_GPU::ORB_GPU(int nFeatures, float scaleFactor, int nLevels, int edg
vector
<
int
>
u_max
(
half_patch_size
+
1
);
for
(
int
v
=
0
;
v
<=
half_patch_size
*
std
::
sqrt
(
2.
f
)
/
2
+
1
;
++
v
)
u_max
[
v
]
=
cvRound
(
std
::
sqrt
(
static_cast
<
float
>
(
half_patch_size
*
half_patch_size
-
v
*
v
)));
// Make sure we are symmetric
for
(
int
v
=
half_patch_size
,
v_0
=
0
;
v
>=
half_patch_size
*
std
::
sqrt
(
2.
f
)
/
2
;
--
v
)
{
...
...
@@ -431,7 +431,7 @@ cv::gpu::ORB_GPU::ORB_GPU(int nFeatures, float scaleFactor, int nLevels, int edg
}
CV_Assert
(
u_max
.
size
()
<
32
);
cv
::
gpu
::
device
::
orb
::
loadUMax
(
&
u_max
[
0
],
static_cast
<
int
>
(
u_max
.
size
()));
// Calc pattern
const
int
npoints
=
512
;
Point
pattern_buf
[
npoints
];
...
...
@@ -441,15 +441,15 @@ cv::gpu::ORB_GPU::ORB_GPU(int nFeatures, float scaleFactor, int nLevels, int edg
pattern0
=
pattern_buf
;
makeRandomPattern
(
patchSize_
,
pattern_buf
,
npoints
);
}
CV_Assert
(
WTA_K_
==
2
||
WTA_K_
==
3
||
WTA_K_
==
4
);
CV_Assert
(
WTA_K_
==
2
||
WTA_K_
==
3
||
WTA_K_
==
4
);
Mat
h_pattern
;
if
(
WTA_K_
==
2
)
{
h_pattern
.
create
(
2
,
npoints
,
CV_32SC1
);
int
*
pattern_x_ptr
=
h_pattern
.
ptr
<
int
>
(
0
);
int
*
pattern_y_ptr
=
h_pattern
.
ptr
<
int
>
(
1
);
...
...
@@ -466,7 +466,7 @@ cv::gpu::ORB_GPU::ORB_GPU(int nFeatures, float scaleFactor, int nLevels, int edg
}
pattern_
.
upload
(
h_pattern
);
blurFilter
=
createGaussianFilter_GPU
(
CV_8UC1
,
Size
(
7
,
7
),
2
,
2
,
BORDER_REFLECT_101
);
blurForDescriptor
=
false
;
...
...
@@ -497,7 +497,7 @@ void cv::gpu::ORB_GPU::buildScalePyramids(const GpuMat& image, const GpuMat& mas
ensureSizeIsEnough
(
sz
,
image
.
type
(),
imagePyr_
[
level
]);
ensureSizeIsEnough
(
sz
,
CV_8UC1
,
maskPyr_
[
level
]);
maskPyr_
[
level
].
setTo
(
Scalar
::
all
(
255
));
// Compute the resized image
if
(
level
!=
firstLevel_
)
{
...
...
@@ -513,7 +513,10 @@ void cv::gpu::ORB_GPU::buildScalePyramids(const GpuMat& image, const GpuMat& mas
resize
(
imagePyr_
[
level
-
1
],
imagePyr_
[
level
],
sz
,
0
,
0
,
INTER_LINEAR
);
if
(
!
mask
.
empty
())
{
resize
(
maskPyr_
[
level
-
1
],
maskPyr_
[
level
],
sz
,
0
,
0
,
INTER_LINEAR
);
threshold
(
maskPyr_
[
level
],
maskPyr_
[
level
],
254
,
0
,
THRESH_TOZERO
);
}
}
}
else
...
...
@@ -544,7 +547,7 @@ namespace
//this is only necessary if the keypoints size is greater than the number of desired points.
if
(
count
>
n_points
)
{
if
(
n_points
==
0
)
if
(
n_points
==
0
)
{
keypoints
.
release
();
return
;
...
...
@@ -563,7 +566,7 @@ void cv::gpu::ORB_GPU::computeKeyPointsPyramid()
keyPointsPyr_
.
resize
(
nLevels_
);
keyPointsCount_
.
resize
(
nLevels_
);
for
(
int
level
=
0
;
level
<
nLevels_
;
++
level
)
{
keyPointsCount_
[
level
]
=
fastDetector_
.
calcKeyPointsLocation
(
imagePyr_
[
level
],
maskPyr_
[
level
]);
...
...
@@ -588,7 +591,7 @@ void cv::gpu::ORB_GPU::computeKeyPointsPyramid()
// Compute the Harris cornerness (better scoring than FAST)
HarrisResponses_gpu
(
imagePyr_
[
level
],
keyPointsPyr_
[
level
].
ptr
<
short2
>
(
0
),
keyPointsPyr_
[
level
].
ptr
<
float
>
(
1
),
keyPointsCount_
[
level
],
7
,
HARRIS_K
,
0
);
}
}
//cull to the final desired level, using the new Harris scores or the original FAST scores.
cull
(
keyPointsPyr_
[
level
],
keyPointsCount_
[
level
],
n_features
);
...
...
@@ -618,7 +621,7 @@ void cv::gpu::ORB_GPU::computeDescriptors(GpuMat& descriptors)
int
offset
=
0
;
for
(
int
level
=
0
;
level
<
nLevels_
;
++
level
)
{
{
if
(
keyPointsCount_
[
level
]
==
0
)
continue
;
...
...
@@ -631,7 +634,7 @@ void cv::gpu::ORB_GPU::computeDescriptors(GpuMat& descriptors)
blurFilter
->
apply
(
imagePyr_
[
level
],
buf_
,
Rect
(
0
,
0
,
imagePyr_
[
level
].
cols
,
imagePyr_
[
level
].
rows
));
}
computeOrbDescriptor_gpu
(
blurForDescriptor
?
buf_
:
imagePyr_
[
level
],
keyPointsPyr_
[
level
].
ptr
<
short2
>
(
0
),
keyPointsPyr_
[
level
].
ptr
<
float
>
(
2
),
computeOrbDescriptor_gpu
(
blurForDescriptor
?
buf_
:
imagePyr_
[
level
],
keyPointsPyr_
[
level
].
ptr
<
short2
>
(
0
),
keyPointsPyr_
[
level
].
ptr
<
float
>
(
2
),
keyPointsCount_
[
level
],
pattern_
.
ptr
<
int
>
(
0
),
pattern_
.
ptr
<
int
>
(
1
),
descRange
,
descriptorSize
(),
WTA_K_
,
0
);
offset
+=
keyPointsCount_
[
level
];
...
...
@@ -656,7 +659,7 @@ void cv::gpu::ORB_GPU::mergeKeyPoints(GpuMat& keypoints)
ensureSizeIsEnough
(
ROWS_COUNT
,
nAllkeypoints
,
CV_32FC1
,
keypoints
);
int
offset
=
0
;
for
(
int
level
=
0
;
level
<
nLevels_
;
++
level
)
{
if
(
keyPointsCount_
[
level
]
==
0
)
...
...
@@ -664,15 +667,15 @@ void cv::gpu::ORB_GPU::mergeKeyPoints(GpuMat& keypoints)
float
sf
=
getScale
(
scaleFactor_
,
firstLevel_
,
level
);
GpuMat
keyPointsRange
=
keypoints
.
colRange
(
offset
,
offset
+
keyPointsCount_
[
level
]);
GpuMat
keyPointsRange
=
keypoints
.
colRange
(
offset
,
offset
+
keyPointsCount_
[
level
]);
float
locScale
=
level
!=
firstLevel_
?
sf
:
1.0
f
;
mergeLocation_gpu
(
keyPointsPyr_
[
level
].
ptr
<
short2
>
(
0
),
keyPointsRange
.
ptr
<
float
>
(
0
),
keyPointsRange
.
ptr
<
float
>
(
1
),
keyPointsCount_
[
level
],
locScale
,
0
);
GpuMat
range
=
keyPointsRange
.
rowRange
(
2
,
4
);
keyPointsPyr_
[
level
](
Range
(
1
,
3
),
Range
(
0
,
keyPointsCount_
[
level
])).
copyTo
(
range
);
keyPointsRange
.
row
(
4
).
setTo
(
Scalar
::
all
(
level
));
keyPointsRange
.
row
(
5
).
setTo
(
Scalar
::
all
(
patchSize_
*
sf
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录