OpenCV读入Matlab标定结果的格式
来源:互联网 发布:centos系统升级 编辑:程序博客网 时间:2024/06/06 16:43
由于OpenCV自带标定函数cvStereoCalibrate()不太准确,现在流行先用Matlab标定后,再讲.xml结果导入到OpenCV。
参考http://blog.csdn.net/sunanger_wang/article/details/7744025。
先利用Matlab标定得到如下所示的结果:
Intrinsic parameters of left camera:
Focal Length: fc_left = [ 209.35975 209.91146 ] ?[ 1.29389 1.28810 ]
Principal point: cc_left = [ 112.70811 83.34529 ] ?[ 2.94940 2.31088 ]
Skew: alpha_c_left = [ 0.00000 ] ?[ 0.00000 ] => angle of pixel axes = 90.00000 ?0.00000 degrees
Distortion: kc_left = [ 0.08414 -2.06248 -0.00441 0.00295 0.00000 ] ?[ 0.08103 0.71627 0.00294 0.00358 0.00000 ]
Intrinsic parameters of right camera:
Focal Length: fc_right = [ 1208.84080 1208.58242 ] ?[ 3.04212 3.10299 ]
Principal point: cc_right = [ 593.84687 340.22721 ] ?[ 5.56734 4.44145 ]
Skew: alpha_c_right = [ 0.00000 ] ?[ 0.00000 ] => angle of pixel axes = 90.00000 ?0.00000 degrees
Distortion: kc_right = [ -0.17114 0.00931 -0.00018 0.00056 0.00000 ] ?[ 0.01366 0.10070 0.00083 0.00097 0.00000 ]
Extrinsic parameters (position of right camera wrt left camera):
Rotation vector: om = [ -0.02893 -0.02493 0.00643 ] ?[ 0.01112 0.01464 0.00069 ]
Translation vector: T = [ -39.21639 -0.63083 15.74866 ] ?[ 0.47172 0.45645 2.87469 ]
需要通过以上参数形成可导入到openCV中的M/ D/ R/ T 共4类xml文件。
OpenCV中要求的M.xml格式为
<?xml version="1.0"?>
<opencv_storage>
<M1 type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
209.35975 0 112.70811 0
209.91146 83.34529
0 0 1</data></M1>
</opencv_storage>
即从左往右,从上往下5个数依次为
fx 0 cx
0 fy cy
0 0 1
而Matlab的存储格式为
Focal Length: fc_left = [ 209.35975 209.91146 ]
Principal point: cc_left = [ 112.70811 83.34529 ]
即
fc_left = [fx fy]
cc_left = [cx cy]
故将matlab数据复制粘贴成opencv可读取的格式即可实现M.xml。
OpenCV中要求的D.xml的格式为
<?xml version="1.0"?>
<opencv_storage>
<D2 type_id="opencv-matrix">
<rows>1</rows>
<cols>5</cols>
<dt>d</dt>
<data>
-0.93592 0.92449
-0.00315 -0.00319
0.00000</data></D2>
</opencv_storage>
即从左往右依次为
k1 k2 p1 p2 k3
而Matlab的存储格式为
Distortion: kc_left = [ 0.08414 -2.06248 -0.00441 0.00295 0.00000 ]
即
kc_left = [k1 k2 p1 p2 0],其一般把k3设为0(若是畸变很大的摄像机,则该项不能为0).
故将matlab数据复制粘贴成opencv可读取的格式即可实现M.xml。
OpenCV中要求的R/ T格式均为
分别相对于x,y,z轴的变化量
R:
<?xml version="1.0"?>
<opencv_storage>
<R type_id="opencv-matrix">
<rows>3</rows>
<cols>1</cols>
<dt>d</dt>
<data>
0.00378 -0.00646
-0.00241</data></R>
</opencv_storage>
Matlab中一样:
Rotation vector: om = [ -0.02893 -0.02493 0.00643 ] ?[ 0.01112 0.01464 0.00069 ]
一般读取后使用rodrigues()函数转为3x3矩阵使用。
T:
<?xml version="1.0"?>
<opencv_storage>
<T type_id="opencv-matrix">
<rows>3</rows>
<cols>1</cols>
<dt>d</dt>
<data>
-44.47222 0.18287 0.02478</data></T>
</opencv_storage>
Matlab中一样:
Translation vector: T = [ -39.21639 -0.63083 15.74866 ] ?[ 0.47172 0.45645 2.87469 ]
关于正负号可理解为“如何由右图像变为左图像”——从右指向左,和书上不同。
- OpenCV读入Matlab标定结果的格式
- 用matlab(或者 opencv)标定出来的结果为什么焦距有两个值
- 张正友摄像机标定的研究(MATLAB+OpenCV)
- 张正友摄像机标定的研究(MATLAB+OpenCV)
- 张正友摄像机标定的研究(MATLAB+OpenCV)
- 趣谈MATLAB的图像读入格式问题
- 相机标定之OpenCV&Matlab
- 相机标定之OpenCV&Matlab
- 相机标定之OpenCV&Matlab
- 相机标定入门教程【 OpenCV + Matlab】
- 相机标定之OpenCV&Matlab
- 基于MATLAB和opencv的单目摄像机标定
- Matlab立体标定mat转换成Opencv的CvMat
- Matlab读入的图像缘何和OpenCv的不一样?
- OpenCv下的xml文件在matlab下的读入
- 相机标定的理解及采用opencv和matlab工具箱的标定方法
- 基于matlab标定数据,使用opencv实现双目立体摄像头的标定(源代码)
- 基于matlab标定数据,使用opencv实现双目立体摄像头的标定(源代码)
- Tinker热修复简单使用与接入
- ssm+redis+solr小例子
- 1006. Sign In and Sign Out (25)
- 数据库没连上,远程数据库的网络不通
- 有关语音方面的深度学习资料合集
- OpenCV读入Matlab标定结果的格式
- J76121
- Android中文件的读写操作
- POJ-Primes
- 数学符号速查表
- Navicat系列数据库工具v12发布,最新版抢先体验!|附下载
- 设置IIS下PHP环境的DOCUMENT_ROOT
- display:none与visible:hidden的区别
- JS 点击复制Copy