使用OpenCV和c ++中的一组有限图像进行相机校准

时间:2013-05-26 23:39:16

标签: c++ opencv camera-calibration

当样本数量有限并且在图像的一小块区域内时,您对摄像机校准有任何想法或建议吗?

以下是一些其他信息:

我正在开展一个项目,帮助残疾人用眼睛使用电脑。由于我对OpenCV缺乏经验,有些事情让我有点麻烦。

相机头戴式,凸度不错,但眼球本身是凸起的,可以旋转移动。我打算“弄平”眼睛,使它看起来像是在飞机上移动。显而易见的选择是校准相机以尝试消除径向失真。

在校准过程中,用户在屏幕上查看网格的角落。在校准期间,瞳孔的力矩存储在垫子中的每个位置。因此,当我在屏幕上看到网格的角落时,我会看到一个带有与多个眼睛位置相对应的点的图像。

我可以绘制连接四个点组的填充轮廓并创建棋盘图案,或者我可以将每个眼睛位置保存为点并使用对称圆圈图案进行校准。

我遇到的问题是相机是静止的,眼睛的位置没有变化,因此我可以生成多少图像,因为位置范围不是很大。

我正在考虑将网格细分为较小的棋盘图案,但它们都将位于相同的小区域中,所以我不确定它会有多大用处。

谢谢!

1 个答案:

答案 0 :(得分:1)

您所说的实际上并不是相机校准 - 它是您的眼动追踪设置的校准。

当您在OpenCV中校准相机时,您会尝试去除径向和切向失真,因此应用该过程来“展平”圆形物体似乎很直观。然而,球形镜头引入的径向畸变并不是你所处理的。您关注的是球形物体上的点投射到图像中的方式。

不可否认,模型看起来非常相似,但重点是在将设置校准到测试对象期间,不应触摸相机的校准(应该离线)。您的“位置范围”有限的事实是您的问题所固有的,并且无法通过图像处理进行更改。你拍摄的眼睛只能填满你相机的视野。

就我个人而言,我只是将瞳孔位置记录在屏幕上9个均匀分布的点上,并将屏幕坐标与瞳孔二阶多项式的图像坐标相关联。这归结为采用球形投影的第一个泰勒项,除非眼球运动很大,否则这可能是足够好的。然后,您可以使用16而不是9点来测试第二次校准时的预测运动。

我认为您可以找到book on the topic以获取更多信息。