我有一些从广角appx捕获的图像。 (180度)相机。 我正在使用opencv 2.4.8,它提供了有关相机矩阵n失真矩阵的一些细节。
MatK = [537.43775285, 0, 327.61133999], [0, 536.95118778, 248.89561998], [0, 0, 1]
MatD = [-0.29741743, 0.14930169, 0, 0, 0]
此信息我已进一步用于消除失真。 但结果并不像预期的那样。 我附上了一些我用来校准的棋盘输入图像。 或者是否有任何其他工具或库可以将其删除。
输入图片
来自普通相机的
,甚至是我的智能手机拍摄
答案 0 :(得分:4)
这不是问题的答案,而是关于"讨论"变形和平面度。
实际上,你在模式上有一些直线:
使用(几乎任何)镜头,你会得到某种扭曲,这样在投影到你的图像后,这些直线就不再是直的了。对于广角镜头来说,这种效果要强得多。你可以期待这样的事情(广角更强但相似):
但是你提供的图像看起来更像是这样,这可能是因为你的图案在地面上并不是真正的平面,或者因为镜头有一些额外的"丘陵"在你的镜头上。
答案 1 :(得分:1)
校准过程的全部要点是告诉OpenCV在变形下的直线是什么样的。棋盘用于呈现易于OpenCV检测的多条直线。在您的图像中,这些线条根本不直。我非常确定OpenCV还需要方盒。
所以,使用真正的棋盘图案。打印出来,将其粘在一块木头或硬塑料或其他任何东西上。但要确保它在平面上是常规的棋盘图案。
答案 2 :(得分:0)
最常见的方法(例如Oculus Rift Runtime使用)绘制足够精细的纹理网格,选择纹理坐标或网格节点位置来补偿失真。为了获得网格,通常将多项式或样条拟合到某个参考图像。例如,相机中的棋盘是一个常见的校准目标。