Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
fe86f31f
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
fe86f31f
编写于
1月 28, 2013
作者:
I
Ilya Lysenkov
提交者:
Andrey Kamaev
1月 29, 2013
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added a test of CvModelEstimator2::checkSubset(...)
上级
d8f749da
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
227 addition
and
1 deletion
+227
-1
modules/calib3d/src/_modelest.h
modules/calib3d/src/_modelest.h
+1
-1
modules/calib3d/test/test_modelest.cpp
modules/calib3d/test/test_modelest.cpp
+226
-0
未找到文件。
modules/calib3d/src/_modelest.h
浏览文件 @
fe86f31f
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
#include "precomp.hpp"
#include "precomp.hpp"
class
CvModelEstimator2
class
C
V_EXPORTS
C
vModelEstimator2
{
{
public:
public:
CvModelEstimator2
(
int
_modelPoints
,
CvSize
_modelSize
,
int
_maxBasicSolutions
);
CvModelEstimator2
(
int
_modelPoints
,
CvSize
_modelSize
,
int
_maxBasicSolutions
);
...
...
modules/calib3d/test/test_modelest.cpp
0 → 100644
浏览文件 @
fe86f31f
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// Intel License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of Intel Corporation may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "test_precomp.hpp"
#include "_modelest.h"
using
namespace
cv
;
class
BareModelEstimator
:
public
CvModelEstimator2
{
public:
BareModelEstimator
(
int
modelPoints
,
CvSize
modelSize
,
int
maxBasicSolutions
);
virtual
int
runKernel
(
const
CvMat
*
,
const
CvMat
*
,
CvMat
*
);
virtual
void
computeReprojError
(
const
CvMat
*
,
const
CvMat
*
,
const
CvMat
*
,
CvMat
*
);
bool
checkSubsetPublic
(
const
CvMat
*
ms1
,
int
count
,
bool
checkPartialSubset
);
};
BareModelEstimator
::
BareModelEstimator
(
int
_modelPoints
,
CvSize
_modelSize
,
int
_maxBasicSolutions
)
:
CvModelEstimator2
(
_modelPoints
,
_modelSize
,
_maxBasicSolutions
)
{
}
int
BareModelEstimator
::
runKernel
(
const
CvMat
*
,
const
CvMat
*
,
CvMat
*
)
{
return
0
;
}
void
BareModelEstimator
::
computeReprojError
(
const
CvMat
*
,
const
CvMat
*
,
const
CvMat
*
,
CvMat
*
)
{
}
bool
BareModelEstimator
::
checkSubsetPublic
(
const
CvMat
*
ms1
,
int
count
,
bool
checkPartialSubset
)
{
checkPartialSubsets
=
checkPartialSubset
;
return
checkSubset
(
ms1
,
count
);
}
class
CV_ModelEstimator2_Test
:
public
cvtest
::
ArrayTest
{
public:
CV_ModelEstimator2_Test
();
protected:
void
get_test_array_types_and_sizes
(
int
test_case_idx
,
vector
<
vector
<
Size
>
>&
sizes
,
vector
<
vector
<
int
>
>&
types
);
void
fill_array
(
int
test_case_idx
,
int
i
,
int
j
,
Mat
&
arr
);
double
get_success_error_level
(
int
test_case_idx
,
int
i
,
int
j
);
void
run_func
();
void
prepare_to_validation
(
int
test_case_idx
);
bool
checkPartialSubsets
;
int
usedPointsCount
;
bool
checkSubsetResult
;
int
generalPositionsCount
;
int
maxPointsCount
;
};
CV_ModelEstimator2_Test
::
CV_ModelEstimator2_Test
()
{
generalPositionsCount
=
get_test_case_count
()
/
2
;
maxPointsCount
=
100
;
test_array
[
INPUT
].
push_back
(
NULL
);
test_array
[
OUTPUT
].
push_back
(
NULL
);
test_array
[
REF_OUTPUT
].
push_back
(
NULL
);
}
void
CV_ModelEstimator2_Test
::
get_test_array_types_and_sizes
(
int
/*test_case_idx*/
,
vector
<
vector
<
Size
>
>
&
sizes
,
vector
<
vector
<
int
>
>
&
types
)
{
RNG
&
rng
=
ts
->
get_rng
();
checkPartialSubsets
=
(
cvtest
::
randInt
(
rng
)
%
2
==
0
);
int
pointsCount
=
cvtest
::
randInt
(
rng
)
%
maxPointsCount
;
usedPointsCount
=
pointsCount
==
0
?
0
:
cvtest
::
randInt
(
rng
)
%
pointsCount
;
sizes
[
INPUT
][
0
]
=
cvSize
(
1
,
pointsCount
);
types
[
INPUT
][
0
]
=
CV_64FC2
;
sizes
[
OUTPUT
][
0
]
=
sizes
[
REF_OUTPUT
][
0
]
=
cvSize
(
1
,
1
);
types
[
OUTPUT
][
0
]
=
types
[
REF_OUTPUT
][
0
]
=
CV_8UC1
;
}
void
CV_ModelEstimator2_Test
::
fill_array
(
int
test_case_idx
,
int
i
,
int
j
,
Mat
&
arr
)
{
if
(
i
!=
INPUT
)
{
cvtest
::
ArrayTest
::
fill_array
(
test_case_idx
,
i
,
j
,
arr
);
return
;
}
if
(
test_case_idx
<
generalPositionsCount
)
{
//generate points in a general position (i.e. no three points can lie on the same line.)
bool
isGeneralPosition
;
do
{
ArrayTest
::
fill_array
(
test_case_idx
,
i
,
j
,
arr
);
//a simple check that the position is general:
// for each line check that all other points don't belong to it
isGeneralPosition
=
true
;
for
(
int
startPointIndex
=
0
;
startPointIndex
<
usedPointsCount
&&
isGeneralPosition
;
startPointIndex
++
)
{
for
(
int
endPointIndex
=
startPointIndex
+
1
;
endPointIndex
<
usedPointsCount
&&
isGeneralPosition
;
endPointIndex
++
)
{
for
(
int
testPointIndex
=
0
;
testPointIndex
<
usedPointsCount
&&
isGeneralPosition
;
testPointIndex
++
)
{
if
(
testPointIndex
==
startPointIndex
||
testPointIndex
==
endPointIndex
)
{
continue
;
}
CV_Assert
(
arr
.
type
()
==
CV_64FC2
);
Point2d
tangentVector_1
=
arr
.
at
<
Point2d
>
(
endPointIndex
)
-
arr
.
at
<
Point2d
>
(
startPointIndex
);
Point2d
tangentVector_2
=
arr
.
at
<
Point2d
>
(
testPointIndex
)
-
arr
.
at
<
Point2d
>
(
startPointIndex
);
const
float
eps
=
1e-4
;
//TODO: perhaps it is better to normalize the cross product by norms of the tangent vectors
if
(
fabs
(
tangentVector_1
.
cross
(
tangentVector_2
))
<
eps
)
{
isGeneralPosition
=
false
;
}
}
}
}
}
while
(
!
isGeneralPosition
);
}
else
{
//create points in a degenerate position (there are at least 3 points belonging to the same line)
ArrayTest
::
fill_array
(
test_case_idx
,
i
,
j
,
arr
);
if
(
usedPointsCount
<=
2
)
{
return
;
}
RNG
&
rng
=
ts
->
get_rng
();
int
startPointIndex
,
endPointIndex
,
modifiedPointIndex
;
do
{
startPointIndex
=
cvtest
::
randInt
(
rng
)
%
usedPointsCount
;
endPointIndex
=
cvtest
::
randInt
(
rng
)
%
usedPointsCount
;
modifiedPointIndex
=
checkPartialSubsets
?
usedPointsCount
-
1
:
cvtest
::
randInt
(
rng
)
%
usedPointsCount
;
}
while
(
startPointIndex
==
endPointIndex
||
startPointIndex
==
modifiedPointIndex
||
endPointIndex
==
modifiedPointIndex
);
double
startWeight
=
cvtest
::
randReal
(
rng
);
CV_Assert
(
arr
.
type
()
==
CV_64FC2
);
arr
.
at
<
Point2d
>
(
modifiedPointIndex
)
=
startWeight
*
arr
.
at
<
Point2d
>
(
startPointIndex
)
+
(
1.0
-
startWeight
)
*
arr
.
at
<
Point2d
>
(
endPointIndex
);
}
}
double
CV_ModelEstimator2_Test
::
get_success_error_level
(
int
/*test_case_idx*/
,
int
/*i*/
,
int
/*j*/
)
{
return
0
;
}
void
CV_ModelEstimator2_Test
::
prepare_to_validation
(
int
test_case_idx
)
{
test_mat
[
OUTPUT
][
0
].
at
<
uchar
>
(
0
)
=
checkSubsetResult
;
test_mat
[
REF_OUTPUT
][
0
].
at
<
uchar
>
(
0
)
=
test_case_idx
<
generalPositionsCount
||
usedPointsCount
<=
2
;
}
void
CV_ModelEstimator2_Test
::
run_func
()
{
//make the input continuous
Mat
input
=
test_mat
[
INPUT
][
0
].
clone
();
CvMat
_input
=
input
;
RNG
&
rng
=
ts
->
get_rng
();
int
modelPoints
=
cvtest
::
randInt
(
rng
);
CvSize
modelSize
=
cvSize
(
2
,
modelPoints
);
int
maxBasicSolutions
=
cvtest
::
randInt
(
rng
);
BareModelEstimator
modelEstimator
(
modelPoints
,
modelSize
,
maxBasicSolutions
);
checkSubsetResult
=
modelEstimator
.
checkSubsetPublic
(
&
_input
,
usedPointsCount
,
checkPartialSubsets
);
}
TEST
(
Calib3d_ModelEstimator2
,
accuracy
)
{
CV_ModelEstimator2_Test
test
;
test
.
safe_run
();
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录