【问题标题】:Finding a chequered board in an image, and identifying the angle and distance在图像中查找方格板,并识别角度和距离
【发布时间】:2012-09-17 11:11:35
【问题描述】:

我想要做的是获取一个源图像,该图像将包含一个已知物理尺寸和已知正方形数量的黑白方格板,并确定所述板的边界,以及从正在观察它(假设它完全平坦)以及从多远的距离观察。

如果我能可靠地识别棋盘的 4 个角,那么我就知道如何计算角度和距离,所以任务更多的是识别棋盘。

到目前为止,我尝试的是对图像进行灰度化并增加对比度,因此我最终得到了一张鲜明的黑白图像(在眼睛看来,只有白色方块包含黑色) - 虽然我可以识别通过测量从黑色->白色->黑色的变化频率,从自上而下的角度来看,电路板的边界很好,我不知道如何从任何角度进行此操作。

名义上我是用 C# 来做这件事的,但就实际答案而言,我很高兴看到任何具有类似 c 语法的代码示例——不过,我对这个的数学和方法更感兴趣。

【问题讨论】:

  • 'How do I...' 需要整个算法作为响应的问题并不适合stackoverflow,但另一方面,还没有计算机视觉stackexchange .. .
  • 一个相当“松散”的回应会很好。这更像是一个“让我走上正轨”的问题,而不是“这样做的算法是什么?” - 一旦我有东西,我可能会自己用实际算法提交一个答案。
  • 边缘检测可能在这里工作吗?有许多内核应该没有问题找到角度的边缘。只关注最外面的边缘。

标签: c# image-processing computer-vision


【解决方案1】:

在 3d 世界中查找一般的 2d 对象通常使用 SIFT 或 SURF。

有两个步骤:

  • 在图像中找到数量可控的局部特征(例如强角)
  • 找出图像中的这些点与搜索模式之间的相关性

OpenCV 有一个实现: Features2D + Homography to find a known object 冲浪上的Wikipedia article 还指出了另一个c# implementation。 另见this Stackoverflow answer


现在这是一种非常通用的方法,我不知道它与您的棋盘格效果如何。

但棋盘图案有特定的做法:如the openCV function cvFindChessboardCorners(tutorial)

我没用过,但是找到了this description的算法:(Source is in the file cvcalibinit.cpp )

  • 通过阈值化分割黑白方块的图像二值化
  • 找到黑色方块的角:
    • 查找黑色区域边界的轮廓
    • 选择合适形状的轮廓
    • 用 4 顶点多边形逼近这些轮廓
  • 从中选择类似于校准图案正方形的四边形
  • 提取选定四边形的角,附近至少有一个角
  • 根据校准对象的大小将选定四边形的角按线分组

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多