自己写了下matlab张的标定程序,采用张正有网站上的数据,即数据文档Model.txt data1.txt data2.txt
data3.txt data4.txt data5.txt。
其中Model.txt为世界坐标系中的点
【实验结果】
我的程序:
k1
= -0.2286 k2
= 0.1903 fx
= 832.5000
fy
= 832.5298 cx
= 303.9589
cy
= 206.5848 skewness
= 0.2045
RR(:,:,1) =
0.9928 -0.0263 0.1172 -3.8402
0.0139 0.9943 0.1053 3.6516
-0.1193 -0.1029 0.9875 12.7910
RR(:,:,2) =
0.9974 -0.0048 0.0719 -3.7169
0.0176 0.9840 -0.1775 3.7693
-0.0699 0.1783 0.9815 13.1974
RR(:,:,3) =
0.9152 -0.0357 0.4014 -2.9441
-0.0081 0.9943 0.1068 3.7765
-0.4029 -0.1009 0.9097 14.2456
RR(:,:,4) =
0.9866 -0.0175 -0.1621 -3.4070
0.0338 0.9946 0.0978 3.6362
0.1595 -0.1020 0.9819 12.4551
RR(:,:,5) =
0.9676 -0.1969 -0.1581 -4.0724
0.1915 0.9803 -0.0486 3.2103
0.1646 0.0167 0.9862 14.3441
张网站上的数据:
832.5 0.204494 832.53 303.959 206.585 -0.228601
0.190353 0.992759 -0.026319 0.1172010.0139247
0.994339 0.105341-0.11931 -0.102947 0.987505-3.84019 3.65164
12.791 0.997397 -0.00482564 0.07194190.0175608
0.983971 -0.17746-0.0699324 0.178262 0.981495-3.71693 3.76928
13.1974 0.915213 -0.0356648 0.401389-0.00807547
0.994252 0.106756-0.402889 -0.100946 0.909665-2.94409 3.77653
14.2456 0.986617 -0.0175461 -0.162110.0337573
0.994634 0.09779530.159524 -0.101959 0.981915-3.40697 3.6362
12.4551 0.967585 -0.196899 -0.1581440.191542
0.980281 -0.04858270.164592 0.0167167 0.98622-4.07238 3.21033
14.3441
用matlab标定工具箱和网站上下载的demo 程序标定,精度很高
问题是自己用matlab工具箱标定的是时候精度却没有办法达到上图的精度,误差超过1个像素,不知道是什么原因?
可能原因有两个:
1、张用的标定图像数目只有5张有点少,但是编写matlab工具箱的作者却能用这5张图像得出和张网站上相同的内外参数与畸变参数。
2、张的标定和其他的标定板有一定的不同。
我猜测了下,为什么编写matlab工具箱的作者要单独写个m文件(当然调用工具箱的函数)而不直接在他的网站写出用gui的界面进行标定的步骤,在他的网站有其他例子的步骤。可能作者也发现直接用的工具箱标定所得到得结果误差有些大。以上所述个人猜测,本人用matlab工具箱标定opencv中自带的图像,精度在1个像素内,比自己用opencv所写的函数得到的结果还要高。实验结果图片就不在贴上去了,太多了~
参考:http://hi.baidu.com/lin65505578/item/35682a44202c662810ee1ea4