写在前面:

上一篇文字内容比较多,主要侧重于算法本身以及公式实现,这一篇可以适当人话一点,主要是自己的理解和图示说明这个算法的原理。


一、LineMod算法介绍

  LineMod算法是由Hinterstoisser等人在2011年提出的旨在解决杂乱场景下少纹理三维物体的实时监测与6D位姿估计定位问题。

  针对传统方法搜索空间方式效率低、较难产生判别描述子并且低鲁棒性的弊端,采用模板匹配法。利用物体的RGB-D信息作为输入,通过PCL数据处理库分析目标点云数据。

  利用预先采集好的三维物体的无噪声或少噪声模板经过较短时间的训练得到物体各个方向每个像素点梯度方向和幅值变化,在较短的时间即可完成模板的训练。

  在之后的识别中利用采集到的点云数据与模板对比即可得到物体信息、位姿及自信度。最后利用ICP算法对检测结果进行位姿修正。

 

二、LineMod算法原理

1.模板采集阶段

  LineMod算法是基于模板匹配的方法,在进行三维物体识别前需要对应物体低噪声、高精度、完整的模型。

  一种方法是通过深度相机从多个视角、多种距离、多个方向分别对目标物体进行模板采集,但是这种方法容易产生较多的噪声,对之后的目标识别会产生潜在的干扰,而且该方法费时费力,手动采集不切实际。另一种方法是通过OpenGL手动渲染预识别三维物体的模型,利用UG、AutoCAD等三维仿真建模软件即可完成对应物体的三维模型创建与渲染。

 这种方法的好处是噪声可控制,甚至可以得到零噪声的模型,对于之后算法对物体识别率的影响可以降到最低。不过,因为计算机视觉方向的火热对生活中常见的物体的三维模型需求越来越强烈,因此存在很多三维物体模型的模板库供下载,如Thingiverse、YouMagine、Pinshape等网站已经提供了大部分常见的格式为stl、stp、obj的三维物体模型。

 本文进行识别并抓取的可乐罐的图像模型如下图所示。

2.模板训练阶段

  相对于通过计算图像像素到最近的边缘的距离和梯度方向的基于图像边缘特征的方法,LineMod算法是通过模板匹配的方法,其通过采集物体在各角度、各距离的模板图像,将图像上各视点的梯度和法向量方向的特征进行提取保存并编码。

  每个视点位置的多个特征对应一串二进制字符串即为之后进行物体匹配的关键编码,因此对于三维物体的模板的训练至关重要。 LineMod算法在训练阶段包括特征点特征向量计算、特征点坐标计算及信息存储等过程。 

3.模板匹配阶段

 在模板匹配阶段,输入的测试图像会简单判断图像的宽度和高度并调整为16的倍数便于之后的图像处理,各像素点特征向量以及坐标位置的计算和训练阶段一样。在得到像素点的特征向量和坐标位置以后,将会完成梯度方向展开(方向扩散),线性化存储及相似度计算等步骤。 

这个算法的核心公式是:

三、LineMod算法的优缺点

   LineMod算法作为一种模板匹配算法,其具备的优点有:

    1.采用多模态模板:采用RGB色彩信息以及深度信息相结合的方式提高无(少)纹理物体的准确多以及用于处理杂乱场景下的的物体;

    2.具备实时性:特征值高效量化以及处理预计算相应图线性化存储器(Linearizing the memory);

    3.特征采用彩色图像的梯度信息结合物体表面的法向特征作为模板匹配的依据;

    4.算法速度快,效果较好以每秒10帧的速度用3000个模板处理640*480图像。

  但是其也有不可避免的劣势:

    1.金字塔下采样只能每次缩小一半;

    2.特征的数量只能小于等于63个;

    3.限于模板匹配的方法,如果预先没有训练过的物体无法识别;

    4.算法对于相互重叠等复杂情况下的物体分割识别存在不足,虽然第二代算法针对重合物体的情况进行了改进,但是仍然该劣势并没有根本上解决。


写在后面的话:

这一篇主要是从答辩PPT粘下来一些图片,结合图示理解LineMod算法就不是那么难了,第三篇将从代码这边出发,详细写写我当时是怎么复现LineMod算法的(虽然在csdn这边写过一些,不过这边可以重新梳理再写一下)。通过理解LineMod算法,有助于理解接下来的Patch-LineMod算法和自己提出的CT-LineMod算法。理解了三维物体识别算法就理解了我做的机器人控制系统的机器人视觉识别系统这部分的内容。