为了获得用于相机位姿估计的特征点对做的图像预处理
1、阈值分割
目的是获得领航AGV的外壳轮廓
阈值分割是按照图像像素灰度幅度进行分割的方法,它是把图像的灰度分成不同的等级,然后用设置灰度门限(阈值)的方法确定有意义的区域或要分割物体的边界。
目的是要按照灰度级,利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取一个比较合理的阈值,对像素集合进行一个划分,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生相应的二值图像。
0纯黑色--------->255纯白色
2、对相邻两帧图像进行特征点提取和匹配
目的是为了得到特征点对
(1)利用ORB特征点检测方法提取两帧图像的特征点集
ORB(Oriented FAST + Rotated BRIEF)
双车协同搬运系统对实时性的要求,选择ORB来提取特征点,后面两个算法精度高但是太慢了,会跟丢
FAST算子的基本原理是:若某像素点与其周围领域内足够多的连续的像素点存在某一属性差异,并且该差异大于指定阈值,则可以断定该像素点与其邻域像素有可被识别的不同之处,可以作为一个特征点(角点);对于灰度图像,FAST算子考察的属性是像素与其邻域的灰度差异。
举例如下图:
首先任意选定一个点作为候选的特征点,以该点为圆心,半径是3的圆周上的共计16个像素点和中心点的差异。如果有 连续的12 个像素点与中心点的灰度差的绝对值大于或低于某一给定阈值,则该点被检测为FAST特征点。
为了提高检测速度,FAST提出分割测试的概念,不是逐个遍历考察圆周上的16个像素点,而是先考察垂直和水平方向上的4个点,1,9,5,13 。先测试 1 和 19, 如果它们符合阈值要求再测试 5 和 13。
如果 p 是角点,那么这四个点中至少有 3 个要符合阈值要求。如果不是的话肯定不是角点,就放弃,节约了检测时间,提高了效率。
通过这步测试的点再继续进行测试(是否有 12 的点符合阈值要求)。
初步筛选后,在对剩下的符合条件的点实施FAST算子进行特征点检测,最后进过非极大值抑制(去除非极大值的算法,挑出最显著的特征点)后得到最终的特征点检测结果。
(2)特征点粗匹配(匹配过程暂时不是很清楚)
ORB特征点通过汉明距离进行图像特征点匹配,选汉明距离小的对(汉明距是两个字符异或操作所得字符里面1的个数)
是对BRIEF描述子用汉明距的,BRIEF 是一种二进制描述,需要用汉明距离度量。
事先通过FAST得到了特征点的位置,BRIEF在特征点附近随机的选取若干点对,将这些点对的灰度值大小组合成一个长为256的二进制字串,并将这个二进制字串作为该特征点的特征描述子。
大量实验表明,不匹配特征点的描述子的Hamming距离在128左右,匹配点对描述子的Hamming距离则远小于128。
采用FLANN算法进行特征点的配准。计算所有匹配点对的最近邻距离d1和次近邻距离d2。设定阈值T,如果两者的比值r=d1/d2小于T,则保留该匹配点对。也就是用最优距离和次优距离作比,找区分度明显的对。
(3)双向交叉滤波筛选(?)
(4)余弦相似度提纯
两个特征向量间的余弦值越大。则特征向量相似程度越高。
也就是说越接近1,两个特征描述向量的相关性就越高。
(5)使用RANSAC算法对错误匹配点对进行最后一次筛除。(待深入)
随机抽样一致算法(RANdom SAmple Consensus,RANSAC)
RANSAC算法假设数据中包含正确数据和异常数据(或称为噪声)。
正确数据记为内点,异常数据记为外点。
对误匹配的粗差点进行剔除,RANSAC算法就是一种剔除离群点的很好的一种方法。