原文站点:https://senitco.github.io/2017/07/15/image-feature-freak/
FREAK算法来源2012年CVPR上的一篇文章FREAK: Fast Retina Keypoint,与ORB、BRISK算法类似,FREAK也是一种基于二进制编码的图像特征描述子,计算较快,对噪声鲁棒,具有尺度不变性和旋转不变性。此外,该算法还有一个突出特点就是受到人眼视网膜视觉机理的启发而提出。
在前面的博文中,介绍的BRIEF、ORB、BRISK算法都是基于特征点周围邻域像素点对之间的比较,形成二进制编码串作为特征描述子,这种描述方法计算速度快,且占用内存小,满足一些实时应用场景的需求。对于这类特征描述子,关键是确定邻域哪些像素点对进行比较,以及如何匹配。BRIEF算法中特征点邻域的像素点对是随机采样生成的,ORB算法是通过贪婪穷举的方法,在所有可能的像素点对中选取相关性较小的若干点对,BRISK则是采用平均采样的方法生成若干采样点。特征匹配方法通常都是采样Hamming距离来进行度量,由于是二进制编码方式,可通过异或操作快速计算。
特征点检测
FAST算法可实现快速检测图像特征点,而且对应有一个加速版本AGAST,因此在诸多特征描述子中,都是首先通过FAST算法搜索定位特征点,再加以描述。FREAK同BRISK算法类似,也是建立多尺度空间,在不同尺度的图像上使用FAST算法检测特征点。
采样模式
FREAK算法中采样模式接近于人眼视网膜接收图像信息的采样模型,如下图所示,人眼视网膜中,Fovea区域主要对高精度的图像信息进行处理,而Para区域则主要对低精度的图像信息进行处理。

在FREAK的采样模式中,图中每一个黑点代表一个采样点,每个圆圈代表一个感受野,每个采样点需进行高斯模糊处理,以降低噪声影响,感受野的半径表示高斯模糊的标准差。这种采样模式与BRISK的不同之处在于,感受野之间存在重叠的区域;与BRIEF和ORB算法的不同之处在于,FREAK的采样点根据与特征点的距离远近,采用了不同大小的高斯核函数进行平滑处理。不同大小的感受野在人眼视网膜中也存在类似的结构,通过重叠的感受野,可以获得更多的信息,使最终的描述符更具独特性和可区分性。最终FREAK算法的采样结构为6、6、6、6、6、6、6、1,6代表每层中有6个采样点并且这6个采样点在一个同心圆上,一共有7个同心圆,最后的1表示特征点。
特征描述
FREAK算法同样采用二进制编码描述特征点,用 F 表示编码特征