Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV_FUN
opencv
提交
249edb2c
O
opencv
项目概览
OpenCV_FUN
/
opencv
与 Fork 源项目一致
Fork自
OpenCV / opencv
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
249edb2c
编写于
12月 01, 2017
作者:
A
Alexander Alekhin
提交者:
GitHub
12月 01, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10204 from alalek:fix_calib3d_fisheye_rectify_test_2.4
上级
7c0193bb
00cc4aa2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
76 addition
and
32 deletion
+76
-32
modules/calib3d/test/test_fisheye.cpp
modules/calib3d/test/test_fisheye.cpp
+76
-32
未找到文件。
modules/calib3d/test/test_fisheye.cpp
浏览文件 @
249edb2c
...
...
@@ -60,7 +60,7 @@ protected:
protected:
std
::
string
combine
(
const
std
::
string
&
_item1
,
const
std
::
string
&
_item2
);
cv
::
Mat
mergeRectification
(
const
cv
::
Mat
&
l
,
const
cv
::
Mat
&
r
);
static
void
merge4
(
const
cv
::
Mat
&
tl
,
const
cv
::
Mat
&
tr
,
const
cv
::
Mat
&
bl
,
const
cv
::
Mat
&
br
,
cv
::
Mat
&
merged
);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -385,11 +385,7 @@ TEST_F(fisheyeTest, EstimateUncertainties)
CV_Assert
(
errors
.
alpha
==
0
);
}
#ifdef HAVE_TEGRA_OPTIMIZATION
TEST_F
(
fisheyeTest
,
DISABLED_rectify
)
#else
TEST_F
(
fisheyeTest
,
rectify
)
#endif
TEST_F
(
fisheyeTest
,
stereoRectify
)
{
const
std
::
string
folder
=
combine
(
datasets_repository_path
,
"calib-3_stereo_from_JY"
);
...
...
@@ -405,20 +401,65 @@ TEST_F(fisheyeTest, rectify)
cv
::
fisheye
::
stereoRectify
(
K1
,
D1
,
K2
,
D2
,
calibration_size
,
theR
,
theT
,
R1
,
R2
,
P1
,
P2
,
Q
,
cv
::
CALIB_ZERO_DISPARITY
,
requested_size
,
balance
,
fov_scale
);
// Collected with these CMake flags: -DWITH_IPP=OFF -DCMAKE_BUILD_TYPE=Debug
cv
::
Matx33d
R1_ref
(
0.9992853269091279
,
0.03779164101000276
,
-
0.0007920188690205426
,
-
0.03778569762983931
,
0.9992646472015868
,
0.006511981857667881
,
0.001037534936357442
,
-
0.006477400933964018
,
0.9999784831677112
);
cv
::
Matx33d
R2_ref
(
0.9994868963898833
,
-
0.03197579751378937
,
-
0.001868774538573449
,
0.03196298186616116
,
0.9994677442608699
,
-
0.0065265589947392
,
0.002076471801477729
,
0.006463478587068991
,
0.9999769555891836
);
cv
::
Matx34d
P1_ref
(
420.8551870450913
,
0
,
586.501617798451
,
0
,
0
,
420.8551870450913
,
374.7667511986098
,
0
,
0
,
0
,
1
,
0
);
cv
::
Matx34d
P2_ref
(
420.8551870450913
,
0
,
586.501617798451
,
-
41.77758076597302
,
0
,
420.8551870450913
,
374.7667511986098
,
0
,
0
,
0
,
1
,
0
);
cv
::
Matx44d
Q_ref
(
1
,
0
,
0
,
-
586.501617798451
,
0
,
1
,
0
,
-
374.7667511986098
,
0
,
0
,
0
,
420.8551870450913
,
0
,
0
,
10.07370889670733
,
-
0
);
const
double
eps
=
1e-10
;
EXPECT_MAT_NEAR
(
R1_ref
,
R1
,
eps
);
EXPECT_MAT_NEAR
(
R2_ref
,
R2
,
eps
);
EXPECT_MAT_NEAR
(
P1_ref
,
P1
,
eps
);
EXPECT_MAT_NEAR
(
P2_ref
,
P2
,
eps
);
EXPECT_MAT_NEAR
(
Q_ref
,
Q
,
eps
);
if
(
::
testing
::
Test
::
HasFailure
())
{
std
::
cout
<<
"Actual values are:"
<<
std
::
endl
<<
"R1 ="
<<
std
::
endl
<<
R1
<<
std
::
endl
<<
"R2 ="
<<
std
::
endl
<<
R2
<<
std
::
endl
<<
"P1 ="
<<
std
::
endl
<<
P1
<<
std
::
endl
<<
"P2 ="
<<
std
::
endl
<<
P2
<<
std
::
endl
<<
"Q ="
<<
std
::
endl
<<
Q
<<
std
::
endl
;
}
#if 1 // Debug code
cv
::
Mat
lmapx
,
lmapy
,
rmapx
,
rmapy
;
//rewrite for fisheye
cv
::
fisheye
::
initUndistortRectifyMap
(
K1
,
D1
,
R1
,
P1
,
requested_size
,
CV_32F
,
lmapx
,
lmapy
);
cv
::
fisheye
::
initUndistortRectifyMap
(
K2
,
D2
,
R2
,
P2
,
requested_size
,
CV_32F
,
rmapx
,
rmapy
);
cv
::
Mat
l
,
r
,
lundist
,
rundist
;
cv
::
VideoCapture
lcap
(
combine
(
folder
,
"left/stereo_pair_%03d.jpg"
)),
rcap
(
combine
(
folder
,
"right/stereo_pair_%03d.jpg"
));
for
(
int
i
=
0
;;
++
i
)
for
(
int
i
=
0
;
i
<
34
;
++
i
)
{
lcap
>>
l
;
rcap
>>
r
;
if
(
l
.
empty
()
||
r
.
empty
())
break
;
SCOPED_TRACE
(
cv
::
format
(
"image %d"
,
i
));
l
=
imread
(
combine
(
folder
,
cv
::
format
(
"left/stereo_pair_%03d.jpg"
,
i
)),
cv
::
IMREAD_COLOR
);
r
=
imread
(
combine
(
folder
,
cv
::
format
(
"right/stereo_pair_%03d.jpg"
,
i
)),
cv
::
IMREAD_COLOR
);
ASSERT_FALSE
(
l
.
empty
());
ASSERT_FALSE
(
r
.
empty
());
int
ndisp
=
128
;
cv
::
rectangle
(
l
,
cv
::
Rect
(
255
,
0
,
829
,
l
.
rows
-
1
),
CV_RGB
(
255
,
0
,
0
));
...
...
@@ -427,15 +468,18 @@ TEST_F(fisheyeTest, rectify)
cv
::
remap
(
l
,
lundist
,
lmapx
,
lmapy
,
cv
::
INTER_LINEAR
);
cv
::
remap
(
r
,
rundist
,
rmapx
,
rmapy
,
cv
::
INTER_LINEAR
);
cv
::
Mat
rectification
=
mergeRectification
(
lundist
,
rundist
);
for
(
int
ii
=
0
;
ii
<
lundist
.
rows
;
ii
+=
20
)
{
cv
::
line
(
lundist
,
cv
::
Point
(
0
,
ii
),
cv
::
Point
(
lundist
.
cols
,
ii
),
cv
::
Scalar
(
0
,
255
,
0
));
cv
::
line
(
rundist
,
cv
::
Point
(
0
,
ii
),
cv
::
Point
(
lundist
.
cols
,
ii
),
cv
::
Scalar
(
0
,
255
,
0
));
}
cv
::
Mat
correct
=
cv
::
imread
(
combine
(
datasets_repository_path
,
cv
::
format
(
"rectification_AB_%03d.png"
,
i
)));
cv
::
Mat
rectification
;
merge4
(
l
,
r
,
lundist
,
rundist
,
rectification
);
if
(
correct
.
empty
())
cv
::
imwrite
(
combine
(
datasets_repository_path
,
cv
::
format
(
"rectification_AB_%03d.png"
,
i
)),
rectification
);
else
EXPECT_MAT_NEAR
(
correct
,
rectification
,
1e-10
);
}
cv
::
imwrite
(
cv
::
format
(
"fisheye_rectification_AB_%03d.png"
,
i
),
rectification
);
}
#endif
}
TEST_F
(
fisheyeTest
,
stereoCalibrate
)
...
...
@@ -601,17 +645,17 @@ std::string fisheyeTest::combine(const std::string& _item1, const std::string& _
return
item1
+
(
last
!=
'/'
?
"/"
:
""
)
+
item2
;
}
cv
::
Mat
fisheyeTest
::
mergeRectification
(
const
cv
::
Mat
&
l
,
const
cv
::
Mat
&
r
)
void
fisheyeTest
::
merge4
(
const
cv
::
Mat
&
tl
,
const
cv
::
Mat
&
tr
,
const
cv
::
Mat
&
bl
,
const
cv
::
Mat
&
br
,
cv
::
Mat
&
merged
)
{
CV_Assert
(
l
.
type
()
==
r
.
type
()
&&
l
.
size
()
==
r
.
size
()
);
cv
::
Mat
merged
(
l
.
rows
,
l
.
cols
*
2
,
l
.
type
()
);
cv
::
Mat
lpart
=
merged
.
colRange
(
0
,
l
.
cols
);
cv
::
Mat
rpart
=
merged
.
colRange
(
l
.
cols
,
merged
.
cols
);
l
.
copyTo
(
lpart
);
r
.
copyTo
(
rpart
);
for
(
int
i
=
0
;
i
<
l
.
rows
;
i
+=
20
)
cv
::
line
(
merged
,
cv
::
Point
(
0
,
i
),
cv
::
Point
(
merged
.
cols
,
i
),
CV_RGB
(
0
,
255
,
0
));
return
merged
;
int
type
=
tl
.
type
(
);
cv
::
Size
sz
=
tl
.
size
(
);
ASSERT_EQ
(
type
,
tr
.
type
());
ASSERT_EQ
(
type
,
bl
.
type
());
ASSERT_EQ
(
type
,
br
.
type
()
);
ASSERT_EQ
(
sz
.
width
,
tr
.
cols
);
ASSERT_EQ
(
sz
.
width
,
bl
.
cols
);
ASSERT_EQ
(
sz
.
width
,
br
.
cols
);
ASSERT_EQ
(
sz
.
height
,
tr
.
rows
);
ASSERT_EQ
(
sz
.
height
,
bl
.
rows
);
ASSERT_EQ
(
sz
.
height
,
br
.
rows
);
merged
.
create
(
cv
::
Size
(
sz
.
width
*
2
,
sz
.
height
*
2
),
type
);
tl
.
copyTo
(
merged
(
cv
::
Rect
(
0
,
0
,
sz
.
width
,
sz
.
height
)));
tr
.
copyTo
(
merged
(
cv
::
Rect
(
sz
.
width
,
0
,
sz
.
width
,
sz
.
height
)
));
bl
.
copyTo
(
merged
(
cv
::
Rect
(
0
,
sz
.
height
,
sz
.
width
,
sz
.
height
)));
bl
.
copyTo
(
merged
(
cv
::
Rect
(
sz
.
width
,
sz
.
height
,
sz
.
width
,
sz
.
height
)))
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录