图像校正
image-processing
opencv
5
0


我需要实现图像校正。问题是从四个角度(topL,topR,bottomL,bottomR)给出对象的图像我需要进行成对校正。我在OpenCV中尝试了一些代码但还没有取得进展。有人可以告诉我一种执行纠正的好方法(源代码/教程)?我需要使用C / C ++ / OpenCV。

http://portal.acm.org/citation.cfm?id=1833349.1778777

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

这是一个极为广泛的问题,以下是您可以采用的一种方法的概述...

  • 使用cvGoodFeaturesToTrack()在两个图像上查找强功能拐角

  • 将找到的特征传递到cvFindCornerSubPix()以获取更精确的浮点表示形式,以表示强大特征的位置

  • 使用cvCalcOpticalFlowPyrLK或其他光流函数,使用最后一步中的子像素功能计算两个图像之间的光流。 (我喜欢cvCalcOpticalFlowPyrLK()

这是棘手的地方 ...为了校正图像,有助于了解有关相机固有特性(视野,焦距)的知识,尤其是在您计划进行某种3D重建或计算视差对应关系时。由于您没有提及有关校准摄像机设置的任何内容,因此我将继续使用未校准算法。

  • 您将需要找到基本矩阵,该矩阵对用于计算校正矩阵的场景的所有方面进行编码。使用cvFindFundamentalMatrix()执行此操作。

  • 有了基本矩阵,您现在必须找到同形矩阵,该矩阵将两个图像映射到同一平面。使用cvStereoRectifyUncalibrated()执行此操作。尽管名称暗示它正在纠正图像,但并非如此,它只是返回可用于纠正图像的单应性矩阵。

  • 最后,使用最后一步中的cvInitUndistortRectifyMap()矩阵,您可以通过调用cvInitUndistortRectifyMap()来获得两张图像的cvInitUndistortRectifyMap() ,然后将其传递到cvRemap()中进行实际的重新映射。

我必须警告你,还有一些进入这些库调用的参数很多 ,你将不得不处理许多矩阵和许多图像,更何况没有内在的摄像机标定的细节,你将不得不作出许多假设,可能大大影响你的结果...绝非易事。


如果您想了解更多信息,我建议购买和/或阅读Learning OpenCV ,它远远超出了关于stackoverflow的简短段落的范围,希望了解所有这些内容:)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号