一:机器视觉标定目的:
相机标定得到的内参仅仅是对相机物理特性的【近似】。
传统相机标定假设相机是小孔成像模型,一般使用两种畸变来模拟镜片的物理畸变。但实际相机的物理特性很可能没办法通过上述假设来得到完全的拟合。所以需要意识到,每一次相机标定仅仅只是对物理相机模型的一次近似,再具体一点来说,每一次标定仅仅是对相机物理模型在采样空间范围内的一次近似。
所以当你成像物体所在的空间跟相机标定时的采样空间不一样的时候,你可能永远都没办法得到足够的精度,当你大幅改变相机与成像物体的距离的时候,你最好重新标定相机。如果你想在一个空间里得到更高的精度,你可以在空间里分层多次标定,实际计算的时候通过其他方式得到成像距离,从而选择合适的标定参数。1.外参数矩阵。告诉你现实世界点(世界坐标)是怎样经过旋转和平移,然后落到另一个现实世界点(摄像机坐标)上。
2.内参数矩阵。告诉你上述那个点在1的基础上,是如何继续经过摄像机的镜头、并通过针孔成像和电子转化而成为像素点的。
3.畸变矩阵。告诉你为什么上面那个像素点并没有落在理论计算该落在的位置上,并且产生了一定的偏移和变形!!!
三:照片的数量
照片一般为16幅上下,这只是一个经验值,实际上太多也不好,太少也不好。单纯从统计上来看,可能越多会越好,但是,实际上图片太多可能会让参数优化的结果变差,因为棋盘格角点坐标的确定是存在误差的,而且这种误差很难说是符合高斯分布的,同时,标定过程所用的非线性迭代优化算法不能保证总是得到最优解,而更多的图片,可能会增加算法陷入局部最优的可能性。
拍照时的标定板位置和朝向的多样性,会让内参的估计更为准确。准确的内参可以较好地把整个图像的畸变都进行矫正,但如果给定的标定板的位置过于单一,比如都是在图像的左上角,那么优化得到的内参也可能只会比较好地纠正图像左上角的畸变。推荐找个畸变较大的镜头做做实验,会更形象。http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html Matlab标定工具箱
其中说几个小的细节:
1.安装,网上有教程。可以找一个
2. 这个代表十字点点儿的方框大小,方框的大小,对结果的影响不大 一般是5
3. 这个代表是标定板每个小格的大小,并不是整体方格的大小,曾经在这吃过亏。
4.然后可以一直按回车,选点直到最后一张图片。在途中不用输入畸变系数,畸变系数是相对鱼眼镜头标定来说,平时用不着。
5.按下“Calibration”键,即可完成摄像机内参的标定。点击“shou extrinsic ”在新的图形窗口显示摄像机与标定靶之间的关系。转换成“Switch to world_centered view ”,点击“Calibration”键,此刻效果会好一点。一般走到这就可以了,没有必要往下继续走了。
详细的内容可以看链接。
五:
张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
http://blog.csdn.net/qq_36930777/article/details/70473117
六:三倍标准差法
https://wenku.baidu.com/view/c26cafc70c22590102029d75.html?qq-pf-to=pcqq.group
七:
经典手眼标定算法之Tsai-Lenz的OpenCV实现
http://blog.csdn.net/qq_36930777/article/details/71775444