标定板背后的秘密
前言
本文首发于视觉IMAX知识星球,此处略作修改,行文如下。
正文
近期在阅读《工业机器人视觉通用技术规范》时,无意中发现其中有如下一段话,截图如下:
对上述文字,我心生好奇,同时也充满了疑惑。
带着问题,我又重新研读了《Learning OpenCV》中关于相机标定部分,对其中的发现略作总结,如下文。
《Learning OpenCV》第417页,有如下一段叙述:
“因此对一个标准象棋棋盘,正确的值应该是cvSize(7,7)。……而且至少必须大于棋盘的所有角点数(对一个标准象棋棋盘为49)。”
本页下方还有一段小注:
实际使用中,使用棋盘格为不对称的偶奇维数更方便——比如(5,6)。这样的偶-奇不对称模式使得棋盘只有一个对称轴,从而棋盘的方向总是能唯一确定。
这段话,也对我设计标定板图纸给出了指导意见,由原先的8x8修改为7x8。
由以上部分,可以得出:标准象棋棋盘角点个数为49,《技术规范》中的表述“且提取的角点个数不少于50个”不够严谨。
此外关于“国际棋盘格标定模板”与“标准象棋棋盘格”是不是一回事?这个我在网上搜索了一下:只检索到宏城光学这家店里提到国际棋盘格标定板,我打电话咨询了一下商家,对方表示没有国际棋盘格规定角点个数这一说法,根据需要设计即可,也就是角点个数可多于50,也可以少于50。
另外,对于前半段文字“求取图像的畸变系数时应从不同角度拍摄不少于10幅图像”,这句话也存在不严谨的地方,细述如下:
《Learning OpenCV》中第423页,关于棋盘角点个数和参数个数部分,有如下一段文字:
因此无论在一个平面上检测到多少格角点,我们只能得到四个有用的角点信息。鉴于每个棋盘视场,方程只能给我们四个角点信息或者(4-3)K>1。这意味着一个3x3棋盘(只计算内部角点)最少需要两个视场来求解标定问题。考虑到噪声和数值稳定性要求,对大棋盘需要收集更多的图像。实际使用中,为了得到高质量结果,至少需要10幅7x8或者更大棋盘的图像(而且只在移动棋盘在不同图像中足够大以从视场图像中得到更加丰富的信息)。
由此处,我们不能说是必须要>=10,只能说>=10张的精度会更好。
跋
以上仅是我对标定个中细节浅薄的认知。当然,对于标定板的设计与识别,还有太多值得深究的地方,比如在使用投影仪打光进行标定的时候,标定板如果表面材质透光,将会影响其成像等等。如有兴趣者,欢迎沟通交流,也欢迎加入视觉IMAX知识星球,与更多有识之士结伴为伍。
荐读