鱼眼相机OpenCV校准:棋盘格尺寸是否必要?
鱼眼相机校准中棋盘格坐标的疑问
我打算使用OpenCV的鱼眼相机校准模块,通过拍摄不同角度的棋盘格并将相关信息传入校准函数来完成相机校准。
我查阅的多数参考资料里,都使用整数坐标来定义棋盘格的物体点,比如:(0,0,0), (1,0,0), (2,0,0), ..., (6,5,0)
但OpenCV的文档明确说明,objectPoints是标定板坐标系下的标定板点向量的向量。常规相机校准的文档还补充:在新接口中,它是一个嵌套向量结构(比如C++中的std::vector<std::vector<cv::Vec3f>>),外层向量的元素数量等于标定板的拍摄次数;如果每次拍摄的都是完整的相同标定板,那么所有内层向量的内容一致;若存在遮挡或使用不同标定板,内层向量则不同。对于平面标定板,所有点都位于XY平面(Z坐标为0)。
我理解的正确做法是:棋盘格的物体点应该使用真实物理尺寸来计算,比如(0,0,0), (1*gridSize,0,0), (2*gridSize,0,0), ..., (6*gridSize,5*gridSize,0),其中gridSize是棋盘格单个单元格的真实宽高。而且OpenCV的官方示例代码也采用了这种方式:
{ for( j = 0; j < boardSize.height; j++ ) for( k = 0; k < boardSize.width; k++ ) objectPoints[i].push_back(Point3f(k*squareSize, j*squareSize, 0)); }
我的疑问:
- 多数参考资料使用整数坐标的做法是被重复复制的错误吗?
- 棋盘格的真实物理尺寸会影响校准结果的假设是否正确?
内容的提问来源于stack exchange,提问作者Mehno
相关产品推荐
相关产品推荐

