【问题标题】:How to find pixel co-ordinates of corners of a square pattern?如何找到正方形图案角落的像素坐标?
【发布时间】:2011-05-20 19:59:33
【问题描述】:

这可能与编程无关,但程序员可能最适合回答它。

对于相机校准,我在一张纸上打印了一个 8 x 8 方形图案。我必须手动将这些坐标输入到文本文件中。然后软件会从那里获取它并计算校准参数。

是否有脚本或软件可以在这些图像上运行并获取 64 个正方形中每一个的 4 个角的像素坐标?

【问题讨论】:

    标签: language-agnostic image-processing opencv camera-calibration


    【解决方案1】:

    您可以使用cvFindChessboardCorners() 使用传统的棋盘图案(即没有间隙的黑白方块)来做到这一点。您可以在OpenCV API Reference 中阅读有关该函数的更多信息,并在O'Reilly's OpenCV Bookelsewhere online 中查看一些示例代码。作为一个额外的好处,OpenCV 具有计算相机的内在参数和平面校准对象的多个视图的一系列外在参数的内置函数。

    【讨论】:

    • 感谢 OpenCV 参考,我不确定 OpenCv 是否可以解码这种模式(我可能在这里错了),我在他们的校准页面上看到了一些其他模式。
    • 我所知道的所有标准校准例程(OpenCV 和其他)都假设一个黑白“棋盘”图案,正方形之间没有间隙。如果您不限于使用您发布的校准模式,我强烈建议您使用这种模式。如果这不是一个选项,您将不得不自己编写角点检测代码(如 user531627 所述)。
    【解决方案2】:

    我愿意:

    • 应用阈值并获得二值化图像。
    • 对图像应用 SobelX 过滤器。你得到一个带有垂直线的图像。这属于几乎垂直的正方形的边。将此保留为 image1
    • 对图像应用 SobelY 过滤器。你会得到一张带有水平线的图像。这属于几乎水平的正方形的边。将此保留为 image2
    • 制作(image1 xor image2)。您会得到一张黑色图像,其中白色像素指示角位置。

    希望对你有帮助。

    【讨论】:

    • 而我该如何做这一切,我的意思是我可以在哪个框架中做到这一点?
    • 我会按照 Michael Koval 的建议使用 OpenCV (sourceforge.net/projects/opencvlibrary)。
    • 无论如何你可以自己做一个快速测试。只是建立一个形象。假设图像是一个网格。 [0,0] [1,0]... 取第一行,使 Image1[0,0]=SrcImage[1,0]-SrcImage[0,0] 以此类推直到图像结束。所以你得到一个输出图像,其像素值等于相应像素和直接邻居之间的差异。这边
    • 我们得到类似水平导数的东西。它揭示了水平方向上对比度突然变化的区域(方形边)。这是对 SobelX 的简单/快速近似。
    • 任何我可以在 Paint.Net 或一些图像处理软件中检查它的方式。
    【解决方案3】:

    我确信市面上有许多具有不同功能和许可的计算机视觉库,但我脑海中浮现的一个是ARToolKit,它应该能够识别这种模式。如果这不可能,它会提供一组非常好的模式,这些模式经过定制,即使它们被部分遮挡也能被识别出来。

    【讨论】:

    • 谢谢!将检查 ARToolKit!
    【解决方案4】:

    我不知道 ARToolKit(虽然我听说过很多),但使用 OpenCV,这个处理是微不足道的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多