赞
踩
姿态估计(Pose estimation)在 计算机视觉领域扮演着十分重要的角色: 机器人导航、增强现实以及其它。这一过程的基础是找到现实世界和图像投影之间的对应点。这通常是很困难的一步,因此我们常常用自己制作的或基本的Marker来让这一切变得更容易。
最为流行的一个途径是基于二进制平方的标记。这种Marker的主要便利之处在于,一个Marker提供了足够多的对应(四个角)来获取相机的信息(位姿信息)。同样的,内部的二进制编码使得算法非常健壮,允许应用错误检测和校正技术的可能性。
aruco模块基于ArUco库,这是一个检测二进制marker的非常流行的库,是由Rafael Muñoz和Sergio Garrido完成的。
aruco的函数包含在c++ #include <opencv2/aruco.hpp>(注意,该库存在于opencv-contrib)。
aruco是一种合成的方形标记:由一个宽的黑色边框和一个内部ID(二进制矩阵)组成。黑色边框有利于对图形标记的快速检测,内部id则允许它的标识和错误检测。
aruco是一个显示増强技术的库(OPENCV),它包含许多预定义的不同大小和尺寸的标识。每个aruco标记都有一个固定的内部矩阵,由二进制编码组成。
应当注意到,我们需要检测到一个Marker在空间中发生了旋转,但是,检测的过程需要确定它的初始角度,所以每个角落需要是明确的,不能有歧义,保证上述这点也是靠二进制编码完成的。
底层数据处理:方法一
一、初始图像
二、换成灰度图像
三、自适应二值化
四、形态学操作
五、轮廓提取
六、四边形筛选
1)采用《道格拉斯—普克(Douglas一Peukcer)算法》
通过该算法,可以减少轮廓中点的数量,找到能包容指定点集的最小点集,只需统计该点集的点的数量是否为4、检测点集是否闭合和保证相邻边的角度小于等于180°则便能筛选出凸四边形轮廓,且DP算法将四边形的四个顶点按照逆时针排序,保证轮廓的有向性。
2)去除边长较小轮廓
二、透视变换
参考opencv透视变换。
一、编码方式
ArUco码作为广泛应用于增强现实的标记,其种类繁多,尺寸(比特位的个数)也可根据实际的需要生成想要的标记,但都是由黑色边框和内部id组成,且内部id釆用基于海明码的编码方式,即将整个标记分成n x n的表格,其内部(n-1)x(n-1)区域为id区域。其中黑色格子代表0,白色格子代表1,通过采用特定的编码方式确定此标记的唯一id。
二、内部编码的识别
当获得方形图像的正面视图之后,需要验证其是否为标记图像。为了让标记只含有黑白两种颜色,需要对候选标记区域的灰度图使用大律〇STU算法(二值化),去除灰像素,只留下黑白像素,便于验证候选标记的周围一圈是否为黑色以及提取内部id矩阵。具体的流程为:
1)对标记进行颜色提取。将得到的方形图像分割为 n x n等大小的小方格,然后统计每个小方格内像素值为0和1的数量,若该方格内的像素值为0的数量大于所设定的阈值,那么则认定此方格为黑色方格,否则为白色方格。其次对紧邻轮廓边缘的方格判断其是否都为黑色方格,若是则认定此方形图像为候选标记。
2)提取内部id矩阵。根据黑白方格的判定原则将提取到的0、1放入内部编码矩阵。由于拍摄角度的问题,摄取到的标记图像可能有4种方向,分别对应4种编码,其中之一为符合要求的编码。
3)根据海明距离得到最终的id编码。海明距离就是序列相同位置上数据不同的个数,对于海明码11010111和10110111,数据位分别为1011和0111,第三位和第四位不同,那么这两个海明码的海明距离为2。通过分别计算4个方向上海明码与当前标记的海明码的海明距离,若有一个海明距离为0,则证明此标记为设定标记,此时的id为最终的id信息。
4)**角点细化。**为了保证标记定位的精度,需要对检测到的标记的4个顶点位置进一步的细化,以亚像素级顶点坐标为最终的顶点位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。