【问题标题】:Generate an image that can be most easily detected by Computer Vision algorithms生成最容易被计算机视觉算法检测到的图像
【发布时间】:2014-07-02 01:25:28
【问题描述】:

从事与计算机视觉相关的小型项目,主要是尝试使用 OpenCV。这让我想到了一个有趣的问题:

使用特征检测来查找图像中的已知对象并不总是那么容易 - 对象很难找到,尤其是在目标对象的特征不是很好的情况下。

但是,如果我可以提前选择我正在寻找的内容,那么理论上我可以为自己生成一个最佳检测图像。任何使特征检测变得困难的品质都将不存在,而所有使特征检测变得容易的品质都将存在。

我怀疑这种想法会出现在 QR 码之类的东西上,但他们希望 QR 码既简单又小巧。

所以我的问题是:您将如何生成最佳图像以供相机稍后识别?如果您已经知道会出现偏斜或部分模糊等某些问题怎么办?

非常感谢

【问题讨论】:

  • 听起来你在问fiducial markers
  • @Sneftel:差不多。是否可以生成一个真正最优的基准标记来处理通常与使用相机在现实世界中寻找事物相关的许多问题?
  • 是的。一个依赖于角点检测和相对方向的鲁棒性,本质上产生了一个基准,其信息与旋转和倾斜无关。这是一个庞大的话题,将三角学与信息论相结合。
  • 你想二维码是对的,顺便说一句。它们过于详细,无法为大多数用途制作好的基准,但大多数基准看起来像低分辨率 QR 码,因为它们具有大部分相同的需求。

标签: computer-vision feature-detection feature-extraction


【解决方案1】:

我认为您需要类似 AR 标记的东西。 看看ArToolkitArToolkitPlusAruco 库,它们有标记生成器和检测器。 还有关于标记生成的论文:http://www.uco.es/investiga/grupos/ava/sites/default/files/GarridoJurado2014.pdf

【讨论】:

  • 我认为这正是我所需要的——尤其是那张纸真的很棒。它只处理由黑白框组成的基准标记,但它确实实现了我脑海中的想法:不同标记之间的最大熵以便于识别。
【解决方案2】:
  1. 如果您计划使用特征检测,则标记应特定于使用的特征检测器。检测器设计的常见做法是对具有高 x,y 梯度的“角落”或区域做出良好响应。您还应该注意目标的缩放比例。

  2. 可以使用 BLOBS 执行最简单的检测。它可以比特征点更快、更健壮。例如,您可以检测圆形斑点或矩形。

【讨论】:

    【解决方案3】:

    根据您希望看到标记的距离、您通常使用的查看条件/背景以及相机分辨率/噪音,您应该选择不同的图像/目标。在较远距离的中等视角下,颜色目标非常独特,请参见:

    https://surf-it.soe.ucsc.edu/sites/default/files/velado_report.pdf

    近距离使用各种条形码/二维码可能是不错的选择。除此之外,任何平面纹理对象都可以使用单应性而不是 3D 对象轻松跟踪。 http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html

    Predator 等系统甚至可以快速学习和跟踪 3D 对象的不同视图:

    https://www.youtube.com/watch?v=1GhNXHCQGsM

    然后是硬件、结构光、同步标记等整个领域。例如,Kinect 使用投影在表面上的预定义图案来实现立体效果。这意味着它每秒识别并匹配数百万个微模式,从匹配的对应关系中创建深度图。请注意,一个相机会看到该图案,而另一台设备 - 投影仪将其生成为虚拟相机,请参阅 http://article.wn.com/view/2013/11/17/Apple_to_buy_PrimeSense_technology_from_the_360s_Kinect/

    展示对标准棋盘模式的良好跟踪的最快方法是使用 open cv 的 pNp 函数:

    http://www.juergenwiki.de/work/wiki/lib/exe/fetch.php?media=public:cameracalibration_detecting_fieldcorners_of_a_chessboard.gif

    这实际上可以通过调用两个函数来完成

    found = findChessboardCorners(src, chessboardSize, corners, camFlags);
    drawChessCornersDots(dst, chessboardSize, corners, found);
    

    总而言之,您的问题非常广泛,并且有多种答案和解决方案。制定您的观看条件、相机规格、背景、距离、运动量和您期望在室内与室外拥有的视角等。计算机视觉中没有一般情况!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2018-03-19
      相关资源
      最近更新 更多