ArUco Marker检测原理

  • Post author:
  • Post category:其他


标记检测过程包括两个主要步骤:

  1. 检测候选marker

    在该步骤中,分析图像以找到作为标记的候选的正方形形状。 它首先进行

    自适应阈值处理

    以对标记进行分割,然后从阈值图像中

    提取轮廓

    ,并丢弃那些非凸起或不接近正方形的轮廓。 还应用了一些额外的过滤(去除太小或太大的轮廓,去除彼此太近的轮廓等)。
  2. 在候选检测之后,有必要通过分析它们的内部编码来确定它们是否实际上是标记

    此步骤首先提取每个标记的标记位。 为此,首先,应用

    透视变换

    以获得其规范形式的标记。 然后,使用

    Otsu

    对规范图像进行阈值处理以分离白色和黑色位。 根据标记大小和边界大小将图像分成不同的单元格,并计算每个单元格上的黑色或白色像素的数量,以确定它是白色还是黑色位。 最后,分析比特以确定标记是否属于特定字典,并且在必要时采用纠错技术。

    参考链接:

    https://blog.csdn.net/kyjl888/article/details/72843940


自适应阈值处理

  adaptiveThreshold(_in, _out, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, winSize, constant);
  adaptiveThreshWinSizeMin(3),
  adaptiveThreshWinSizeMax(23),
  adaptiveThreshWinSizeStep(10),

数字越大,二值化以后的边缘越粗

参考:

https://blog.csdn.net/u010566411/article/details/54317416



提取轮廓

static void _findMarkerContours(InputArray _in, vector< vector< Point2f > > &candidates,
                                vector< vector< Point > > &contoursOut, double minPerimeterRate,
                                double maxPerimeterRate, double accuracyRate,
                                double minCornerDistanceRate, int minDistanceToBorder)


透视变换


Otsu

threshold(resultImg, resultImg, 125, 255, THRESH_BINARY | THRESH_OTSU);
  • 最大类间方差法原理

    利用阈值将原图像分成前景,背景两个图象。
  • 关于最大类间方差法(otsu)的性能:

    类间方差法对噪音和目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。

    当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好,但是类间方差法是用时最少的。
  • 最大类间方差法(otsu)的公式推导:

    记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。

    则图像的总平均灰度为:u=w0

    u0+w1

    u1。

    前景和背景图象的方差:g=w0*(u0-u)

    (u0-u)+w1

    (u1-u)

    (u1-u)=w0

    w1*(u0-u1)*(u0-u1),此公式为方差公式。

    参考链接:

    https://baike.baidu.com/item/otsu/16252828?fr=aladdin



    具体流程
  • Thresholding

    自适应阈值化
  • Contour filtering

    轮廓尺寸过滤
  • Bits extraction

    透视变换去除扭曲

    Otsu提取黑白位

    网格划分
  • Marker identification
  • Corner refinement(边框位置精确化)



版权声明:本文为weixin_41528941原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。