2016-05-30 30 views
1

我需要更正相机的失真,而不使用棋盘目标。我有一个矩形对象的快照。为此,我首先在图像上找到了一些矩形对象的点。因此,我有图像中的实物点和物点轮廓点的坐标。这所描绘的形象在这里: https://yadi.sk/i/PgPYJvAQs8YwQ https://drive.google.com/file/d/0B1uajFxXL5MUMnFiVjVjbF8tTVE/view不用棋盘,按物体和轮廓点去除相机失真

我怎么能继续在JavaCV或OpenCV的?

+0

您的谷歌驱动器文件不共享。 –

+0

对不起,我修好了。 – FedorM

+1

为什么你不能只使用校准模式?你的相机是否在月球上,因此你无法到达它?这没有意义。 – Piglet

回答

0

您可以尝试在opencv中使用findHomography函数,该函数使用RANSAC来说明异常值并获得图像转换的初始估计值。

Mat h = findHomography(distorted_src,undistort_dst); 
warpPerspective(im_src, im_undistort, h, size); 
+0

如果我正确地理解你 - 这种方法让我纠正我的图像上的透视传播。但是我需要在这个图像上正确的镜筒失真。 (透视校正已经完成,并且矩形对象的边正确地绘制在结果图像上并且该对象位于中心位置) – FedorM

0

的几点:

  1. 你所选择的相应的扭曲/在你的榜样图像畸变的点是错误的。既然你只对桶(又名放射状)失真感兴趣,匹配的点应该在相同的半径上。
  2. 如果你的对应关系是确切的,这意味着你可以识别每个失真点的未失真版本,并且知道它们的未失真坐标,那么问题与使用“棋盘”模式没有什么不同:你只是将它作为一个标准非线性最小二乘问题
  3. 如果对应关系不准确,则可以强加的唯一约束条件是直线必须是直的。此方法的主要参考是https://hal.inria.fr/inria-00267247/document